用於兩個獨立 NAT 之間的 SSH 連接的 SSH 和 PWNAT

用於兩個獨立 NAT 之間的 SSH 連接的 SSH 和 PWNAT

是否可以使用普瓦納特和 SSH 在兩個單獨的防火牆/NAT 後面的兩台機器之間建立「點對點」SSH 連線?

如果可能,需要採取哪些步驟在執行 OpenSSH 伺服器的 NAT 內的 Linux 電腦上設定此功能,以及單獨 NAT 後面的用戶端如何連線?

另外,如果可能的話,這種設定是否存在重大安全風險?任意 SSH 用戶端是否可以連接到執行 pwnat 的伺服器?

答案1

是的。假設您的網路如下所示:

網路圖

您想要從 A 到 B 進行 SSH。它正在監聽 tcp://127.0.0.1:22。

B$ pwnat -s 0.0.0.0 2022 127.0.0.1:22

B 上的 pwnat 現在正在偵聽 udp://0.0.0.0:2022,並設定為允許連線到 tcp://127.0.0.1:22。它還定期向 3.3.3.3(硬編碼 IP)發送 ICMP 回顯請求。

A$ pwnat -c 127.0.0.1 3022 104.16.111.208 2022 127.0.0.1 22

A 上的 pwnat 現在正在偵聽 tcp://127.0.0.1:3022。

A 上的pwnat 向104.16.111.208 發送ICMP 逾時封包,其負載與來自NAT B 的傳出ICMP 回顯請求匹配。 B。

B 上的pwnat 發送一個UDP 封包到udp://151.101.193.69:2022,來源連接埠為2022。的任何UDP 封包:2022 從 udp://104.16.111.208:2022 到 udp://192.168.2.10:2022。請注意,許多 NAT 會在外部介面上分配不同的連接埠。如果是這樣的話,pwnat 不起作用

A 上的pwnat 發送一個UDP 封包到udp://104.16.111.208:2022,來源連接埠為2022。任何UDP 封包:2022 從 udp://151.101.193.69:2022 到 udp://192.168.1.10:2022。

NAT A 收到B 發送的UDP 封包,在其表中匹配它,並將其轉發給A。現在A 和B 可以通訊自由地通過 UDP。

A$ ssh -p 3022 127.0.0.1

A 上的 pwnat 正在監聽 tcp://127.0.0.1:3022,接受來自 ssh 的連線。 A 上的 pwnat 向 B 上的 pwnat 發送請求(透過 UDP)以開啟到 tcp://127.0.0.1:22 的隧道。由於當 B 上的 pwnat 啟動時,它被列為允許的主機/連接埠對,因此它建立了連接。隧道現已完工:

ssh on A --[tcp]--> pwnat on A --[udp]--> pwnat on B --[tcp]--> sshd on B

如果 pwnat 沒有錯誤,那麼從安全角度來看,這與在不在 NAT 後面的伺服器上將 sshd 暴露給世界沒有什麼不同。然而,瀏覽一下原始程式碼,pwnat 似乎是被駭客攻擊在一起的,我不會依賴它的安全性。最糟糕的情況是作為運行 pwnat 的使用者在 A 和 B 上執行任意程式碼。

答案2

Pwnat 似乎未經身份驗證,我認為這是一個重大安全風險。如果您至少控制兩個 NAT/防火牆之一,只需設定連接埠轉送/轉換即可實現更安全的設定。

相關內容