ssh隧道轉發內網穿透功能實現(反彈式木-馬原理)

ssh說明

SSH(secure shell)是一種加密的網絡傳輸協議,可在不安全的網絡中爲網絡服務提供安全的傳輸環境(這點很重要);SSH通過在網絡中創建安全隧道來實現SSH客戶端與服務器之間的連接。人們通常利用SSH來傳輸命令行界面和遠程執行命令;SSH也支持隧道協議、端口映射和X11連接。藉助SFTP或SCP協議還可以傳輸文件等;閒話不說了,如需要詳細瞭解ssh請自行搜索;
我們通常接觸最多的ssh(協議)的地方就是通過xshell xmanager或linux shell中通過ssh工具登錄類unix系統;其他的認知可能並不太多,但沒有關係,本人也是如此,但今天我們的dba提出一個需求,需要我來協助處理;
題外話:
之前面試的時候,被問到兩個IDC的主機怎麼通訊?接下的技能就能解決,只是當時沒有細想說用,其實根本不需要,因爲它還要部署,不是很安全;接下來就見識下!

場景一:

有一臺服務器是公司oracle數據庫(IDC A)爲了安全只對內網開放(即數據庫的私網ip偵聽);dba平時通過windows上xshell的forward功能,從它自己的本地127.0.0.1:port連接管理數據庫(xhell做了連接轉發),有一臺開發機器是linux(IDC B),也需要在程序中調用數據庫,需要做的就是在測試linux上也能這樣通過本地測試機調用數據庫;也就是需要ssh隧道轉發功能;即測試機通過ssh 私鑰登錄到數據庫;通過ssh端口轉發功能,把數據庫上偵聽在內網的端口轉發到這臺linux測試機上的內網端口;以便於linux測試程序能調用;這麼說OK?

方案:
首先需要在數據庫上爲測試Linux提供私鑰無密碼認證登錄(開一個賬號用私鑰登錄);然後在測試Linux機器上進行ssh登錄做端口轉發;通過ssh登錄長連接把遠程端口轉發到本地,通過本地的端口連接遠程的數據端口
ssh隧道轉發內網穿透功能實現(反彈式木-馬原理)

IDC A 數據庫服務器新增一個登錄賬號(無密碼私鑰登錄)
IDC B 測試Linux通過以下登錄 IDC A 數據庫機器

# ssh -i test -C -f -N -g -L 1521:lanip:1521 [email protected]  -p port(sshd)

#說明: -i   私鑰  
-C  壓縮傳輸
-f  前臺運行
-N 不執行遠程程序
-g 允許遠程端口轉發到本地
-L port:host:remote port   即將遠程的port轉發映射在本地

遠程某公網的上開放的redis 通過ssh 隧道轉發到本地,通過本地訪問redis

[san@TX_zgws_test02 ~]$ sudo netstat -ntpul
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:6320                0.0.0.0:*                   LISTEN      25103/redis-server  
....省略....

本機通過ssh登錄並轉發
ssh隧道轉發內網穿透功能實現(反彈式木-馬原理)
塗掉的部分即這臺主機的公網ip和連接端口;命令執行需要個幾秒時間不要ctrl+c

查看本地的端口

san@san-dong:~$ netstat -ntpul
(並非所有進程都能被檢測到,所有非本用戶的進程信息將不會顯示,如果想看到所有信息,則必須切換到 root 用戶)
激活Internet連接 (僅服務器)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:6320            0.0.0.0:*               LISTEN      16968/ssh       

訪問本地主機上的6320
ssh隧道轉發內網穿透功能實現(反彈式木-馬原理)
通過ssh隧道轉發即可把訪問本地的6320轉發到遠程的6320,遠程的6320是不對外開放的;這樣就繞過了防火牆,怎麼樣,是不是很強大?兩臺服務器之前直接通過ssh協議隧道訪問,不需要***自帶ssh加密保護;get到沒有?

場景二:

由於我辦公電腦是ubuntu的在公司內網,回家想訪問我的的這臺主機(ssh或vnc)這裏就拿ssh模擬好了;如果網管不把我辦公電腦的22端口做映射,我在外面是不能訪問;此時就可以通過以下方式實現;前提是你得有一個外網的主機;具體做法就是通過辦公電腦ssh登錄到第三方的的ssh主機上並把辦公電腦上的ssh 22端口的訪問通過ssh隧道轉發到遠程主機上的其他本地端口;這樣你在第三方(如果你家裏有ddns能訪問)主機上訪問本地的端口即可訪問公司辦公電腦的服務;
架構如下:
ssh隧道轉發內網穿透功能實現(反彈式木-馬原理)
格式如下:

ssh -i san -N -f -R 2222:127.0.0.1:22 san@外網主機(域名或公網ip) -p port(sshd)
參數說明:
-R: port:host:hostport 即把本地的22端口在遠程主機上映成2222

實戰:
下班前在公司電腦上執行如下:
ssh隧道轉發內網穿透功能實現(反彈式木-馬原理)
即通過 ssh登錄到公網電腦C上 並把本地的22端口映射成公網電腦的10022
回家後通過連接公網電腦C的10022 即可登錄公司辦公電腦;

[san@TX_zgws_test02 ~]$ ssh [email protected] -p 10022

如圖:
ssh隧道轉發內網穿透功能實現(反彈式木-馬原理)

如此這般你便可以通過公網的電腦C來訪問公司的辦公電腦了(如果家裏是ddns可訪問的)就省了公網電腦C;前提是電腦支持ssh協議 ,windows下沒有試過可自行研究;
如果你覺得很贊,get到,不要走,點個讚唄?
補充:

聊聊日常所說的反彈式***

所謂的就是在計算機中一個程序;目的就是偷偷的運行並開放socket連接或服務端口等着別人來連接,對方想幹啥就幹啥只要他高興;這種方式在所有計算機都有公網ip(或在一個網段)時好用;不流行了,現在大部分上網都是通過一個公網ip 代理上網(DNAT)方式,不明白不要緊;你在公司上網(手機4G也是)就是這個模式,表現出來的就是公司所有人的出口公網ip都一樣;有了這咱NAT和防火牆,即使你電腦中了這種等對方來連接的,他也進不來;因此聰明的們就想到了另一招,我進不來,但我可以出去啊;對了大多的企業防火牆只防外面進入企業,企業內出去一般很少限制,限制多了就是這也上不了,那也上不了,所以一般企業只禁用一些明顯有問題的協議或端口;大部分出去的端口是不做限制的;
這樣你電腦種了一個
後,會主動聯繫外面的機器並做隧道映射轉發,就像是上面的場景;於是繞過了你電腦和公司的防火牆;對方就能以這種方式又可以操縱你的電腦了;這就是所謂的反彈式,原理是不是很像?以後看到自己電腦上有未知的類似以下的連接就要小心了

sudo netstat -n |grep EST
tcp        0      0 172.16.0.188:54032      x.x.x.x:22    ESTABLISHED

上面的是我剛做的測試不怕!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章