如何使用 iptables 和单独的调制解调器将端口转发到 DMZ

如何使用 iptables 和单独的调制解调器将端口转发到 DMZ

我有一个如下所示的网络:

 ADSL          VLAN 2              VLAN 3
------[Modem]----------[firewall]----------[intranet PC]
                            |
                            |      VLAN 4
                             \-------------[DMZ server]

我想要设置端口转发,以便将 DMZ 中的 Web 服务器公开到 Internet。IP 为:

  • 调制解调器:192.168.0.1
  • 防火墙 eth0.2:192.168.0.126
  • 防火墙 eth0.3:192.168.1.1
  • 防火墙 eth0.4:192.168.2.1
  • 电脑:192.168.1.2
  • 服务器:192.168.2.2

我在调制解调器上打开了端口 80 和 443,并将它们转发到防火墙 (192.168.0.126)。我在防火墙的 iptables 中有以下规则:

网络地址转换(NAT):

-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A PREROUTING -d 192.168.0.126/32 -p tcp -m multiport --dports 80,443 \
    -j DNAT --to-destination 192.168.2.2
-A PREROUTING -d 192.168.1.1/32 -p tcp -m multiport --dports 80,443 \
    -j DNAT --to-destination 192.168.2.2
-A POSTROUTING -o eth0.2 -j MASQUERADE

转发:

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

# Disallow new connections from DMZ to modem and intranet
-A FORWARD -d 192.168.0.0/16 -i eth0.4 -m state --state NEW -j DROP

# Allow intranet to access Internet
-A FORWARD -i eth0.3 -o eth0.2 -j ACCEPT
-A FORWARD -i eth0.2 -o eth0.3 -m state --state RELATED,ESTABLISHED -j ACCEPT

# Allow DMZ to access Internet
-A FORWARD -i eth0.4 -o eth0.2 -j ACCEPT
-A FORWARD -i eth0.2 -o eth0.4 -m state --state RELATED,ESTABLISHED -j ACCEPT

# Allow web ports to DMZ
-A FORWARD -i eth0.2 -o eth0.4 -p tcp -m multiport --dports 80,443 -j ACCEPT

# Allow intranet to access DMZ
-A FORWARD -i eth0.3 -o eth0.4 -j ACCEPT
-A FORWARD -i eth0.4 -o eth0.3 -m state --state RELATED,ESTABLISHED -j ACCEPT

除了端口转发之外,一切似乎都运行良好。如果我从内联网 PC 在浏览器中打开 192.168.1.1,我会看到 DMZ 服务器。它在 telnet 中显示如下:

$ telnet 192.168.1.1 80
Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is '^]'

但如果我尝试使用调制解调器的外部 IP 从互联网打开它,我会得到以下信息:

$ telnet <EXT_IP> 80
Trying <EXT_IP>...
telnet: Unable to connect to remote host: No route to host

我尝试设置发夹式 NAT,具体描述如下这个类似问题的答案,但没有变化。也许我没有使用正确的地址。

因此,有两个问题:)

  1. 为什么传入连接看不到 DMZ 服务器?
  2. 我的 iptables 配置总体上还好吗?还是我应该默认在某个地方丢弃数据包?

防火墙运行的是Debian Jessie,Linux 3.16。

答案1

嗯,我感到很尴尬。防火墙规则工作正常,但 ISP 阻止了端口 80。

相关内容