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