首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >iptables限制多端口规则的解决方法

iptables限制多端口规则的解决方法
EN

Server Fault用户
提问于 2020-06-11 22:27:36
回答 1查看 2.3K关注 0票数 2

我有许多端口要阻止,但是iptables多端口规则有一个限制,最多只允许15个端口。

代码语言:javascript
运行
复制
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:端口1:16只是为了解释这个想法。实际端口不按顺序排列

EN

回答 1

Server Fault用户

回答已采纳

发布于 2020-06-12 00:22:03

隐式-m tcp-m udp (和sctp等)全部接受端口范围参数。因此,可以将当前的示例简化为以下简单的示例:

代码语言:javascript
运行
复制
iptables -A INPUT -p tcp -m tcp --dport 1:16 -j DROP # -m tcp is implicitly loaded if omitted anyway

对于-m multiport来说也是一样的,除了一个范围会吃掉两个插槽:

multiport此模块匹配一组源端口或目标端口。最多可指定15个端口。端口范围(端口:端口)算作两个端口。

因此,如果有最多7个范围(+1个单一端口),则可以执行以下操作:

代码语言:javascript
运行
复制
iptables -A INPUT -p tcp -m multiport --dports 1:5,10:50,6666 -j DROP

如果您计划使用任意高数量的端口而不添加大量规则,则可以切换到使用ipset (这还需要使用ipset工具)和set匹配:

代码语言:javascript
运行
复制
ipset create portlist bitmap:port range 0-65535 #or narrower if known in advance
for i in $(seq 1 1000); do ipset add portlist $i; done

编辑:实际上,上面的具体情况(一个范围内的所有值)也可以通过在ipset中使用范围语法来简化(支持可能取决于版本),而不是循环(如果需要的话)。不会更改设置结果:

代码语言:javascript
运行
复制
ipset add portlist 1-1000

单一iptables规则:

代码语言:javascript
运行
复制
iptables -A INPUT -p tcp -m set --match-set portlist dst -j DROP

位图应该有O(1)查找:常量(以及重要的是:非常快)时间。

在使用时,可以动态更改ipset:

代码语言:javascript
运行
复制
ipset del portlist 22

即使是从数据包路径,如果真的需要的话。

它提供了许多其他列表类型(如hash:ip,port),其中大多数是散列的。它们可以加载成千上万个条目,并且仍然保持快速查找,并帮助具有简单和通用的规则。

票数 4
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1021118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档