添加最后一条规则后 iptables 会忽略其他规则

添加最后一条规则后 iptables 会忽略其他规则

我已将这些规则写在iptables

-A FORWARD -i eth1 -o eth0 -p icmp -m limit --limit 1/hour --limit-burst 5000 -j ACCEPT
-A FORWARD -i eth1 -o eth0 -p udp -m limit --limit 1/hour --limit-burst 200 -j ACCEPT
-A FORWARD -i eth1 -o eth0 -p tcp -m limit --limit 1/hour --limit-burst 200 -j ACCEPT
-A FORWARD -i eth1 -o eth0 -m limit --limit 1/hour --limit-burst 100 -j ACCEPT
-A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth1 -o eth0 -p tcp -m tcp --dport 443 -j limitlog
-A FORWARD -i eth1 -o eth0 -p tcp -m tcp --dport 80 -j limitlog
-A FORWARD -i eth1 -o eth0 -p udp -m udp --dport 53 -j limitlog
-A FORWARD -i eth1 -o eth0 -p udp -m udp --dport 123 -j limitlog
-A FORWARD -i eth1 -o eth0 -p tcp -m tcp --dport 21 -j limitlog
-A FORWARD -i eth1 -o eth0 -p tcp -m tcp --dport 20 -j limitlog
-A FORWARD -i eth1 -o eth0 -p tcp -m tcp --dport 22 -j limitlog
-A FORWARD -i eth1 -o eth0 -p tcp -m tcp --dport 5123 -j limitlog
-A FORWARD -i eth1 -o eth0 -p udp -m udp --dport 5123 -j limitlog
-A limitlog -i eth1 -o eth0 -p tcp -m tcp --dport 443 -j LOG --log-prefix "HTTPS z HP: "
-A limitlog -i eth1 -o eth0 -p tcp -m tcp --dport 443 -m limit --limit 1/hour --limit-burst 900 -j ACCEPT
-A limitlog -i eth1 -o eth0 -p tcp -m tcp --dport 80 -j LOG --log-prefix "HTTP z HP: "
-A limitlog -i eth1 -o eth0 -p tcp -m tcp --dport 80 -m limit --limit 1/hour --limit-burst 960 -j ACCEPT
-A limitlog -i eth1 -o eth0 -p udp -m udp --dport 53 -j LOG --log-prefix "DNS z HP: "
-A limitlog -i eth1 -o eth0 -p udp -m udp --dport 53 -m limit --limit 1/hour --limit-burst 360 -j ACCEPT
-A limitlog -i eth1 -o eth0 -p udp -m udp --dport 123 -j LOG --log-prefix "NTP z HP: "
-A limitlog -i eth1 -o eth0 -p udp -m udp --dport 123 -m limit --limit 1/hour --limit-burst 300 -j ACCEPT
-A limitlog -i eth1 -o eth0 -p tcp -m tcp --dport 21 -j LOG --log-prefix "FTP z HP: "
-A limitlog -i eth1 -o eth0 -p tcp -m tcp --dport 21 -m limit --limit 1/hour --limit-burst 900 -j ACCEPT
-A limitlog -i eth1 -o eth0 -p tcp -m tcp --dport 20 -j LOG --log-prefix "FTP DATA z HP: "
-A limitlog -i eth1 -o eth0 -p tcp -m tcp --dport 20 -m limit --limit 1/hour --limit-burst 900 -j ACCEPT
-A limitlog -i eth1 -o eth0 -p tcp -m tcp --dport 22 -j LOG --log-prefix "SSH/SCP z HP: "
-A limitlog -i eth1 -o eth0 -p tcp -m tcp --dport 22 -m limit --limit 1/hour --limit-burst 900 -j ACCEPT
-A limitlog -i eth1 -o eth0 -p tcp -m tcp --dport 5123 -j LOG --log-prefix "5123TCP z HP: "
-A limitlog -i eth1 -o eth0 -p tcp -m tcp --dport 5123 -m limit --limit 1/hour --limit-burst 300 -j ACCEPT
-A limitlog -i eth1 -o eth0 -p udp -m udp --dport 5123 -j LOG --log-prefix "5123UDP z HP: "
-A limitlog -i eth1 -o eth0 -p udp -m udp --dport 5123 -m limit --limit 1/hour --limit-burst 300 -j ACCEPT

eth0是外部网络,eth1是内部网络。它工作正常,但如果我添加此规则:

iptables -A FORWARD -i eth1 -o eth0 -j DROP

之前的所有规则都将被忽略,并且流量将在最后一条规则处结束。我不懂为什么?如果我删除此规则并修改链中的规则limitlog(例如从ACCEPT到 ),DROP它也可以工作。

答案1

你的限制有点激进。我不认为制定每小时只接受一个数据包的规则有什么意义。您可能设置了高突发性,但桶每小时只会充电一次,而且只有当您每小时实际收到的数据包少于一包时。

最糟糕的部分是这些限制适用于所有数据包,因为如果它们是已建立/相关 conntrack 状态的一部分,则您不会接受它们。

转储中的统计数据-L表明这不是问题,但也许您在测试之前进行了转储。 (您可以-S通过添加来包含统计信息-v)。

无关:有很多方法可以简化您的规则集。如果该limitlog链仅由 调用-i eth1 -o eth0,则可以省略其中的所有-i-o

答案2

您需要state RELATED,ESTABLISHED从外部到内部的流量的规则,并且需要一个或多个允许内部流量到外部的规则。您可以允许所有服务或仅允许某些服务。

ACCEPT我发现在名为 * 的链中to s 很令人困惑log

TCPMSS此外,为内部到外部的流量制定规则可能很有用:

iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

你应该考虑一下你想要记录什么以及为什么。

相关内容