我有很多端口要阻止,但 iptables 多端口规则有一个限制,最多只允许 15 个端口。
severalports="1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16"
iptables -A INPUT -p tcp -m multiport --dports $severalports -J DROP
iptables v1.4.21: too many ports specified
我想知道是否有任何方法可以创建自定义规则来绕过最大 15 个端口的限制(所以我不必拆分规则)。谢谢
PD:Ports 1:16 只是为了解释这个想法。实际端口不按顺序
隐式
-m tcp
,-m udp
(和 sctp 等)都接受端口范围参数。因此,您当前的示例可以简化为:-m multiport
除了一个范围吃两个插槽之外,它是相同的:因此,如果最多有 7 个范围(+1 个单端口),您可以执行以下操作:
如果您计划在不添加大量规则的情况下使用任意数量的端口,则可以切换到使用ipset(这也需要使用该
ipset
工具)和set
匹配:编辑:实际上,上面的特定情况(一个范围内的所有值)也可以通过在ipset中使用范围语法来简化(支持可能取决于版本),而不是在需要时使用循环。不会改变设置的结果:
单iptables规则:
位图应该具有 O(1) 查找:恒定(并且可能很重要:非常快)时间。
ipset可以在使用时动态更改:
如果真的需要,甚至从数据包路径。
它提供了许多其他列表类型(如
hash:ip,port
),其中大多数是散列的。它们可以加载数十万个条目,并且仍然保持快速查找,并有助于制定简单和通用的规则。