【发布时间】:2019-12-11 20:51:00
【问题描述】:
我正在学习 BPF 并将一些 iptables 规则转换为 BPF 字节码。我主要使用 nfbpf_compile 应用程序来执行此操作,而不是尝试编写 C 或汇编程序。我很幸运,但一条规则的语法让我无法理解。
我想丢弃带有 也 缺少 MSS 值的 syn 标志集的数据包。在 iptables 中,MSS 以--tcp-option 2 为目标。我知道 MSS 位于 TCP 数据包的第 22 个字节开始的 TCP 选项中,并且 MSS 是“种类”2。我可以使用 BPF 语法中的tcp[22:2]==$NUMBER 过滤 MSS。但是,我想做的是针对完全丢失 MSS 的 SYN 数据包。
我已经尝试了所有我能想到的“null”变体,但没有运气。
有人知道 BPF 语法中 iptables ! --tcp-option 2 的等价物吗?
我尝试过的一个例子:
$ ./nfbpf_compile RAW 'tcp[22:2]==0x0' (I know this won't work..it's an example)
12,48 0 0 0,84 0 0 240,21 0 8 64,48 0 0 9,21 0 6 6,40 0 0 6,69 4 0 8191,177 0 0 0,72 0 0 22,21 0 1 0,6 0 0 65535,6 0 0 0
# iptables -I INPUT -m bpf --bytecode '12,48 0 0 0,84 0 0 240,21 0 8 64,48 0 0 9,21 0 6 6,40 0 0 6,69 4 0 8191,177 0 0 0,72 0 0 22,21 0 1 0,6 0 0 65535,6 0 0 0
' -j DROP
【问题讨论】: