0x01 SSH隧道
什么是SSH隧道呢?舉個例子,我們都知道,SSH傳輸數(shù)據(jù)是加密傳輸?shù)模梢杂行У谋WC數(shù)據(jù)的安全,但是telnet是明文傳輸?shù)?,很不安全,尤其是在公網(wǎng)上,一旦監(jiān)聽到就會有很大的危害,所以一般公司的防火墻都會禁止外網(wǎng)通過telnet連接內(nèi)網(wǎng)的計算機的。那么如果我們想在外面訪問公司的計算機怎么辦呢?這個時候就可以用到SSH隧道技術(shù),可以保證數(shù)據(jù)的傳輸是加密的。通常我們講的ssh隧道技術(shù)其實就是ssh端口轉(zhuǎn)發(fā)。
0x02 SSH本地端口轉(zhuǎn)發(fā)
原理如下圖

建立本機獨享隧道
將本地9999端口通過192.168.10.1映射到192.168.10.2
ssh -L 9999:192.168.10.2:23 -Nf 192.168.10.1
-L 本地端口轉(zhuǎn)發(fā)
-N 不執(zhí)行命令或者腳本,否則會等待用戶的輸入
-f 后臺執(zhí)行
建立共享隧道
他人可以通過訪問我的9999端口來訪問192.168.10.2
ssh -g -L 9999:192.168.10.2:23 -Nf 192.168.10.1
0x03 SSH遠程端口轉(zhuǎn)發(fā)

那么當防火墻設置為我們從外面不能直接訪問內(nèi)部網(wǎng)絡的服務器,但是內(nèi)部網(wǎng)絡的服務器可以訪問外面的時候,就要用到遠程端口轉(zhuǎn)發(fā)技術(shù)了。此時就要在內(nèi)網(wǎng)跳板計算機上運行命令
ssh -R 9999:192.168.10.2:23 -Nf <外部ip>
這樣外部用戶只要在自己的機器上使用
telnet 127.0.0.1:9999
就可以訪問到內(nèi)網(wǎng)192.168.10.2的telnet了。
0x04 SSH動態(tài)端口轉(zhuǎn)發(fā)
舉個場景,存在遠程外網(wǎng)服務器233.233.233.233上3000端口運行這一個web1服務,4000端口運行這一個web2服務,5000端口運行這一個web3服務(隨便舉的例子),然后由于防火墻策略只能用22端口連接外部網(wǎng)絡,那么如何才能訪問到那個外網(wǎng)服務器上的web服務呢?有的同學一定會說可以使用ssh本地端口轉(zhuǎn)發(fā)呀,是的,我們可以在本地運行命令
ssh -L 6666:localhost:3000 root@233.233.233.233 //訪問web1服務
ssh -L 7777:localhost:4000 root@233.233.233.233 //訪問web2服務
ssh -L 8888:localhost:5000 root@233.233.233.233 //訪問web3服務
這樣做是可以的,但是吧,不覺得很麻煩嘛,如果有10個服務要訪問呢,就要輸入10條命令,那么這樣就可以使用SSH動態(tài)端口轉(zhuǎn)發(fā)功能了,只需要一條命令即可實現(xiàn)多端口訪問。這里需要用到SOCKS代理,使用命令
ssh -D localhost:2000 root@233.233.233.233
然后在瀏覽器中找到設置代理的地方,選擇SOCKS代理,選擇SOCKS5,SOCKS主機填localhost,端口填2000,這樣我們只需要在瀏覽器中輸入localhost:3000或者localhost:4000或者localhost:5000就可以方便又快速的訪問三個web服務了。這里的原理就是我們訪問本地加端口的請求會被ssh轉(zhuǎn)發(fā)到真正的那個地址(這里就是外網(wǎng)服務器),又真正的那個地址來處理這個請求,然后將數(shù)據(jù)發(fā)回來。
0x05 聲明
這篇文章是我通過查詢資料然后根據(jù)自己的認知來寫的,其中如果有什么我說錯的地方希望能評論或者私信我,不勝感激!