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