在我的 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 中,第三条规则是“ACCEPT all -- 0.0.0.0/0 0.0.0.0/0”,这意味着它将接受所有端口的所有连接。我误解了什么吗?
答案1
是的,你错过了一个重要的细节。但这不是你的错;这方面的记录很差,显然也不为人所知。
该iptables
命令有一个重大的设计缺陷:除非您使用命令行选项,否则它实际上并不会显示完整的防火墙规则-v
。
如果您重复 iptables 命令并添加,-v
您将看到该规则接受名为的接口上的所有流量lo
,即所有本地主机流量。
target prot opt in out source destination
ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
由于iptables
现已弃用,并且该缺陷基本上一直存在,因此不太可能改变这种情况。