Linux

添加新的 iptables 後 SSH 重定向到不同的 IP 地址

  • February 9, 2020

我在通過 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規則的其他位置。

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