Iptables
如何使用 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
除了埠轉發外,一切似乎都執行良好。如果我從 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 ,但沒有任何變化。也許我沒有使用正確的地址。
所以,兩個問題:)
- 為什麼傳入的連接看不到 DMZ 伺服器?
- 我的 iptables 配置是否正常?或者我應該預設在某處丟棄數據包?
防火牆正在執行 Debian Jessie,Linux 3.16。
嗯,我覺得很害羞。防火牆規則工作正常,但 ISP 阻止了埠 80。