nftables 如何匹配的 TCP 中存在 Payload 数据包? - V2EX
SunBK201

nftables 如何匹配的 TCP 中存在 Payload 数据包?

  •  
  •   SunBK201 Dec 11, 2025 1954 views
    This topic created in 164 days ago, the information mentioned may be changed or developed.

    nftables 貌似不支持 ip length - ip hdrlength * 4 - tcp doff * 4 > 0 这种算术操作。

    14 replies    2025-12-12 09:44:23 +08:00
    birdvdsk
        1
    birdvdsk  
       Dec 11, 2025 via Android
    你的具体需求是什么
    SunBK201
        2
    SunBK201  
    OP
       
    @birdvdsk 我需要使用 nftables 把包含 payload 的 TCP 数据包 hook 到用户态的 nfqueue 进行处理,之前的做法是对全部的 TCP 数据包进行 hook ,但是性能损耗太大,所以想要加一层过滤。
    birdvdsk
        3
    birdvdsk  
       Dec 11, 2025 via Android   1
    可以利用 tcp 标志位,将 ACK ,PSH ,FIN 等可能携带数据的数据包使用 nftables 过滤。但是话说回来,经过 Linux 网络栈的情况下进行性能优化是比较困难的。
    luojiyin87
        4
    luojiyin87  
       Dec 11, 2025   1
    语法要换成“比较 + 加法/移位”,不必写减法链式公式。

    nft add rule inet payload_queue pre ip protocol tcp \
    ip length > (ip hdrlength << 2) + (tcp doff << 2) \
    queue num 100 bypass
    SunBK201
        5
    SunBK201  
    OP
       Dec 11, 2025
    @luojiyin87 似乎有语法错误? Error: syntax error, unexpected hdrlength, expecting ')'
    SunBK201
        6
    SunBK201  
    OP
       Dec 11, 2025
    @birdvdsk 我也有想到,但是只用 flag 可能有漏报吧
    unused
        7
    unused  
       Dec 11, 2025
    试着读一下 payload 呢
    @th,0,8 & 0 == 0
    unused
        8
    unused  
       Dec 11, 2025   1
    th -> ih
    SunBK201
        9
    SunBK201  
    OP
       Dec 11, 2025
    @unused 这个方法刚刚我也发现了,但是 ih 似乎需要比较新的 nftables 版本,旧版本不支持
    xqzr
        10
    xqzr  
       Dec 11, 2025
    TCP 头,长度不固定。没有 @ih 应该不好匹配...
    这些规则,曾用于:将选项 MSS 替换为 NOP (相当于,删除 MSS )
    tcp flags syn @th,160,8 set 1 continue
    tcp flags syn @th,168,8 set 1 continue
    tcp flags syn @th,176,8 set 1 continue
    tcp flags syn @th,184,8 set 1
    JoeSmith
        11
    JoeSmith  
       Dec 11, 2025
    试试 eBPF 呗
    ysc3839
        12
    ysc3839  
       Dec 11, 2025 via Android
    直接用 DPDK 吧?
    v1
        13
    v1  
       Dec 11, 2025
    eBPF 解万忧
    maybeonly
        14
    maybeonly  
       Dec 12, 2025
    iptables 倒是有 -m bpf 可以做,不过 nft 说这个不优雅,不要了
    要么就上 ebpf 吧,或者 nfqueue/rawsocket 用户态实现
    顺便说。用命令行查看计数器这个操作也挺慢的。
    About     Help     Advertise     Blog     API     FAQ     Solana     835 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 49ms UTC 21:16 PVG 05:16 LAX 14:16 JFK 17:16
    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