1. 程式人生 > >ssh服務端口轉發詳解

ssh服務端口轉發詳解

linux 端口轉發

端口轉發的概念和應用

什麽是端口轉發呢,我們知道,SSH 會自動加密和解密所有 SSH 客戶端與服務端之間的網絡數據。但是,SSH 還同時提供了一個非常有用的功能,這就是端口轉發。它能夠將其他 TCP 端口的網絡數據通過 SSH 鏈接來轉發,並且自動提供了相應的加密及解密服務。這一過程有時也被叫做“隧道”,這是因為 SSH 為其他 TCP 鏈接提供了一個安全的通道來進行傳輸而得名。例如,Telnet,SMTP,LDAP 這些 TCP 應用均能夠從中得益,避免了用戶名,密碼以及隱私信息的明文傳輸。而與此同時,如果在平時的工作環境中有防火墻限制了一些網絡端口的使用,但是允許 SSH 的連接,那麽也是能夠通過將 TCP 端口轉發來使用 SSH 進行通訊。所以總的來說 SSH 端口轉發能夠提供兩大功能:

  1. 加密 SSH Client 端至 SSH Server 端之間的通訊數據。

  2. 突破防火墻的限制完成一些之前無法建立的 TCP 連接。


本地端口轉發

技術分享

a要訪問c先將telnet用ssh封裝,傳到b後,解封後,再以telnet方式訪問c,此時的c認為是b通過telnet再鏈接自己,而其實是a在鏈接(要保證防火墻上的端口是打開著的,如果沒打開,就進不來了,需要進行遠程端口轉發,後面解釋)

實例:

acentos5,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是此時充當服務器的ab此時扮演的是客戶端,執行完成後,輸入指令

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 [email protected]

動態端口轉發,和本地和遠程端口轉發不一樣,在動態端口轉發中,目標主機地址和端口都不固定,具體轉發到哪裏,可以通過代理服務器由自己來指定。
















本文出自 “11083860” 博客,請務必保留此出處http://11093860.blog.51cto.com/11083860/1970803

ssh服務端口轉發詳解