这是我的家用机器。规则如下:
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 7 484 ACCEPT all -- lo any anywhere anywhere
2 0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:http
3 0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:domain
4 0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:https
5 99 7040 DROP all -- any any anywhere anywhere
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 70 packets, 5461 bytes)
num pkts bytes target prot opt in out source destination
但是,一旦我添加了规则 5,我就无法连接到任何网页,除非我将其删除。我还尝试过不设置规则 5,并为 INPUT 链设置 DROP 默认策略(带 -P),这应该是相同的,对吧?那也没用。
谢谢
答案1
因为沟通是双向的,而且你的规则是无国籍的。
当您请求网页时,响应需要返回到您的计算机,这将通过 INPUT 链进行。
您创建的规则基本上允许您的计算机充当 http/https/dns 的服务器,而不能充当其他任何服务器。
添加这些状态规则基本上会允许任何出站连接。
/sbin/iptables -t filter -I OUTPUT -m state --state NEW\,ESTABLISHED -j ACCEPT
/sbin/iptables -t filter -I INPUT -m state --state ESTABLISHED\,RELATED -j ACCEPT
答案2
它无法正常工作,因为您错误地过滤了 DNS。DNS 的使用方式与您配置的方式不同。当您添加udp
规则时,它会触发您的 DNS 数据包并丢弃它们。在规则 3 中更改为tcp
DROP
-p tcp
-p udp