我有一些像这样的 netfilter 规则:
iptables -I INPUT -j NFQUEUE -p udp --dport 4444
iptables -t mangle -I INPUT -j MARK --set-mark 100 -p udp --dport 4444
iptables -I OUTPUT -j NFQUEUE -p udp --sport 4444
iptables -t mangle -I OUTPUT -j MARK --set-mark 200 -p udp --sport 4444
我需要一种简单的方法来分组这些规则,目的是将它们全部删除,就像这样
iptables -N MYCHAIN
iptables -I MYCHAIN -j NFQUEUE -p udp --dport 4444
iptables -t mangle -I MYCHAIN -j MARK --set-mark 100 -p udp --dport 4444
iptables -I MYCHAIN -j NFQUEUE -p udp --sport 4444
iptables -t mangle -I MYCHAIN -j MARK --set-mark 200 -p udp --sport 4444
# Fast deleting
iptables -F MYCHAIN
iptables -X MYCHAIN
但它不起作用,我当然必须将默认链与 MYCHAIN 连接起来,但我不知道该怎么做。有没有更好或更简单的解决方案?
答案1
您的链位于过滤表中(因为您在创建它时没有指定表,所以它默认出现在那里),但是您试图从 mangle 表中引用它,但它并不存在。
您需要指定正确的表,如下所示:
iptables -t mangle -N MYCHAIN
此外,为了使用 NFQUEUE 目标,您需要加载 nfnetlink_queue 内核模块。MARK 目标需要在 mangle 表的 PREROUTING 链中设置。在上面的示例中,它是在 INPUT 链中设置的。
因此,总而言之,为了完成这项工作,您可能需要做这样的事情:
iptables -t mangle -N MYCHAIN
iptables -t mangle -I MYCHAIN -j NFQUEUE -p udp --dport 4444
iptables -t mangle -I MYCHAIN -j MARK --set-mark 100 -p udp --dport 4444
iptables -t mangle -I MYCHAIN -j NFQUEUE -p udp --sport 4444
iptables -t mangle -I MYCHAIN -j MARK --set-mark 200 -p udp --sport 4444
然后在相关表中引用它,如下所示:
iptables -t mangle -I PREROUTING -j MYCHAIN
链的刷新和删除不应该发生在同一个脚本文件中,因为它实际上消除了规则被执行的任何可能性。