技术解析

求助:怎么限制一段端口范围每个端口连接数?
0
2021-07-01 17:32:27
idczone
求助:怎么限制一段端口范围每个端口连接数?
比如端口范围为20000-30000,共1W个端口,每个端口的连接数为5,iptable 代码该怎么写呢?

我查到的资料,限制单一端口貌似是这么写:
iptables -I INPUT -p tcp --dport 10000 -m connlimit --connlimit-above 5 -j DROP

ubuntu系统,在此先感谢!
Ip tables -a input -p top --dport xxx -m connlimit --connlimit-above 100 --connlimit-mask 0 -j reject

手机打字 将就看吧

--dport 20000:30000 就是20000到30000

好的,我试试。感谢帮忙。

这个是某范围内所有端口连接的总数啊
--connlimit-mask 0只是不管哪个IP来源,全都一起计算而已

呃。。。。。。。你这么一说好像是啊,
这么写
iptables -A INPUT -p tcp -m multiport --dports 20000:30000 -m connlimit --connlimit-above 5 --connlimit-mask 0 -j REJECT

这……真的行吗?multiport和connlimit是两个match,相互之间不影响的吧……
先问问你要实现的什么目的?为什么要这么做?是为了抗dos呢?还是应用需求?说实话如果强求每个端口而不是总数限制的话,我想不到好办法

两个-m为啥不行?

m是match,只管自己这个模块里能不能满足要求。如果每个模块都满足,那么-j生效。
m和m之间根本就是不同的程序,怎么会搭界?
如果不相信的话为何不自己验证一下?




…………又没说你语法不对
telnet 连连看啊




发现个问题,connlimit不会减计数,断开之后还算连接着,保持被REJECT状态。除非iptables -F,不然就算连接清空了还是连不上被REJECT。楼主还是用hitcount hashlimit之类来做限制吧。

connlimit肯定会减的,我的web服务器上就用着,要是不减还得了………
而且问题不在于限制是不是两个连接,而是这个限制是总限制还是每端口。我测试的结果就是,如果

如果一个端口上有两个连接,第三个无论是哪个端口,都会被拒绝

mask改32呢

count不减少是因为TIME_WAIT的timeout时间在我机器上是120秒,你可能写的DROP,所以连接马上被关闭了,而我写的是REJECT所以一直在WAIT。
mask改32的现象是source ip限制为单个,而不是匹配所有ip。
至于你说的两个match不能一起用显然是不成立的。
明天有空我再去试试看多端口的限制吧,楼主的这么多端口的限制的需求也真是没遇到过呢。刚刚看了看man,说是multiport后面写range也只算range中的两个ports。

我没说不能一起用……我是说他们的参数互相不干扰……你这样是限制所有端口上的总数………


感谢两位的积极帮助,需求是这样的:我免费分享了几台TW的SS服务器,每位注册用户都有自己的独立端口和密码,为了防止滥用,想对每个端口做连接数限制。
目前还没有解决。
使用的开源系统:
1、https://github.com/orvice/ss-panel
2、https://github.com/mengskysama/shadowsocks/tree/manyuser

这样的话就直接限制所有端口上每个IP的连接总数吧,效果一样的。
你要限制单个端口上的所有IP的连接数太麻烦了。

你确定你有1万个用户需要开1万个端口么,我只做过面向服务的连接数和流量限制,比如web的http(s),SSH的22. 就像楼上所说,你的需求用connlimit做源地址的限制比较合理,当然你可以写一万条防火墙脚本,这么长的脚本我就没法说保证系统的效率了,不过你也可以试一下.

没有1万个用户,目前设计的思路是用户注册时让其在1万个端口范围内随机生成一个端口(安全机制)。
抱歉,我是linux小白,做这个免费分享计划完全出于热心,还望提供帮助,具体规则帮忙写下可以吗?

iptables -A INPUT -p tcp --dport 20000:30000 -m connlimit --connlimit-above 10 -j REJECT
这样基本就行了,不同用户给不同密码就行了。

没成功,导致SS无法正常连接使用了。

这个问题我也想知道方案,研究好多天了

iptables 怎么限制一个端口只能一个 ip 连接 求解

这是错误的,限制的是 20000-30000 共 1w 个端口,一共只能 10 个连接数,而不是每个端口 10 个连接数!

rtfm
http://ipset.netfilter.org/iptables-extensions.man.html
connlimit
Allows you to restrict the number of parallel connections to a server per client IP address (or client address block).
默认是每 IP,除非你用 connlimit-mask 0

你就不能看看我 19 楼说的什么?

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服