udp 有限制端口最大会话数的 iptables 命令吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
bibiisme
V2EX    Linux

udp 有限制端口最大会话数的 iptables 命令吗?

  •  
  •   bibiisme 2023-04-18 20:41:53 +08:00 2689 次点击
    这是一个创建于 982 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近在玩 qos ,tcp 的话有 connlimit ,比如下面这个对多线程 tcp 进行标记送去相应的 qos 命令。
    iptables -t mangle -A FORWARD -d 192.168.6.1/24 -p tcp --sport 1:65535 -m connlimit --connlimit-above 4 --connlimit-saddr -j MARK --set-mark 1
    iptables -t mangle -A FORWARD -s 192.168.6.1/24 -p tcp --dport 1:65535 -m connlimit --connlimit-above 4 --connlimit-daddr -j MARK --set-mark 9

    udp 的话,主要想限制 bt 。游戏 udp 还好,可以用包大小匹配,但是 qq 视频这种和 bt 实在不知道咋区分。就两种思路:
    1.类似上面的 tcp 命令,局域网主机某个端口如果同时收到许多 ip 的数据则进行标记,但查了一圈没找到 udp 如何实现。
    2.将视频通话的 udp 单独标记,但不知道这种数据包有啥特征。

    请问各位有什么想法吗?
    18 条回复    2023-04-20 12:05:47 +08:00
    pagxir
        1
    pagxir  
       2023-04-18 20:48:00 +08:00
    UDP 没有连接的概念。所以你的先把 UDP 会话给定义出来。
    learningman
        2
    learningman  
       2023-04-18 20:55:13 +08:00 via Android
    不上 DPI 不可能
    bibiisme
        3
    bibiisme  
    OP
       2023-04-18 21:30:47 +08:00
    @pagxir 是的,所以我没说连接,说的会话,指 conntrack 里面看到的那组信息。
    tomychen
        4
    tomychen  
       2023-04-18 22:13:02 +08:00
    #2 说的 DPI 是一解法 参考 openDPI

    或者 L7 filter ,相当于 iptables 的一个补丁? 我在上古内核版本内核试着装过

    无论是,bt ,视频流,要识别就已经脱离了 iptables 的范畴了,因为它是(ip)tables ,不是 packet filter

    当然,也有抖机灵的办法,比如--string 里去匹配一些关键字.
    bibiisme
        5
    bibiisme  
    OP
       2023-04-18 22:38:17 +08:00
    @tomychen bt 我发现的特征就是会有很多外部 ip 连接主机特定端口,可惜 udp 没有类似 connlimit 的工具
    tomychen
        6
    tomychen  
       2023-04-18 23:06:50 +08:00
    哈哈,因为 UDP 没有 CONN ,当然也就不能用这套,我忘了你是要做 QoS ,我以为你想 block 来着。

    刚刚去瞄了一眼 openwrt 的作法,用的也是 layer7.

    但是在 gentoo 的论坛发现一个可以借 tc 完成,倒也挺有意思

    https://forums.gentoo.org/viewtopic-t-926236-start-0.html
    bibiisme
        7
    bibiisme  
    OP
       2023-04-18 23:56:06 +08:00
    @tomychen

    感谢。不过 tc 这部分我这里暂时用不着,在测硬路由的硬件 qos 。qos 硬件是根据收到的包带的 mark 来设置 qos 等级的。
    现在是普通 udp 和 1 楼的>4 线程 tcp 最小 mark ,<=4 线程 tcp 中等 mark ,udp 小包最大 mark 。
    udp 视频和 bt 下载看来通过 iptables 是区分不了了。
    datocp
        8
    datocp  
       2023-04-19 00:26:34 +08:00 via Android
    嘿嘿,竟然看不懂

    Qos 实现的是 htb 的 prio 优先级,不是并发数仰制。当然当年在 8mbps 的宽带依然需要用 iptables limit 抑制迅雷才能让网络正常,主要是带宽并发数有限。

    https://wiki.dd-wrt.com/wiki/index.php/Preventing_Brute_Force_Attacks

    保障高优先级端口,抑制其它端口 limit 更平滑不会出现打开网页图片有问题的情况。本机这就是 qos 以外的最好方法。

    iptables -N rate_limit
    iptables -F rate_limit
    iptables -A rate_limit -p tcp --dport 22 -m limit --limit 3/min --limit-burst 3 -j ACCEPT
    iptables -A rate_limit -p udp --dport 1194 -m limit --limit 3/min --limit-burst 3 -j ACCEPT
    iptables -A rate_limit -p ICMP --icmp-type echo-request -m limit --limit 3/sec -j ACCEPT
    iptables -A rate_limit -p <protocol> --dport <port> -m limit --limit <x/sec/min/hr> --limit-burst X -j ACCEPT
    iptables -A rate_limit -p ! ICMP -j LOG --log-prefix " Connection dropped!! "
    iptables -A rate_limit -p tcp -j REJECT --reject-with tcp-reset
    iptables -A rate_limit -p udp -j REJECT --reject-with icmp-port-unreachable
    iptables -A rate_limit -j DROP

    在有一定基础以后,用 connbytes 就能 1 秒抓到高流量用户,实现动态 qos ,无视任何 p2p 的存在。

    qos 实现流量和延迟的对比关系,看自己如何平衡。平时都用目的端口实现 prio 优先级控制,通过划分流量到不同 class 实现不同的延迟。真正要保障的也就高优先级的游戏,网页浏览。其它的感受甚微。



    udp_5000:5500,6060,8088_0x10/0xff
    tcp_2099,5222,5223,5060,6060,8088,8393:8400,992,1992,26241_0x10/0xff
    udp_53,123_0x20/0xff
    tcp_22,23,3389,8123_0x20/0xff
    tcp_80,443,1080,1863,8080:8081,12000,14000_0x30/0xff
    udp_500,1701,4000:4030,4500,8000:8001,16285_0x30/0xff
    tcp_20,21,25,143,465,993,1024:65535_0x40/0xff
    udp_1:65535_0x40/0xff
    datocp
        9
    datocp  
       2023-04-19 00:33:16 +08:00 via Android
    玩 linux 路由,qos 最好的参考模板是 tomato qos 。其它的理论名词一大堆,不知所谓。
    bibiisme
        10
    bibiisme  
    OP
       2023-04-19 00:44:53 +08:00
    @datocp

    没打算抑制并发数,现在的策略在 7 楼,只是打算给并发数太多的流量降低优先级。
    测的是 mtk 的硬件 qos ,因为这些流量后面会被硬件加速模块接管并进行 qos ,要在硬件模块接管流量之前按优先级打好 mark ,干不了其他的,只能设置好优先级。
    tomychen
        11
    tomychen  
       2023-04-19 00:55:05 +08:00
    单纯按照流量确实是可以实现的 rate_limit / hashlimit 等

    就是这样就有点模糊,可能会有协议外的误伤。

    但好像又很有道理,目的本身就是 QoS ,又不是协议识别和包过滤。流量大了,就给他弄了。
    bibiisme
        12
    bibiisme  
    OP
       2023-04-19 08:23:48 +08:00
    @tomychen 其实就是流量识别,因为 qos 本身实现我是交给硬件了。。。突然记起来 bt 下载的时候,这些软件会通过 upnp 开启端口转发。看看后面改下 upnp ,在 upnp 加端口转发规则的时候,同时给到这台主机端口的流量打上对应的 mark ?
    leonshaw
        13
    leonshaw  
       2023-04-19 08:46:17 +08:00 via Android
    nft 的 meter 和 ct count 能满足需求吗?
    hrMn23lO4Ds226CV
        14
    hrMn23lO4Ds226CV  
       2023-04-19 10:37:26 +08:00
    有些 BT 软件会自己打 LE 标 然后直接读它
    iptables -t mangle -A POSTROUTING -o pppoe-CU -m tos --tos 0x04/0xfc -j CLASSIFY --set-class 1:8
    或者你自己打标
    iptables -t mangle -A OUTPUT --protocol udp --sport 6881 -j DSCP --set-dscp-class LE
    Windows 也可以用组策略的 QoS 指定程序数据包标记 IP 协议层的标记读起来应该比较快 也可后续映射到 802.1p
    Juszoe
        15
    Juszoe  
       2023-04-19 12:13:56 +08:00
    我也有 qos 需求,正在考虑使用集成度高的软路由实现,之前用过爱快是能识别 BT 流量的
    bibiisme
        16
    bibiisme  
    OP
       2023-04-19 14:13:49 +08:00
    @OneOfSisters 刚才去瞅了下 openwrt 上 miniupnpd 的代码,发现里面有 dscp 的相关信息,不过貌似基本没人提这个。
    bibiisme
        17
    bibiisme  
    OP
       2023-04-19 19:11:28 +08:00
    @OneOfSisters 不过倒提醒我,尝试改了下路由器上的 upnp 源码,统一给映射的端口打上 dscp 0x2 ,现在能进一步区分 p2p 流量了。

    https://github.com/padavanonly/packages/blob/openwrt-18.06/net/miniupnpd/patches/109-dscp.patch
    bibiisme
        18
    bibiisme  
    OP
       2023-04-20 12:05:47 +08:00
    @tomychen 其实我的目的是分流打 mark ,qos 属于硬件的事了。暂时通过路由器的 upnp 这玩意来设定 dscp
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2643 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 12:15 PVG 20:15 LAX 04:15 JFK 07:15
    Do have faith in what you're doing.
    ubao msn 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