这是我设置的规则
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错误消息。