Ssh

使用 iptables 轉發 ssh

  • August 27, 2012

我找到了幾個關於如何做到這一點的教程,但沒有一個可以工作:/

我的設置:

防火牆 - 可從網際網路訪問 - eth0:xxx.xxx.xxx.xxx(公共 ip) - eth1:192.168.1.1

伺服器 - 可從防火牆訪問 - eth0:192.168.1.5

因為我仍然希望能夠在埠 22 上連接到防火牆,所以我想將埠 2222 上的傳入連接轉發到 192.168.1.5:22。

從防火牆到伺服器的 ping 和 ssh 有效。從 SERVER 到 FIREWALL 的 ping 和 ssh 也可以正常工作(儘管只允許使用公鑰登錄並且不允許 SERVER…)

從任何地方 ping 和 ssh 到 FIREWALL 工作。

啟用 IP 轉發:

# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1

發布我的 iptables-rules 沒有多大意義,因為沒有任何規則起作用(使用 PREROUTING、POSTROUTING、FORWARD ……)並且沒有其他規則。

是的,我的防火牆不會阻止任何東西。但這與安全性無關(還)。

我嘗試了我在第一頁找到的所有內容: https ://www.google.de/search?q=iptables+forward+ssh

有什麼建議麼?

問候,延斯

更新 這是tcpdump -n -i any使用 Khaled 的 iptables 命令後的輸出:

15:42:33.852718 IP home-ip.56008 > firewall-public-ip.2222: Flags [S], seq 1141341765, win 14600, options [mss 1460,sackOK,TS val 871214 ecr 0,nop,wscale 7], length 0
15:42:33.852752 IP home-ip.56008 > 192.168.1.5.22: Flags [S], seq 1141341765, win 14600, options [mss 1460,sackOK,TS val 871214 ecr 0,nop,wscale 7], length 0

我猜想在第二行會有類似… IP 192.168.1.1.45678 > 192.168.1.5.22 …

當我的 ssh-client 嘗試多次連接時,這兩行重複了幾次。但沒有任何答案。

第二次更新 伺服器(192.168.1.5)的路由在這裡。我剛剛添加了一條路線

public-firewall-ip  255.255.255.255      192.168.1.1     192.168.1.5       1

但這沒有效果。在伺服器上執行安裝了 cygwin 的 sshd 的 Win XP。我之前沒有提到這一點,因為從防火牆到伺服器的 ssh 工作得很好。但是在路由方面,我覺得 Windows 有點受限。

現在我正在伺服器上安裝 Wireshark,並將在幾分鐘內粘貼結果。

伺服器 上的跟踪 伺服器上的跟踪顯示埠 22 上的一個到達 SYN 和一個離開 SYN,ACK 到我的家庭 IP。我認為有錯誤。ACK 應該被發送到防火牆而不是被偽裝,因為在離開包中源 IP/埠現在是 192.168.1.5:22。這不可能在 NAT 後面到達我家中的筆記型電腦……還是有辦法?

如果您允許流量通過防火牆並啟用 IP 轉發,您只需要一個 NAT 規則來轉發埠 2222 上的 SSH 流量。這樣的一個應該可以完成工作:

$ iptables -t nat -A PREROUTING -d x.x.x.x -p tcp --dport 2222 -j DNAT --to-destination 192.168.1.5:22

更新:

調試此類問題時,網路嗅探器是您的朋友。您可以在防火牆機器上執行 tcpdump 並查看是否可以擷取到來的請求,並且相同的請求應該離開防火牆機器。

引用自:https://serverfault.com/questions/421328