求助:怎么限制一段端口范围每个端口连接数? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
GavinMa
V2EX    Linux

求助:怎么限制一段端口范围每个端口连接数?

  •  
  •   GavinMa 2015-01-24 19:31:35 +08:00 11902 次点击
    这是一个创建于 3916 天前的主题,其中的信息可能已经有所发展或是发生改变。
    求助:怎么限制一段端口范围每个端口连接数?
    比如端口范围为20000-30000,共1W个端口,每个端口的连接数为5,iptable 代码该怎么写呢?

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

    ubuntu系统,在此先感谢!
    28 条回复    2020-02-12 18:56:55 +08:00
    bellchu
        1
    bellchu  
       2015-01-24 20:40:25 +08:00 via iPhone   1
    Ip tables -a input -p top --dport xxx -m connlimit --connlimit-above 100 --connlimit-mask 0 -j reject


    手机打字 将就看吧
    bellchu
        2
    bellchu  
       2015-01-24 20:44:20 +08:00 via iPhone   1
    --dport 20000:30000 就是20000到30000
    GavinMa
        3
    GavinMa  
    OP
       2015-01-24 23:53:00 +08:00
    @bellchu 好的,我试试。感谢帮忙。
    ryd994
        4
    ryd994  
       2015-01-25 19:21:49 +08:00
    @bellchu 这个是某范围内所有端口连接的总数啊
    --connlimit-mask 0只是不管哪个IP来源,全都一起计算而已
    bellchu
        5
    bellchu  
       2015-01-25 20:48:48 +08:00
    @ryd994 呃。。。。。。。你这么一说好像是啊,

    这么写
    iptables -A INPUT -p tcp -m multiport --dports 20000:30000 -m connlimit --connlimit-above 5 --connlimit-mask 0 -j REJECT
    ryd994
        6
    ryd994  
       2015-01-26 01:31:31 +08:00 via Android   1
    @bellchu 这……真的行吗?multiport和cnnlimit是两个match,相互之间不影响的吧……
    @GavinMa 先问问你要实现的什么目的?为什么要这么做?是为了抗dos呢?还是应用需求?说实话如果强求每个端口而不是总数限制的话,我想不到好办法
    bellchu
        7
    bellchu  
       2015-01-26 09:11:23 +08:00 via iPhone
    @ryd994 两个-m为啥不行?
    ryd994
        8
    ryd994  
       2015-01-26 09:45:55 +08:00
    @bellchu m是match,只管自己这个模块里能不能满足要求。如果每个模块都满足,那么-j生效。
    m和m之间根本就是不同的程序,怎么会搭界?
    如果不相信的话为何不自己验证一下?
    bellchu
        9
    bellchu  
       2015-01-26 10:49:12 +08:00
    ryd994
        10
    ryd994  
       2015-01-26 11:15:19 +08:00
    @bellchu
    …………又没说你语法不对
    telnet 连连看啊
    bellchu
        11
    bellchu  
       2015-01-26 11:56:31 +08:00
    bellchu
        12
    bellchu  
       2015-01-26 12:08:09 +08:00
    发现个问题,connlimit不会减计数,断开之后还算连接着,保持被REJECT状态。除非iptables -F,不然就算连接清空了还是连不上被REJECT。楼主还是用hitcount hashlimit之类来做限制吧。
    ryd994
        13
    ryd994  
       2015-01-26 20:18:21 +08:00 via Android
    @bellchu connlimit肯定会减的,我的web服务器上就用着,要是不减还得了………
    而且问题不在于限制是不是两个连接,而是这个限制是总限制还是每端口。我测试的结果就是,如果
    ryd994
        14
    ryd994  
       2015-01-26 20:19:05 +08:00 via Android
    @bellchu 如果一个端口上有两个连接,第三个无论是哪个端口,都会被拒绝
    bellchu
        15
    bellchu  
       2015-01-26 22:21:35 +08:00
    @ryd994 mask改32呢
    bellchu
        16
    bellchu  
       2015-01-26 23:02:45 +08:00
    @ryd994 count不减少是因为TIME_WAIT的timeout时间在我机器上是120秒,你可能写的DROP,所以连接马上被关闭了,而我写的是REJECT所以一直在WAIT。
    mask改32的现象是source ip限制为单个,而不是匹配所有ip。
    至于你说的两个match不能一起用显然是不成立的。
    明天有空我再去试试看多端口的限制吧,楼主的这么多端口的限制的需求也真是没遇到过呢。刚刚看了看man,说是multiport后面写range也只算range中的两个ports。
    ryd994
        17
    ryd994  
       2015-01-26 23:53:06 +08:00 via Android
    @bellchu 我没说不能一起用……我是说他们的参数互相不干扰……你这样是限制所有端口上的总数………
    GavinMa
        18
    GavinMa  
    OP
       2015-01-27 21:40:45 +08:00
    @ryd994
    @bellchu 感谢两位的积极帮助,需求是这样的:我免费分享了几台TW的SS服务器,每位注册用户都有自己的独立端口和密码,为了防止滥用,想对每个端口做连接数限制。
    目前还没有解决。
    使用的开源系统:
    1、https://github.com/orvice/ss-panel
    2、https://github.com/mengskysama/shadowsocks/tree/manyuser
    ryd994
        19
    ryd994  
       2015-01-28 00:23:40 +08:00 via Android   1
    @GavinMa 这样的话就直接限制所有端口上每个IP的连接总数吧,效果一样的。
    你要限制单个端口上的所有IP的连接数太麻烦了。
    bellchu
        20
    bellchu  
       2015-01-28 11:07:10 +08:00
    @GavinMa 你确定你有1万个用户需要开1万个端口么,我只做过面向服务的连接数和流量限制,比如web的http(s),SSH的22. 就像楼上所说,你的需求用connlimit做源地址的限制比较合理,当然你可以写一万条防火墙脚本,这么长的脚本我就没法说保证系统的效率了,不过你也可以试一下.
    GavinMa
        21
    GavinMa  
    OP
       2015-01-28 16:32:14 +08:00
    @bellchu 没有1万个用户,目前设计的思路是用户注册时让其在1万个端口范围内随机生成一个端口(安全机制)。
    @ryd994 抱歉,我是linux小白,做这个免费分享计划完全出于热心,还望提供帮助,具体规则帮忙写下可以吗?
    ryd994
        22
    ryd994  
       2015-01-28 21:36:33 +08:00   1
    iptables -A INPUT -p tcp --dport 20000:30000 -m connlimit --connlimit-above 10 -j REJECT
    这样基本就行了,不同用户给不同密码就行了。
    GavinMa
        23
    GavinMa  
    OP
       2015-01-29 02:43:06 +08:00
    @ryd994 没成功,导致SS无法正常连接使用了。
    ikzzdd
        24
    ikzzdd  
       2015-02-05 12:08:56 +08:00
    这个问题我也想知道方案,研究好多天了
    617450941
        25
    617450941  
       2015-10-20 22:49:30 +08:00
    iptables 怎么限制一个端口只能一个 ip 连接 求解
    Vogan
        26
    Vogan  
       2020-02-04 02:40:54 +08:00
    @ryd994 #22 这是错误的,限制的是 20000-30000 共 1w 个端口,一共只能 10 个连接数,而不是每个端口 10 个连接数!
    ryd994
        27
    ryd994  
       2020-02-12 18:55:09 +08:00 via Android
    @Vogan 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
    ryd994
        28
    ryd994  
       2020-02-12 18:56:55 +08:00 via Android
    @Vogan 你就不能看看我 19 楼说的什么?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     935 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 19:51 PVG 03:51 LAX 12:51 JFK 15:51
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86