Iptables

如何使用 iptables 和單獨的調製解調器將埠轉發到 DMZ

  • January 14, 2015

我有一個看起來像這樣的網路:

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

除了埠轉發外,一切似乎都執行良好。如果我從 Intranet 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 從 Internet 打開它,我會得到以下資訊:

$ 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。

嗯,我覺得很害羞。防火牆規則工作正常,但 ISP 阻止了埠 80。

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