iptables -mstring仅检查udp有效负载

这是我正在处理的规则:

iptables -A QUERY -p udp -m length --length 24:63 -m udp -m string --algo bm --hex-string '|ffffffff|' --from 12 --to 28 -j QUERYLIMIT 

有没有办法检查只有UDP有效载荷,而不是处理整个头? 该规则的问题是标题大小可能会改变。

我知道-m u32 …是处理它的唯一方法吗?

通过iptables手册页,它看起来像我-m u32确实是你最好的select,如果你想使用纯粹的iptables。 是在负载的某个位置匹配的东西,还是真的需要-m string的有效载荷版本?

如果你有一些编程能力,你也可以看一下QUEUE目标,它将数据包传递给用户空间守护进程进行过滤。 以下是使用PerlvalidationDNS数据包的示例QUEUE表使用情况 。 请注意,这不会很快,特别是如果您使用Perl或其他脚本语言。 如果你想使用C,库看看是libnetfilter_queue 。

我还注意到,你现在的规则是从第12个字节开始的,它把它定位在检查IP头中的源地址和目的地址。 我不知道这是否正确,但是如果用有效载荷规则replace规则,请记住这一点。