關於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
選項:
-f 後臺啓用
-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->C 訪問被限制
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端口把請求轉發到站點服務器上面去此時方可正常訪問外部站點