曾德愚
摘要: SSH協(xié)議及相關(guān)工具軟件是系統(tǒng)管理員非常常用的組件,在日常網(wǎng)絡(luò)應(yīng)用中,常常會(huì)碰到各種安全問題,本文分析了SSH的端口轉(zhuǎn)發(fā)機(jī)制,討論了在一些非安全環(huán)境下使用SSH端口轉(zhuǎn)發(fā)對(duì)網(wǎng)絡(luò)應(yīng)用、個(gè)人隱私及商業(yè)信息進(jìn)行加密保護(hù)的措施,同時(shí)也討論了如何利用SSH端口轉(zhuǎn)發(fā)突破如防火墻及網(wǎng)絡(luò)應(yīng)用本身設(shè)置的限制以更加方便的使用網(wǎng)絡(luò)服務(wù)。
關(guān)鍵詞:SSH 端口 轉(zhuǎn)發(fā)
中圖分類號(hào):TP393 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2016)09-0214-01
1 概述
當(dāng)使用SSH協(xié)議進(jìn)行通信時(shí),SSH協(xié)議會(huì)對(duì)所有SSH客戶端與服務(wù)端之間的網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行自動(dòng)加解密,從而實(shí)現(xiàn)安全通信。但使用者往往忽視了SSH 協(xié)議的端口轉(zhuǎn)發(fā)功能,在端口轉(zhuǎn)發(fā)模式下,其他TCP端口的數(shù)據(jù)可以轉(zhuǎn)由SSH鏈接自動(dòng)進(jìn)行加解密轉(zhuǎn)發(fā),從而為其他TCP鏈接如Telnet、SMTP、LDAP提供安全加密傳輸通道,避免了一些明文傳輸敏感信息泄露。如果其他網(wǎng)絡(luò)端口被限制訪問,但SSH端口沒有被限制,也可以通過SSH端口轉(zhuǎn)發(fā)進(jìn)行TCP連接,因此利用SSH端口轉(zhuǎn)發(fā)不僅能夠加密SSH客戶端和服務(wù)器端的數(shù)據(jù)通信,也可以解決由于防火墻限制而無法建立TCP連接的問題。
2 端口轉(zhuǎn)發(fā)示例
假設(shè)有一臺(tái)LDAP服務(wù)器只為本地應(yīng)用提供訪問服務(wù),如果需要臨時(shí)從遠(yuǎn)程客戶端連接到這臺(tái)服務(wù)器,就可以使用本地端口轉(zhuǎn)發(fā)實(shí)現(xiàn),在遠(yuǎn)程客戶端執(zhí)行如下命令即可建立一個(gè)SSH本地端口轉(zhuǎn)發(fā)。
ssh -L 8100:localhost:389 172.16.100.123
上述命令假設(shè)服務(wù)器ip為172.16.100.123,本地監(jiān)聽端口為8100,此時(shí)即可將遠(yuǎn)程客戶端的應(yīng)用直接配置至本機(jī)8100端口,實(shí)際通信過程如下。
遠(yuǎn)程客戶端將數(shù)據(jù)發(fā)送至自己的8100端口,而SSH客戶端將8100端口接收的數(shù)據(jù)進(jìn)行加密后轉(zhuǎn)發(fā)至服務(wù)器SSH服務(wù)端,服務(wù)器端的SSH服務(wù)端解密數(shù)據(jù)并將其轉(zhuǎn)發(fā)至監(jiān)聽的389標(biāo)準(zhǔn)LDAP監(jiān)聽端口,從服務(wù)器端相應(yīng)的數(shù)據(jù)沿原路以相反流程傳輸。整個(gè)流程中客戶端直接連接本地監(jiān)聽端口,轉(zhuǎn)由SSH端口轉(zhuǎn)發(fā)完成加密、轉(zhuǎn)發(fā)、解密的通信過程,并沒有直接連接服務(wù)器端。
由于整個(gè)端口轉(zhuǎn)發(fā)通信過程基于SSH連接,因此必須保持SSH連接以使端口轉(zhuǎn)發(fā)生效,如果SSH連接斷開,顯而易見,整個(gè)通信鏈路也隨之失效。另外只能在創(chuàng)建SSH連接時(shí)同時(shí)建立端口轉(zhuǎn)發(fā),對(duì)已經(jīng)存在的SSH連接無法額外創(chuàng)建端口轉(zhuǎn)發(fā)。另外還可以使用SSH提供的GatewayPorts關(guān)鍵字將已經(jīng)創(chuàng)建的本地端口轉(zhuǎn)發(fā)共享給其他客戶端。
上面討論了SSH的本地端口轉(zhuǎn)發(fā),假如由于防火墻的原因不能使用SSH直接從客戶端連接到服務(wù)器,但允許服務(wù)器到客戶端的反向SSH連接,那么可以使用遠(yuǎn)程端口轉(zhuǎn)發(fā)。假設(shè)通信拓?fù)淙缟侠?,那么在服?wù)器端可執(zhí)行如下命令。
ssh -R 8100:localhost:389 172.16.100.234
上述命令假設(shè)客戶端ip為172.16.100.234,客戶機(jī)監(jiān)聽端口為8100。實(shí)際通信如下。
客戶端數(shù)據(jù)發(fā)送至自己的8100端口,本機(jī)SSH服務(wù)端加密8100端口接收的數(shù)據(jù)后轉(zhuǎn)發(fā)至服務(wù)器端SSH客戶端,SSH客戶端接收數(shù)據(jù)并解密,然后將其轉(zhuǎn)發(fā)至監(jiān)聽的389標(biāo)準(zhǔn)LDAP監(jiān)聽端口,最后將服務(wù)器端的響應(yīng)數(shù)據(jù)沿原路以相反流程傳輸。
如何區(qū)分本地轉(zhuǎn)發(fā)及遠(yuǎn)程轉(zhuǎn)發(fā)?首先要明確SSH端口轉(zhuǎn)發(fā)需要在SSH連接的基礎(chǔ)上實(shí)現(xiàn)應(yīng)用連接,SSH連接及應(yīng)用連接都是有方向性的,如果SSH連接和應(yīng)用連接方向一致則是本地轉(zhuǎn)發(fā),反之則是遠(yuǎn)程轉(zhuǎn)發(fā)。
3 其他類型轉(zhuǎn)發(fā)示例
例如在公共的不安全的網(wǎng)絡(luò)環(huán)境中,可以使用SSH動(dòng)態(tài)轉(zhuǎn)發(fā)對(duì)網(wǎng)頁瀏覽進(jìn)行保護(hù)。如下面的動(dòng)態(tài)轉(zhuǎn)發(fā)命令格式。
ssh-D 8100 12.34.56.78
假設(shè)8100為本地對(duì)外訪問的端口號(hào),12.34.56.78為我們有權(quán)限進(jìn)行連接的遠(yuǎn)程SSH服務(wù)器,上述命令利用SSH創(chuàng)建了SOCKS代理服務(wù),我們可以在瀏覽器上將localhost:8100設(shè)置為正常的SOCKS代理使用。在SSH客戶端和SSH服務(wù)器端的通信獲得了加解密保護(hù),但要注意SSH協(xié)議也僅能對(duì)此段連接進(jìn)行保護(hù),對(duì)SSH服務(wù)器端到目標(biāo)網(wǎng)站的連接是無法保證安全的。
例如系統(tǒng)管理員經(jīng)常會(huì)遠(yuǎn)程登錄到如Linux、Unix、Solaris等服務(wù)器上并在其上以GUI方式進(jìn)行程序開發(fā)或維護(hù),一般可以使用VNC協(xié)議及其工具,本文討論使用SSH結(jié)合XWindow實(shí)現(xiàn)X協(xié)議轉(zhuǎn)發(fā)的方法。
使用XWindows需要X客戶端及X服務(wù)器端,如上文所述,X客戶端即為 遠(yuǎn)程Linux、Unix、Solaris服務(wù)器,X服務(wù)器端則是發(fā)起訪問的本地機(jī)器,一般正常情況下,將X 客戶端的X窗口顯示在X服務(wù)器端需要在X客戶端指定X服務(wù)器端的位置,如下列命令所示,然后直接運(yùn)行X應(yīng)用即可。
export DISPLAY=Desktop:1.0
如果遠(yuǎn)程服務(wù)器前端增加了防火墻并且不允許X協(xié)議通過,此時(shí)可以使用SSH端口轉(zhuǎn)發(fā)解決,可在本地機(jī)器即X服務(wù)器端發(fā)起如下列命令所示的SSH連接,在創(chuàng)建SSH連接的同時(shí)建立X轉(zhuǎn)發(fā)并對(duì)X通訊數(shù)據(jù)進(jìn)行加密。
ssh -X 172.168.16.200
連接建立后即可運(yùn)行遠(yuǎn)程X應(yīng)用,建議不要改變建立X轉(zhuǎn)發(fā)時(shí)系統(tǒng)自動(dòng)設(shè)置的DISPLAY 環(huán)境變量如localhost:10.0,假如本地機(jī)器為Windows,可以選擇 XMing作為X服務(wù)器端,SSH客戶端可以選擇如PuTTY、Cygwin均可。
4 結(jié)語
本文討論了利用SSH實(shí)現(xiàn)本地端口轉(zhuǎn)發(fā)、遠(yuǎn)程端口轉(zhuǎn)發(fā)、動(dòng)態(tài)端口轉(zhuǎn)發(fā)及X轉(zhuǎn)發(fā),基本原理為在SSH連接基礎(chǔ)上轉(zhuǎn)發(fā)TCP連接以解決數(shù)據(jù)加密和突破限制。每種端口轉(zhuǎn)發(fā)適合于不同的應(yīng)用場(chǎng)景,對(duì)于周知端口的應(yīng)用可以使用本地或遠(yuǎn)程端口轉(zhuǎn)發(fā),如果需要實(shí)現(xiàn)SOCKS代理加密則可以使用動(dòng)態(tài)端口轉(zhuǎn)發(fā),對(duì)于X應(yīng)用顯而易見可以使用X轉(zhuǎn)發(fā),讀者可以根據(jù)實(shí)際情況做不同的嘗試。
參考文獻(xiàn)
[1]巴雷特(美).西爾弗曼(美).SSH權(quán)威指南(OReilly原版)[J].中國(guó)電力出版社,2003.
數(shù)字技術(shù)與應(yīng)用2016年9期