對于很多的微軟系統(tǒng)的管理員來說,都面臨著一個以怎樣的安全方式管理遠程系統(tǒng)的問題!在Unix系統(tǒng)中,這個答案十分簡單:使用SSH 協(xié)議,這是足夠安全和有效的。在SSH方式下,我們不僅能在命令行下管理遠程系統(tǒng),我們也能通過使用隧 道技術(shù)(Tunnlling)運行遠程X-Window。在傳輸過程中通過使用強壯的加密算法,以防止傳送的數(shù)據(jù)被未經(jīng)授權(quán)的訪問。
令人遺憾的是,如果把遠程安全訪問應(yīng)用于微軟操作系統(tǒng)就不是一件非常容易的事了。首先,僅僅NT 終端服務(wù)器,2000服務(wù)器和XP安裝有遠程管理服務(wù)( 終端服務(wù))。第二,一些第三方公司提供給微軟遠程管理服務(wù)的實施方案中,一般都需要很大的成本支出。且隨著方案的進一步實施,成本也越來越高。而一些免費的遠程管理軟件如(vnc)又無法提供加密傳輸功能,安全性能大打折扣。
這篇文章提出的一種能用來遠程管理從Win 95 到Windows XP幾乎所有版本的微軟操作系統(tǒng)的方案。這種方案的特點不僅表現(xiàn)在最小費用支出上,而且還具有較高的安全性。
解決方案
一個理想的遠程管理方案應(yīng)該有什么特征?首先,這個解決辦法一定是高效的。雖然在Unix 系統(tǒng)情況下,模擬終端命令行模式進行管理還是比較滿意的.但是使用這種方式來管理Windows遠程服務(wù)是遠遠不夠的, 因為Windows 是一個基于圖形環(huán)境的操作系統(tǒng),遠程管理也應(yīng)該使用一種圖形方式實現(xiàn)。除了高效,遠程管理還必須建立在安全的基礎(chǔ)上。這個解決辦法必須不僅為用戶提供鑒定,而且也必須保證被傳送的數(shù)據(jù)的機密性和完整性。
在這篇文章中討論的遠程管理方案中,通過使用以下開放源代碼軟件,來達到以上要求!
1.VNC-(Virtual Network Computing)提供圖形界面方式管理遠程系統(tǒng)。在我們的方案里,VNC軟件將是這個整個的解決辦法的" 核心"。它將提供圖形界面來連接遠程操作系統(tǒng)。
2.Stunnel –的主要目的是建立能用來以安全的方式傳送其他非加密協(xié)議傳輸?shù)臄?shù)據(jù)的SSL 隧道。 在本文的解決辦法中,這個工具將用來加密VNC協(xié)議。在Stunnel下,不僅可以保證被傳送的數(shù)據(jù)的機密性和完整性,也可以利用證書簽別VNC客戶端和服務(wù)器。
3.OpenSSL- OpenSSL 能提供一個加密函數(shù)庫,它能用來為應(yīng)用程序提供數(shù)據(jù)加密功能。通過使用OpenSSL 我們能產(chǎn)生,簽署或者撤銷基于公共密鑰基礎(chǔ)結(jié)構(gòu)( PKI) 的證書。在下面提出的這種方案中將用來產(chǎn)生并且簽署需要證實VNC 客戶端和服務(wù)器的證書。
下圖顯示了使用以上軟件來提供一個安全的遠程管理方案!
此方案實際執(zhí)行方案如下:
安裝軟件
實現(xiàn)此安全管理遠程microsoft系統(tǒng)的第一步是安裝以上軟件.
安裝VNC
我們可以在這里http://www.uk.research.att.com/vnc/下載vnc,然后安裝在我們希望能夠被遠程管理的桌面操作系統(tǒng),這即是VNC服務(wù)端.接下來所做的是需要注冊VNC服務(wù),注冊方法:依次打開”開始”,”RealVNC”,”VNC server”,”Register VNC Server Service”,然后系統(tǒng)將會要求重啟。
重啟系統(tǒng)之后,我們必須設(shè)置VNC 服務(wù)的基本參數(shù)。 最重要的事情設(shè)置一個有效的口令,以防止VNC 服務(wù)被未經(jīng)授權(quán)的訪問。下一步關(guān)閉" enable jave viewer" 選項 (此選擇要求兩條單獨的SSL 隧道,我們將不使用它),如下圖顯示:
在完成使VNC服務(wù)端設(shè)置之后,我們應(yīng)該下載VNC客戶軟件(vncviewer.exe) 并且將它放于VNC客戶端。
接著應(yīng)該檢查VNC客戶端是否能與VNC服務(wù)端建立起一個連接,如果雙方能夠建立起連接,我們便完成了初步的設(shè)置。
由于VNC服務(wù)端只能夠被本地安裝的Stunnel軟件所訪問,所以我們需要往注冊表中添加一個鍵值:
Key:HKEY_LOCAL_MACHINE\Software\ORL\WinVNC3Name:LoopbackOnly
Type: REG_DWORD
Value: 1
以上鍵值的作用是使之能夠使用loopback連接,即回送連接,并且限制監(jiān)聽端口5900的連接只能是本地ip(127.0.0.1),這樣VNC服務(wù)器不會被網(wǎng)絡(luò)上的機器直接訪問,這樣大大的提高了安全性.另外如果我們不希望用戶關(guān)閉VNC服務(wù)的話,服務(wù)器的注冊表應(yīng)該增加一項:
Key:HKEY_LOCAL_MACHINE\Software\ORL\WinVNC3\Default
Name: AllowShutdown
Type: REG_DWORD
Value: 0
為了使以上設(shè)置生效,我們應(yīng)該重啟VNC服務(wù)。
安裝Stunnel
接下來安裝Stunnel軟件,下載地址 http://www.stunnel.org/download/binaries.html,客戶端和服務(wù)端均需要下載,在本例中放置在C:\Program Files\Stunnel.另外還需要下載2個必須的dll庫文件,libeay32.dll, libssl32.dll。
如果希望開機時自動啟動Stunnel進程,應(yīng)該在注冊表中添加如下鍵值:
Key: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
Name: Stunnel
Type: REG_SZ
Value: "C:\Program Files\Stunnel\stunnel-4.04.exe"
安裝OpenSSL
大家都知道,在現(xiàn)在大多數(shù)linux版本中,典型安裝就已經(jīng)包括了openssl庫,這主要是因為openssl庫是安裝openSSH所必須的組件.其實還有另外一種版本的openssl,是適合使用于微軟操作系統(tǒng)上的,和linux下的具有相同的功能.在本文所提到的這個方案中,我們需要的就是這種在Windows平臺下的openssl。
下面我們來安裝和設(shè)置openSSL服務(wù):
1. 信任主機(Win 2000,NT,XP)-如果可能,最好不要連接到網(wǎng)上-需要安裝openssl軟件,openssl.exe可以在Stunnel的官方站點下載http://www.stunnel.org/download/binaries.html,同樣,我們還需要下載libeay32.dll 和 libssl32.dll.2個文件,下載文件必須放到C:\Program Files\OpenSSL.文件夾。
2. 另外,還需要下載2個文件,一個配置文件, openssl.conf,可以從http://www.securityfocus.com/data/tools/openssl.conf下載
ca.bat 腳本文件,用來生成證書,下載地址: http://www.securityfocus.com/data/tools/ca.bat
這2個文件也必須放置到C:\Program Files\OpenSSL.文件夾,如下圖所示:
接下來應(yīng)該生成證書,用來鑒別VNC的服務(wù)器和客戶端。
生成密匙和證書
CA認證
這個過程首先應(yīng)該產(chǎn)生一個私人/公共密鑰對,同時產(chǎn)生一個第三方信任的證書.在隨后的過程中私人密匙將用來簽發(fā)VNC服務(wù)端和客戶端的證書,CA證書將被分配給所有的VNC服務(wù)端和客戶端.因為CA私人密匙是PKI執(zhí)行過程中最重要的基礎(chǔ)之一,所以密匙應(yīng)該被賦予一個通行碼(pass phrase)。 通行碼也可以被稱做為口令,是用來保護私匙的密碼,用戶可以自由選擇。不用口令是不能使用私匙的,因此口令和私匙同樣重要。需要選取一個安全的口令。
我們通過ca.bat這個批處理文件來產(chǎn)生密匙對和證書:
C:\progra~1\OpenSSL\ca genca
完成以上步驟之后,CA證書將存儲在c:\ca\cacert.pem文件中,私人/公共密匙對存儲在C:\CA\private\CAkey.pem文件中。
VNC服務(wù)端
接下來產(chǎn)生服務(wù)端的密匙對和證書。
C:\progra~1\OpenSSL\ca server
于是,在C:\CA\temp\vnc_server生成如下文件:
server.key – 私人/公共密匙對
server.crt – 服務(wù)器端的證書
server.pem - server.key + server.crt (在使用Stunnel時將用到)
應(yīng)該強調(diào)的是,服務(wù)端的私匙并沒有通行碼來加密,使用通行碼來加密私匙的方法并沒有在這里派上用場,主要是因為Stunnel尚不支持通行碼,其次,是用通行碼加密后的私匙將不能被用于Stunnel軟件。
VNC客戶端
最后一步是產(chǎn)生客戶端的密匙對和證書。
C:\progra~1\OpenSSL\ca client
跟服務(wù)端類似,在C:\CA\temp\vnc_client文件夾中將產(chǎn)生如下文件:
client.key –私人/公共密匙對r
client.crt – 客戶端證書
client.pem – client.key + client.crt (在使用Stunnel時將用到)
Stunnel 設(shè)置
VNC服務(wù)端
在建立起服務(wù)段和客戶端的一種安全傳輸模式前,我們必須設(shè)置好Stunnel軟件,并且安裝必需的密匙和證書。
在C:\Program Files\Stunnel文件夾中新建一個stunnel.conf文件,文件內(nèi)容為:
CAfile = CAcert.pem
CApath = certificates
cert = server.pem
client = no
verify = 3
[vnc]
accept = 443
connect = 127.0.0.1:5900
通過以上設(shè)置,使得所有連接tcp443端口的連接轉(zhuǎn)向到本地tcp5900端口,當(dāng)然有個前提,那就是客戶端必須提供有效的證書。
接下來,將ca證書(C:\CA\CAcert.pem)和VNC服務(wù)端的密匙,證書(C:\CA\temp\vnc_server\server.pem)放到C:\Program Files\Stunnel
最后我們也必須安裝VNC客戶端證書,要想使隧道程序在鑒定過程中找到證書,我們必須按照以下方法來更改證書名稱。(以下命令必須在產(chǎn)生證書的服務(wù)器上運行,其中value為運行openssl x509命令之后的輸出結(jié)果,在使用copy命令時,value必須要用這個實際的輸出結(jié)果代替。)
cd C:\CA\temp\vnc_client
C:\progra~1\openssl\openssl x509 -hash -noout -in client.crt
value
copy client.crt value.0
然后這個value.0文件應(yīng)該被放到C:\Program Files\Stunnel\certificates
如圖所示:
VNC客戶端
在客戶端配置的情況和以上的步驟類似
首先C:\Program Files\Stunnel\新建一個stunnel.conf文件
內(nèi)容:
CAfile = CAcert.pem
CApath = certificates
cert = client.pem
client = yes
verify = 3
[vnc]
accept = 127.0.0.1:5900
connect = VNC_server_IP_address:443
接下來,將ca證書(C:\CA\CAcert.pem)和VNC服務(wù)端的密匙,證書(C:\CA\temp\vnc_server\server.pem)放到C:\Program Files\Stunnel
同樣我們需要按照以下方法來更改證書名稱。
cd C:\CA\temp\vnc_server
C:\progra~1\openssl\openssl x509 -hash -noout -in server.crt
value
copy server.crt value.0
然后這個value.0文件應(yīng)該被放到C:\Program Files\Stunnel\certificates
最后C:\Program Files\Stunnel這個文件夾應(yīng)該是如下圖所示:
測試連接
到此時為止所以的設(shè)置都已完成,為了測試,我們必須在客戶端和服務(wù)段同時開啟網(wǎng)絡(luò)隧道,同時開啟VNC服務(wù)端。
在服務(wù)端
在客戶端
如果由于某種原因,沒有能夠成功的建立起連接,我們應(yīng)該提高Stunnel的登陸級別,并且找出出錯的原因,這時我們需要在stunnel.conf文件中添加一行:
debug = 7
然后重啟stunel服務(wù),并再次測試連接。
反向連接
在上面的設(shè)置中,只有當(dāng)VNC服務(wù)器具有獨立的公網(wǎng)IP,或者與VNC客戶端同處在一個局域網(wǎng)中,才能夠進行成功的連接。如果VNC服務(wù)端處于NAT(network address translation)后面或者試圖連接服務(wù)器的信息包被防火墻丟棄,那么以上連接更本無法實現(xiàn),那該怎么辦?
由于VNC服務(wù)器具有"/listen"選項,所以有可能突破以上的限制,在傳統(tǒng)的c-s模式傳輸中是由客戶端發(fā)起連接的,但是現(xiàn)在不僅是客戶端可以發(fā)起連接,服務(wù)端本身可以反向連接,唯一的要求就是服務(wù)端和客戶端能夠進行連接.當(dāng)然,這個要求客戶端不能在NAT反向代理之后,也不能被防火墻截住了信息包.
如前所述,VNC具有反向連接功能,要想使用這個功能,VNC服務(wù)器上的stunnel.conf文件應(yīng)該做少量改動:
CAfile = CAcert.pem
CApath = certificates
cert = server.pem
client = yes
verify = 3
[vnc]
accept = 127.0.0.1:5500
connect = VNC_client_IP_address:443
同樣,VNC客戶端的stunnel.conf也應(yīng)該做一下改動:
CAfile = CAcert.pem
CApath = certificates
cert = client.pem
client = no
verify = 3
[vnc]
accept = 443
connect = 127.0.0.1:5500
此時,服務(wù)端的stunnel軟件變成了ssl的客戶端,而客戶端的stunnel則變成了ssl服務(wù)端。
當(dāng)然服務(wù)端和客戶端建立連接的方法也將改變,首先客戶端打開vncviewer.exe,進入監(jiān)聽模式(依次打開開始菜單, RealVNC, VNC Viewer,Run Listening VNC Viewer).同時,在服務(wù)端,我們使用添加客戶端選項,如圖所示:
以上對于在NAT代理下的服務(wù)器非常有效,但是同時它也有個弊端,那就是必須要在服務(wù)器段進行手動操作,是否有一種方法可以不需要人為操作的建立上述連接了?
這個方案是可行的,它可以使用微軟操作系統(tǒng)中的計劃任務(wù)來實現(xiàn),下圖顯示了如何通過計劃任務(wù)來設(shè)置VNC服務(wù)端在每天的上午9點到下午9點每隔10分鐘進行自動反向連接,當(dāng)我們想在客戶端進行連接的話,所要做的只是將vncviewer.exe設(shè)置為監(jiān)聽模式,最多10分鐘就將等到來自服務(wù)端的主動連接.
相關(guān)名詞解釋:
SSH :(Secure Shell)用于提供安全的遠程登錄和其他安全網(wǎng)絡(luò)服務(wù)。
SSL :(Secure socket Layer) 安全套接層協(xié)議
Tunnel:網(wǎng)絡(luò)隧道,指的是利用一種網(wǎng)絡(luò)協(xié)議來傳輸另一種網(wǎng)絡(luò)協(xié)議。
VNC:(Virtual Network Computing)跨平臺,免費,開放源代碼的一款遠程管理軟件。由兩部分部件組成:服務(wù)端(Server)和客戶端(Viewer)。
Stunnel:一種程序,可以使用 OpenSSL 庫對任意 TCP 會話進行加密。
OpenSSL:一個非常優(yōu)秀的SSL/TLS開放源碼軟件包,它包括SSL庫、加密算法庫以及應(yīng)用程序三大部分。