?端口轉發的概念和應用
? ? ??
? ? ? ?什么是端口轉發呢,我們知道,SSH 會自動加密和解密所有 SSH 客戶端與服務端之間的網絡數據。但是,SSH 還同時提供了一個非常有用的功能,這就是端口轉發。它能夠將其他 TCP 端口的網絡數據通過 SSH 鏈接來轉發,并且自動提供了相應的加密及解密服務。這一過程有時也被叫做“隧道”,這是因為 SSH 為其他 TCP 鏈接提供了一個安全的通道來進行傳輸而得名。例如,Telnet,SMTP,LDAP 這些 TCP 應用均能夠從中得益,避免了用戶名,密碼以及隱私信息的明文傳輸。而與此同時,如果在平時的工作環境中有防火墻限制了一些網絡端口的使用,但是允許 SSH 的連接,那么也是能夠通過將 TCP 端口轉發來使用 SSH 進行通訊。所以總的來說 SSH 端口轉發能夠提供兩大功能:
加密 SSH Client 端至 SSH Server 端之間的通訊數據。
突破防火墻的限制完成一些之前無法建立的 TCP 連接。
本地端口轉發
? ? ? ??
? ? a要訪問c先將telnet用ssh封裝,傳到b后,解封后,再以telnet方式訪問c,此時的c認為是b通過telnet再鏈接自己,而其實是a在鏈接(要保證防火墻上的端口是打開著的,如果沒打開,就進不來了,需要進行遠程端口轉發,后面解釋)
實例:
?a是centos5,b是centos6,c是centsos7,首先在a上制定防火墻策略,即禁止a訪問,如下指令
iptables -A INPUT -s 192.168.37.105 -j REJECT
? ?然后啟動a的telnet服務
systemctl?start?telnet.socket
? ? 接下來在a上執行如下命令
ssh?-L?9527.192.168.37.107:23?-fN?192.168.37.106
? ? ?9527是a的發出端口,在執行前,最好檢查下(ss -nutl)有么有程序占用著這個端口,后面的ip地址是目標也就是c的ip地址,23是c的接收端口,在后面的地址是b的地址,也就是接收ssh鏈接的b,fn是后臺啟用且不打開7的shell,而是處于等待狀態,執行完后,隧道已經就建立了,可使用ss -nt查看
此時,用a鏈接c,就執行如下命令
telnet 127.0.0.01 9527
? ?這時,可以在c上執行,下面的命令
ss?-ntl
? ? 能夠查看到6正在鏈接,在b上使用同樣的命令,看到a在鏈接,也就是說測試此時隧道已經建立起來。
遠程端口轉發
? ? ?與本地端口轉發類似,但是此時防火墻上的端口是關閉的,所以此時用遠程端口轉發即可解決問題。此時,防火墻已經打開,端口不可訪問,只準往外鏈接不能外,部往內部鏈接,因此要想建立鏈接需要從內部鏈接外部,也就是此時命令是在b中打的,執行如下命令
ssh?-R?9527.192.168.37.107:25?-fN?192.168.37.105
也就是l換成R,第一個ip是最終要訪問的7第二個ip是此時充當服務器的a,b此時扮演的是客戶端,執行完成后,輸入指令
telnet?127.0.0.1?9527
這里的地址和端口號是a自己的地址和端口號,這樣一個遠程端口轉發就完成了
動態端口轉發
? ?
? ? ?當用firefox訪問internet時,本機的1080端口做為代理服務器, firefox的訪問請求被轉發到sshserver上,由sshserver替之訪問internet在本機firefox設置代理socket proxy:127.0.0.1:1080,它的命令格式如下,
ssh?-D?1080?root@sshserver
動態端口轉發,和本地和遠程端口轉發不一樣,在動態端口轉發中,目標主機地址和端口都不固定,具體轉發到哪里,可以通過代理服務器由自己來指定。
轉載于:https://blog.51cto.com/11093860/1970816