ssh端口轉發小結
?
關於ssh端口
?
???? SSH 會自動加密和解密所有 SSH 客戶端與服務端之間的網絡數據。但是, SSH 還能夠將其他 TCP 端口的網絡數據通過 SSH 鏈接來轉發,並且自動提供了相應的加密及解密服務。這一過程也被叫做“隧道”,這是因為SSH為其他 TCP 鏈接提供了一個安全的通道來進行傳輸而得名。例如,Telnet,SMTP,LDAP 這些 TCP 應用均能夠從中得益,避免了用戶名, 密碼以及隱私信息的明文傳輸。而與此同時,如果工作環境中的防火墻限制了一些網絡端口的使用,但是允許 SSH 的連接,也能夠通過將 TCP 端口轉發來使用 SSH 進行通訊
?
ssh端口轉發的兩大功能
?
兩大功能:
- 加密 SSH Client 端至 SSH Server 端之間的通訊數據
- 突破防火墻的限制完成一些之前無法建立的 TCP 連接
?
ssh端口轉發的三種方式
?
- ssh端口本地轉發
- ssh端口遠程轉發
- ssh端口動態轉發
?
1.本地轉發
?
???格式:ssh -L localport:remotehost:remotehostport sshserver
??????localport : 本地開啟的端口號
??????remotehost : 遠程要連接的IP
??????remotehostport : 轉發機的端口號
??????sshserver : 轉發機的IP
?
???選項:
??????-N 不打開遠程shell,處於等待狀態(不加-N則直接登錄進去)
??????-g 啟用網關功能
??????-L 啟動本地端口轉發
??????-D 動態轉發
?
實驗一:ssh的本地轉發實現
??前提:C服務端,B跳板機,A客戶端,C的23端口只有B才能訪問,其他拒絕訪問,A和B可以通過ssh互相訪問
??如圖所示:A的數據一旦telnet以後,數據會發送到本機9527端口,再在本機開一個隨機端口,充當ssh客戶端,再把數據流量發送到22端口的ssh服務端,收到數據以後,解密數據,臨時開一個隨機端口充當客戶端,再把流量發送到23端口telnet服務端
??實驗的流程:
????A-B->C 使用B主機作為跳板突破訪問限制
??操作如下:
??首先在C服務器上開啟23端口,添加策略iptables -F iptables -A INPUT -s B -p tcp - -dport 23 -j ACCEPT iptables -A INPUT -p tcp --dport 23 -j REJECT
??這個時候A和C是不通的,連接拒絕,然後回到A上做本地轉發
ssh -L 9527:A:23 -fN B
??現在A可以通過telnet利用9527端口與C進行訪問
telnet 127.0.0.1 9527
?
2.遠程轉發
?
???格式:-R sshserverport:remotehost:remotehostport sshserver
??????sshserverport 被轉發機器開啟的端口號
??????remotehost 最終連接機器的IP地址
??????remotehostport 被轉發機器的端口號
??????sshserver 被轉發機器的IP地址
實驗二:ssh的遠程轉發
前提:讓ssh service偵聽9527端口的訪問,如有訪問,就加密後通過ssh服務轉發請求到A,再由本機解密後轉發到telnet service:23
??實驗的流程:
????C->A (拒絕訪問)
????C-B->A (通過遠程代理,接受訪問)
操作如下:
首先C開啟郵件服務systemctl restart postfix
然後在ssh service 上打開隧道
ssh -R 9527:C:25 -fN A
最後在A上給C發郵件
telnet 127.0.0.1 9527 mail from:[email protected] rctp to:xxxx@xxxx
3.動態轉發
?
???格式:ssh -D port user@sshserver
??????port :代理服務器開啟的代理端口
??????ssherver : 遠程的代理服務器地址
?
?
實驗三:ssh的動態轉發
前提:在企業內部或者網絡中,基於安全策略不能隨便訪問互聯網某些站點,當用A訪問C時,本機的代理端口做為代理服務器,A的訪問請求被轉發到代理服務器上,由代理服務器替之訪問C
實驗的流程:
????A -> C (拒絕訪問)
????A-B -> C (通過遠程代理,接受訪問)
操作如下:
首先C上添加策略,A拒絕訪問,只有B可以iptables -A INPUT -s A -j REJECT
然後再B上輸入如下代碼,開啟代理
ssh -fND 1080 root@B
在A的裏驗證是否可以訪問
curl --socks5 127.0.0.1 C #默認端口就是1080
基於網頁驗證,打開瀏覽器的設置,選擇代理設置,添加代理,在套接字一欄中填入
?
?
當本地1080端口受到外部網站請求會轉發到外部服務器上面去,代理服務器通過1080端口把請求轉發到站點服務器上面去此時方可正常訪問外部站點
ssh端口轉發小結