使用 iptables 仅允许 HTTP(S) 和 DNS

使用 iptables 仅允许 HTTP(S) 和 DNS

目前,NAT 主机和相应的客户端能够访问任何服务。我希望 NAT 主机(运行 IPTABLES 的设备)只能访问 HTTP(S)、DNS 并发送/响应 ICMP 请求。

我希望 $INTIF 后面的内部客户端仅访问 HTTP(S) 和 DNS。我尝试了多端口,但运气不佳。我愿意听取其他建议。

*nat
-A POSTROUTING -o "$EXTIF" -j MASQUERADE
COMMIT
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -p tcp -i eth1 --dport 22 --sport 1024:65535 -m state --state NEW -j ACCEPT
-A INPUT -i "$INTIF" -p udp --dport 53 -j ACCEPT
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A INPUT -m limit --limit 3/min -j LOG --log-prefix "input denied: " --log-level 7

-A FORWARD -i "$EXTIF" -o "$INTIF" -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -i "$INTIF" -o "$EXTIF" -m state --state ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -i "$INTIF" -o "$EXTIF" -m multiport -p tcp --dports 80,443 -j ACCEPT
-A FORWARD -m limit --limit 3/min -j LOG --log-prefix "forward denied: " --log-level 7

-A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -m limit --limit 3/min -j LOG --log-prefix "output denied: " --log-level 7
COMMIT

答案1

从第二条 FORWARD 规则中删除“NEW”(这是接受所有传出连接的规则)。

第三和第四条前向规则应该是这样的

-A FORWARD -i "$INTIF" -o "$EXTIF" -m multiport -p tcp --dports 80,443,53 -j ACCEPT
-A FORWARD -i "$INTIF" -o "$EXTIF" -p udp --dport 53 -j ACCEPT

顺便说一句,您的默认输入策略是接受,因此在记录“输入被拒绝”后,数据包无论如何都会被接受。

相关内容