为什么在输出链末端的“iptables -A OUTPUT -j REJECT”会覆盖以前的规则?

这些是我的IPTABLES规则:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT iptables -A OUTPUT -p udp --dport 22 -j ACCEPT iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT iptables -A OUTPUT -p udp --dport 53 -j ACCEPT iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name DEFAULT --rsource iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 180 --hitcount 4 --name DEFAULT --rsource -j DROP iptables -A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT iptables -A OUTPUT -j REJECT iptables -A INPUT -j REJECT iptables -A FORWARD -j REJECT 

即时通讯使用远程SSH设置,但设置后:

 iptables -A OUTPUT -j REJECT 

我的连接迷路了。 我已经阅读了所有的iptables的文档,我可以找出任何东西,全球拒绝INPUT工作良好,因为我可以访问网页,但我得到一个超时为SSH。 任何想法?

谢谢

在TCPstream上使用的端口不是对称的:当服务器(守护进程)结束侦听端口22时,客户端将使用随机的高编号(1024+)端口。 如果您在目标端口上进行过滤,则这些将被阻止。 你会想在iptables -A OUTPUT -m state –state ESTABLISHED,RELATED之前,在拒绝行回复外部请求的工作。

我认为你的过度限制输出规则是造成这个问题 – 你的SSH连接进入,但他们不能退出。 返回连接不会到您的客户端计算机上的端口22,它将转到高编号的端口。

要进行故障排除,请完全禁用输出规则,然后查看具体操作。 通常使用防火墙,您更关心的是连接进来而不是外出。

所以,试试iptables -A OUTPUT -j ACCEPT因为你只输出规则,看看会发生什么。

该线

 iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT 

应该读

 iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT 

因为数据包来自您的服务器上的端口22,并转到客户端机器上的随机临时端口,正如Phil已经指出的那样。 你可能要考虑join-m state --state ESTABLISHED如果你觉得额外的偏执狂, -m state --state ESTABLISHED