iptables misconfiguration阻塞了传出连接

这是我设置的规则

iptables -P INPUT DROP iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT 

当我试图build立一个传出连接时,它被阻止。

less了什么东西?


这是iptables -n -L的输出

  Chain INPUT (policy DROP) target prot opt source destination DROP tcp -- 0.0.0.0/0 0.0.0.0/0 source IP range 93.0.0.0-93.255.255.255 tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 state NEW recent: SET name: DEFAULT side: source DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 state NEW recent: UPDATE seconds: 60 hit_count: 15 name: DEFAULT side: source ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination 

请注意,第一个规则是阻止某个特定范围,接下来的两个规则应该限制任何人在60秒内可以完成的请求数量。

我没有看到任何允许传出连接的规则。 你为什么认为它应该工作? 也许你错过了这样的事实:如果你连接 80端口,返回的数据包是端口80,而不是80端口。

如果你想连接 80端口,你有两种方法让返回数据包进入:

1)允许来自端口80的数据包。

2)允许作为现有会话的一部分的分组。

我没有看到你做这些事情的任何证据。

为了详细解释David的答案,可以通过将以下规则添加到filter表中来允许属于现有会话的数据包:

 iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 

ESTABLISHED状态下允许input数据包将允许大多数所有传出连接按照您的预期工作,包括非TCP“无连接”的东西,例如DNS查询(UDP)和ping(ICMP)。

允许处于RELATED状态的input数据包使您能够接收可能从连接尝试返回到pipe理禁止的端口/主机/networking等的ICMP错误消息。