iptables 的 limit 和 connlimit 等模块现在是内置还是需要另外引入? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
itsme
V2EX    Linux

iptables 的 limit 和 connlimit 等模块现在是内置还是需要另外引入?

  •  
  •   itsme 2015-10-20 23:44:24 +08:00 5532 次点击
    这是一个创建于 3647 天前的主题,其中的信息可能已经有所发展或是发生改变。
    百度还是找不到说明。
    自己的 vps 上写相关的规则发现没作用,搞不清是否需要额外引入才能用?
    14 条回复    2015-10-24 11:52:27 +08:00
    ryd994
        1
    ryd994  
       2015-10-21 07:02:00 +08:00 via Android
    iptables-save 看看
    vps 是 openvz 的么
    一般不需要
    michaelOoO
        2
    michaelOoO  
       2015-10-21 08:45:20 +08:00
    itsme
        3
    itsme  
    OP
       2015-10-21 10:05:11 +08:00
    谢谢两位。我对比了几个 vps ,不同 linux 内核版本,使用 iptables 相关含模块的规则,也没报错,估计是内置。不过效果比如 limit 模块,不同 vps 上明显效果不一样,不知道是否内核版本差别。

    我继续学习中。谢谢回复。现在就想怎么对不断开新端口的 BT 连接进行限制。我看到一个 ip 应该用了 BT ,随机占用端口 2xxxx 开始到 5xxxx ,嗯, ss 的连接,不知道只能有效阻止这种。
    fredcc
        4
    fredcc  
       2015-10-21 10:06:05 +08:00 via Android
    我想说 7 开始已经不用 iptables 了
    coreos
        5
    coreos  
       2015-10-21 11:04:21 +08:00
    内核编绎可选
    datocp
        6
    datocp  
       2015-10-21 12:33:34 +08:00 via Android
    limit 肯定比 connlimit 好, connlimit 实际测试在打开网页方面会导致断开白页。但是这属于全局限制,需要具体指定 ip ,用 hashlimit 吧,可以通过限制并发来限制流量。更高级的有 quota 。
    itsme
        7
    itsme  
    OP
       2015-10-21 18:22:31 +08:00
    @datocp quota 我也用了,流量能限制住,但是速度限不了,我那个 vps , hk 的带宽很小峰值 3M ,如果有一个人下载, ping 这个 vps 就可能几百上千的 ms 值了。
    connlimit 我目前是想限制住 bt 程序的连接数量,超过 50 就 drop ;
    limit 我是想用来限制下速度,不过在不同 vps 上,效果不太一样。不清楚原因了。
    datocp
        8
    datocp  
       2015-10-21 18:57:38 +08:00
    比较理想的是用 tc ,不过 vps 不支持。
    connlimit 一直没有好的印象,容易导致网络中断,像打开网页时突然就是白屏页面,在第三方固件和 ros 上测试过,印象一直不好, vps 上还没实际应用过。

    limit 是需要一个具体 ip 才能实现效果的,所以如果仅仅使用 limit 需要不断的侦测源 /目的 ip ,然后用脚本动态调用 iptables 进行插值处理才能针对特定 ip 实现连接数匹配,而 hashlimit 则是个增强版至少解决前面这些过程。


    -A INPUT -p tcp -m multiport --dport 80,1723,8080,8443,8843 -m hashlimit --hashlimit-name obfs --hashlimit 80/sec --hashlimit-burst 350 --hashlimit-mode srcip,srcport --hashlimit-htable-expire 300000 -j ACCEPT
    -A INPUT -p tcp -m multiport --dport 80,1723,8080,8443,8843 -j REJECT

    这个 hashlimit 由于是用令牌筒概念实现的,所以匹配的每秒数据包通过数量就有多有少,造成流量的不精确,效果肯定是不如 tc 的。有时候没有别的方法也只能根据 tcp 握手的过程,通过限制数据包来达到限制流量的过程。
    itsme
        9
    itsme  
    OP
       2015-10-22 10:08:24 +08:00
    @datocp 你楼上的例子 80/sec --hashlimit-burst 350 这些数字的单位是 packets 包?
    实际就是 1500x80=120000bytes 最高峰值可以 1500x350=512K 是大概这意思吧

    我现在最想解决就是限制 BT 程序通过 SS ,我发现 BT 程序会不断的请求端口, tail ss 的日志,会发现连续不断请求,我曾经观察过请求的端口号从 20000 多一直到 50000 多, ss 里面我不知道如何限制。所以想看 iptables 是否可以阻止这种情况。
    itsme
        10
    itsme  
    OP
       2015-10-22 19:23:08 +08:00
    @datocp 我尝试用下面两种,都限制不了 4011 4016 两个端口的速度。我分开写,就是一次写一个端口号也不行。改限制到 OUTPUT ,同样也限制不到速度。 y2b 播放就是直接满速占用 vps 带宽。

    iptables -A INPUT -p tcp -m multiport --dport 4011,4016 -m hashlimit --hashlimit-name portslimit --hashlimit 80/sec --hashlimit-burst 100 --hashlimit-mode srcport --hashlimit-htable-expire 300000 -j ACCEPT
    iptables -A INPUT -p tcp -m multiport --dport 4011,4016 -j REJECT

    iptables -A INPUT -p tcp --dport 4011 -m limit --limit 80/s --limit-burst 100 -j ACCEPT
    iptables -A INPUT -p tcp --dport 4011 -j DROP
    datocp
        11
    datocp  
       2015-10-22 19:37:44 +08:00
    limit 的原理是匹配每秒通过的数据包,根据 tcp 握手的过程通过限制源数据包的数量来同时限制返回的数据包数量,所以原则上不是用来限制流量用途的。一般能调节的就是--hashlimit-burst 100 突发最高可以通过 100 包,然后不断的减少直到 0 ,而 hashlimit 80/sec 是用来产生多少包来补偿--hashlimit-burst 100 减少的,但最高也只能到 100 ,所以它不是用来限流量的,只是因为限制并发而连带的抑制流量过程。

    我那两句用 wget 测试的时候, wget 属于单线程可以将流量限制在 200kb-1mb 之间。也许你应该用-hashlimit-mode srcip 限制每 ip ,然后调整 80/sec 为 40/sec 。然后再试试。
    itsme
        12
    itsme  
    OP
       2015-10-23 01:33:39 +08:00
    @datocp 谢谢详细说明。我再去调整测试下。除了 tc (似乎很复杂,而且 vps 估计用不了),应该也就 iptables 能稍微限制一下速度了吧。
    itsme
        13
    itsme  
    OP
       2015-10-24 10:57:35 +08:00
    @datocp -m multiport 使用这个 match 后,后面的--hashlimit 80/sec --hashlimit-burst 100 ,这个数是对于之前 multiport 列举的每个端口都是这个值还是之前列举端口的总和?

    感觉有点像是端口合计。又有点不确定。
    datocp
        14
    datocp  
       2015-10-24 11:52:27 +08:00
    这个 hashlimit 我也研究得少,不知道如何进行测试。你可以通过 hashlimit-name portslimit
    通过 cat /proc/net/ipt_hashlimit/portslimit 看看。它的本意做为 limit 的增强版本匹配每个源 ip ,但是多了 srcip srcport dstip dstport 我也答不上来了。。。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5506 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 01:20 PVG 09:20 LAX 18:20 JFK 21:20
    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