V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
SunBK201
V2EX  ›  宽带症候群

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

  •  
  •   SunBK201 · 2 天前 · 924 次点击

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

    14 条回复    2025-12-12 09:44:23 +08:00
    birdvdsk
        1
    birdvdsk  
       2 天前 via Android
    你的具体需求是什么
    SunBK201
        2
    SunBK201  
    OP
       2 天前
    @birdvdsk 我需要使用 nftables 把包含 payload 的 TCP 数据包 hook 到用户态的 nfqueue 进行处理,之前的做法是对全部的 TCP 数据包进行 hook ,但是性能损耗太大,所以想要加一层过滤。
    birdvdsk
        3
    birdvdsk  
       2 天前 via Android   ❤️ 1
    可以利用 tcp 标志位,将 ACK ,PSH ,FIN 等可能携带数据的数据包使用 nftables 过滤。但是话说回来,经过 Linux 网络栈的情况下进行性能优化是比较困难的。
    luojiyin87
        4
    luojiyin87  
       2 天前   ❤️ 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
       2 天前
    @luojiyin87 似乎有语法错误? Error: syntax error, unexpected hdrlength, expecting ')'
    SunBK201
        6
    SunBK201  
    OP
       2 天前
    @birdvdsk 我也有想到,但是只用 flag 可能有漏报吧
    unused
        7
    unused  
       2 天前
    试着读一下 payload 呢
    @th,0,8 & 0 == 0
    unused
        8
    unused  
       2 天前   ❤️ 1
    th -> ih
    SunBK201
        9
    SunBK201  
    OP
       2 天前
    @unused 这个方法刚刚我也发现了,但是 ih 似乎需要比较新的 nftables 版本,旧版本不支持🥲
    xqzr
        10
    xqzr  
       2 天前
    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  
       1 天前
    试试 eBPF 呗
    ysc3839
        12
    ysc3839  
       1 天前 via Android
    直接用 DPDK 吧?
    v1
        13
    v1  
       1 天前
    eBPF 解万忧
    maybeonly
        14
    maybeonly  
       1 天前
    iptables 倒是有 -m bpf 可以做,不过 nft 说这个不优雅,不要了
    要么就上 ebpf 吧,或者 nfqueue/rawsocket 用户态实现
    顺便说。用命令行查看计数器这个操作也挺慢的。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2639 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:58 · PVG 21:58 · LAX 05:58 · JFK 08:58
    ♥ Do have faith in what you're doing.