添加新的 iptables 後 SSH 重定向到不同的 IP 地址
我在通過 SSH 訪問在 Proxmox 虛擬機管理程序上執行的專用伺服器時遇到了一些麻煩,其 IP 地址為 40.53.XX.XX。
我有 3 個使用本地 IP 地址執行的虛擬機:
vm1 的 IP 地址為 192.168.4.4 並執行一個域名為“london.austria.com”的網站(使用 Apache)
vm2 的 IP 地址為 192.168.4.5 並執行一個域名為“manchester.austria.com”的網站(使用 Apache)
使用該配置,我可以毫無問題地通過 SSH 訪問所有 VM 和管理程序。
今天,我設置了一個 Nginx 反向代理,以便從 Internet 訪問 VM1 和 VM2 上的網站。
我們稱之為 Nginx 反向代理 VM3,它的本地 IP 地址為 192.168.4.2
設置工作正常。我可以訪問在 VM1 和 VM2 上執行的網站。
但是現在,在我在 40.53.XX.XX 上的管理程序的 /etc/network/interfaces 的最後 2 行中添加新的 iptables 規則後,我收到一條消息,說伺服器指紋已更改……你想連接嗎?
如果我點擊是,我連接到 Nginx 反向代理 (192.168.4.2),而不是管理程序 (40.53.XX.XX.)。
我嘗試了另一個 SSH 工具,但問題是一樣的。
管理程序上的 /etc/network/interfaces 下面有:
root@ns568745:~# cat /etc/network/interfaces # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # vmbr0: Bridging. Make sure to use only MAC adresses that were assigned to you. auto vmbr0 iface vmbr0 inet static address 40.53.XX.XX /24 gateway 40.53.XX.XX .254 bridge_ports eno1 bridge_stp off bridge_fd 0 auto vmbr1 iface vmbr1 inet static address 192.168.4.254/24 broadcast 192.168.4.255 bridge_ports none bridge_stp off bridge_fd 0 post-up echo 1 > /proc/sys/net/ipv4/ip_forward post-up iptables -t nat -A POSTROUTING -s '192.168.4.254/24' -o vmbr0 -j MASQUERADE post-down iptables -t nat -D POSTROUTING -s '192.168.4.254/24' -o vmbr0 -j MASQUERADE post-up iptables -t nat -A PREROUTING -d 40.53.XX.XX -p tcp -m multiport --dports 80,443 -m comment --comment "nginx" -j DNAT --to-destination 192.168.4.2 post-up iptables -t nat -A POSTROUTING -s 192.168.4.0/24 -j SNAT --to-source 40.53.XX.XX
和 /etc/nginx/sites-available 中的 Nginx 配置文件(ip 地址:192.168.4.2)
server { listen 80 default; listen [::]:80 default; server_name manchester.example.com; location / { proxy_pass http://192.168.4.5:80; } } server { listen 80; listen [::]:80; server_name london.example.com; location / { proxy_pass http://192.168.4.4:80; } }
為什麼我想連接到 40.53.XX.XX 時重定向到 192.168.4.2 以及如何通過 SSH 連接到 40.53.XX.XX ?
編輯 1:
iptables-save
在 /etc/network/interface 的最後 2 行中啟用 2 iptables 規則後的輸出root@ns568745:~# iptables-save # Generated by iptables-save v1.6.0 on Sun Feb 9 16:01:44 2020 *filter :INPUT ACCEPT [640:213744] :FORWARD ACCEPT [15:900] :OUTPUT ACCEPT [495:208357] COMMIT # Completed on Sun Feb 9 16:01:44 2020 # Generated by iptables-save v1.6.0 on Sun Feb 9 16:01:44 2020 *nat :PREROUTING ACCEPT [82:4115] :INPUT ACCEPT [68:2699] :OUTPUT ACCEPT [27:1694] :POSTROUTING ACCEPT [34:2114] -A PREROUTING -d 40.53.XX.XX/32 -p tcp -m multiport --dports 80,443,22 -m comment --comment nginx -j DNAT --to-destination 192.168.4.2 -A POSTROUTING -s 192.168.4.0/24 -o vmbr0 -j MASQUERADE -A POSTROUTING -s 192.168.4.0/24 -j SNAT --to-source 40.53.XX.XX COMMIT # Completed on Sun Feb 9 16:01:44 2020
iptables-save
在 /etc/network/interface 的最後 2 行中禁用 2 個 iptables 規則時的輸出root@ns568745:~# iptables-save # Generated by iptables-save v1.6.0 on Sun Feb 9 15:56:26 2020 *filter :INPUT ACCEPT [75392:20174610] :FORWARD ACCEPT [34704:41945853] :OUTPUT ACCEPT [70877:23709671] COMMIT # Completed on Sun Feb 9 15:56:26 2020 # Generated by iptables-save v1.6.0 on Sun Feb 9 15:56:26 2020 *nat :PREROUTING ACCEPT [15399:828377] :INPUT ACCEPT [11207:472538] :OUTPUT ACCEPT [428:27752] :POSTROUTING ACCEPT [591:34272] -A POSTROUTING -s 192.168.4.0/24 -o vmbr0 -j MASQUERADE COMMIT # Completed on Sun Feb 9 15:56:26 2020
問題是這一行:
-A PREROUTING -d 40.53.XX.XX/32 -p tcp -m multiport --dports 80,443,22 -m comment --comment nginx -j DNAT --to-destination 192.168.4.2
此規則將 http (80)、https (443) 和 ssh (22) 轉發到
192.168.4.2
主機。由於您的原始
interfaces
命令不包含埠 22,因此必須將埠 22 添加到DNAT
規則的其他位置。