在我的 VPS(CentOS 7) 上,默认的 iptables 是:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
我无法访问使用 Apache/2.4.6 设置的网站,浏览器显示:“连接已重置”。
如果我使用“iptables -I INPUT -p tcp --dport=80 -j ACCEPT”在 iptables 的 80 端口上插入一条接受 tcp 连接的规则,一切正常,可以毫无问题地访问该网站。iptables 是:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
我想知道为什么要添加规则,因为在旧的 iptables 中,第三条规则是“全部接受 -- 0.0.0.0/0 0.0.0.0/0”,这意味着它将接受到所有端口的所有连接。我是不是误会了什么?
是的,你错过了一个重要的细节。但这不是你的错;这是非常糟糕的记录,显然并不为人所知。
该命令有一个重大的设计缺陷:除非您使用命令行选项
iptables
,否则它实际上不会显示完整的防火墙规则。-v
如果您重复 iptables 命令并添加
-v
,您将看到该规则接受名为 的接口上的所有流量lo
,即所有 localhost 流量。由于
iptables
现在已弃用,并且该缺陷基本上永远存在,因此不太可能改变。