黑客必學 SSH Tunnel 反向通道防火牆穿越技術
Linux SSH 有一個很好用的功能,就是可以把本機的 TCP Port 透過 ssh 連線對應到遠端主機的 Port,或者遠端主機可以連線的另一個 IP + Port。這樣的方式稱為 SSH Tunnel 我們常說的 SSH 通道,也是跳板技術的種。反之,如果把遠端主機的某一個 TCP Port 連接到本機或本機可以連線的另一個 IP + Port 就稱為反向通道。有了這個技術,只要出的去就進得來,如果在搭配 Port Number 偽裝,幾乎可以繞過所有困難的網路環境限制,也是我們常稱的防火牆穿越黑暗技。
如何建立 SSH Tunnel 反向通道
如果我們在 NAT 網路環境中,內網有一台 Server 需要接收 Internet 的連線,但是由於沒有 Public IP 可以使用,所以無法對外提供服務。這時候我們需要外部一台可以 ssh 連線的主機,然後透過反向通道讓外部主機的 Port 經過這個 SSH Tunnel 連線到 NAT 內部的服務,這樣就達到跳躍公開的能力。使用的 SSH 命令如下:
ssh -i ssh.pem -NR 8080:192.168.0.1:80 ubuntu@internet-server
連線完成以後我們可以在外部的 Server 看到啟動了 8080 Port (netstat 如下),如果我們連線到 localhost:8080 就會自動轉到內部 NAT 其中一台電腦 192.168.0.1 的 80 Port。
這時候我們可以注意到 8080 允許的連線位置是 localhost 127.0.0.1,這樣的服務是無法對外提供的,這時候我們就需要修改 SSHD 設定檔。
如何讓 SSH Tunnel 建立 Internet Public 服務轉址
由於預設 SSH 建立的 Tunnel Listen 鎖定在 127.0.0.1,透過修改 /etc/sshd_config 可以變更這個限制。
sudo vim /etc/sshd_config
加入以下設定
GatewayPorts yes
重新啟動 SSHD 服務
service ssh restart
重新執行 ssh -i ssh.pem -NR 8080:192.168.0.1:80 ubuntu@internet-server 再次透過 netstat 檢查 Port Listen 可以發現 8080 已經 Bind 在 0.0.0.0 囉,如下:
今天的「防火牆穿越」技術你學會了嗎?