基于linux的Ssh端口轉發
SSH 端口轉發能夠提供兩大功能:
加密 SSH Client(用戶端) 端至 SSH Server(服務端)之間的通訊資料
突破防火牆的限制完成一些之前無法建立的 TCP 連接配接
工作原理:
外部主機A想要連接配接到内部主機C上,由于内部防火牆政策,主機A和主機C不能直接連接配接,這時可以利用主機B作為跳闆機,先實作主機A和主機B的連接配接,再去連接配接主機C,這時主機C以為是主機B要和他建立連接配接,實際是主機A與主機C的連接配接。
應用場景:
當主機A是通過telnet對主機C進行通路的話,實際上是不安全的,telnet協定沒有加密,通過網絡是可以被截獲的,這時我們可以用ssh協定在主機A和主機B建立一個ssh隧道,這樣telnet被包含在ssh協定中,比較安全
實作指令:
在主機A上:(本地轉發)
ssh -L 9527:telnetsrv:23 -fN sshsrv
telnet 127.0.0.1 9527
-f 背景啟用
-N 不打開遠端shell,處于等待狀态
-g 啟用網關功
Telnetsrv:目标主機C上的iPv4位址
9527:指定主機A上的端口(沒被占用的情況下)
23:目标主機C對應的telnet端口
-fN:在主機A上實作背景執行,不占用目前終端,并且不登入主機B處于等待狀态。
sshsrv:跳闆機B的ipv4位址
當通路本機的9527的端口時,被加密後轉發到sshsrv的ssh服務,再解密被轉發到telnetsrv:23
data à localhost:9527 à localhost:XXXXX àsshsrv:22 à sshsrv:YYYYY à telnetsrv:
資料的流動:
先在本機A指定的9527端口,生成一個随機端口作為ssh client用戶端去連接配接ssh server服務端B機器的22端口,然後B機器随機生成一個端口作為telnet client用戶端去連接配接telnet server服務端C機器23端口
遠端轉發:
和本地轉發不同的是,防火牆政策不再允許外部網絡連接配接到内部網絡了,那麼我們就讓主機B作為ssh client去連接配接主機A 那麼主機A就成了ssh 伺服器,這樣把通道建立起來,後面步驟就和本地轉發一緻了。
實作指令:(在主機B上)
ssh -R 9527:telnetsrv:23 -fN sshsrv
讓sshsrv偵聽9527端口的通路,如有通路,就加密後通過ssh服務轉發請求到本機ssh用戶端,再由本機解密後轉發到telnetsrv:23
Data sshsrv:9527 sshsrv:22 localhost:XXXXX localhost:YYYYY telnetsrv:23
資料的流動:先到主機A上的9527端口,由主機A上的ssh對應的22端口發出,到達ssh用戶端本機B上的随意端口,本機B再随意生成一個端口作為telnet用戶端去連接配接telnet服務端的23端口
動态端口轉發:
都稱google是邪惡的網站,是以中國禁止我們通路google的網站,就是因為中國防火牆政策,但是并不是禁止所有的外國網站,是以我們就可以實作×××通路,道理和遠端轉發相似,
如圖,我們先和rhel5建立ssh連接配接,然後由rhel5轉發通路centos7,這裡rhel5充當的就是ssh server
ssh -D 1080 root@sshserver
在linux虛拟機上實作的話,還要配置下浏覽器,代理為127.0.0.1 端口1080. 然後就可以通路了。
實驗步驟及圖解:(本地轉發)
分别準備centos5,centos6,centos7作為實驗機。
Centos5 ip位址:192.168.109.164
Centos6 ip位址:192.168.109.138
Centos7 ip位址:192.168.109.167
Centos7上把centos5的IP位址寫入到防火牆政策裡,模拟端口轉發需要的場景,Centos6作為跳闆機。
iptables -A INPUT -s 192.168.109.164 -j REJECT
Centos5與centos6之間建立ssh隧道
ssh -L 9527:192.168.109.167:23 -fN 192.168.109.138
在cento6機器上核對一下連接配接資訊
隧道建立完成,然後我們就可以實作本地端口轉發了
實驗步驟及圖解:(遠端轉發)
與本地轉發實驗環境相同,變化就是ssh的用戶端與服務端對調了(由于防護牆政策不再允許外部網路進入,但是内部還是可以出去的。)
建立隧道實作指令:(在主機B上)
驗證連接配接關系:
ssh用戶端(centos6)
ssh服務端(centos5)
實作通訊: