fbpx

如何透過 SSH 建立 0.0.0.0 公開連線的反向通道

黑客必學 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 囉,如下:

今天的「防火牆穿越」技術你學會了嗎?

  1 comment for “如何透過 SSH 建立 0.0.0.0 公開連線的反向通道

Comments are closed.