我正在尝试设置 iptables,转发规则工作正常,但输出规则出现问题。
我无法从防火墙后面的主机访问互联网,防火墙服务器也无法 ping www.google.com 。而且主机也无法 ping www.google.com,ping 也不适用于 ip。
输入、输出和转发的默认操作是 drop。
我已经打开了 80,443,53(tcp 和 udp)和 Outlook 的端口。
这是我的输出规则:
iptables -P OUTPUT DROP
# Output
iptables -A FORWARD -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -p tcp --dport 443 -j ACCEPT
iptables -A FORWARD -p tcp --dport 25 -j ACCEPT
iptables -A FORWARD -p tcp --dport 110 -j ACCEPT
iptables -A FORWARD -p tcp --dport 53 -j ACCEPT
iptables -A FORWARD -p udp --dport 53 -j ACCEPT
# DNS
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
答案1
在这里,在您的 FORWARD 链中,您允许一些传出流量。尽管它无法返回,但您应该使用 conntrack 机器来允许 LAN 机器的 FORWARD 链和路由器的 INPUT 链中的此行为。
你也没有允许ICMP,所以ping不通。
还有一件事:我会在 FORWARD 链中指定一个接口。如果不这样做,您的端口可能会暴露,或者机器可能会被外部机器用作网关。
让我们相应地重写您的规则(将 eth1 替换为您的 LAN 接口):
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
# Forward - WAN to LAN
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Forward - LAN to WAN
iptables -A FORWARD -i eth1 -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -i eth1 -p tcp --dport 443 -j ACCEPT
iptables -A FORWARD -i eth1 -p tcp --dport 25 -j ACCEPT
iptables -A FORWARD -i eth1 -p tcp --dport 110 -j ACCEPT
iptables -A FORWARD -i eth1 -p tcp --dport 53 -j ACCEPT
iptables -A FORWARD -i eth1 -p udp --dport 53 -j ACCEPT
iptables -A FORWARD -i eth1 -p icmp -j ACCEPT
# Input
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Output
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT
编辑:按照注释中的建议指定 eth1。