我试图匹配在他们的TCP选项字段中的特定值的数据包。 例如,我想匹配MSS值大于1400的所有数据包。
我发现iptables有一个--tcp-option参数,但是这个参数只检查指定的选项是否存在于数据包中。
我也知道我可以使用u32扩展匹配任何字段。 但是由于tcp选项是dynamic的,它们在数据包中的位置可以根据其他选项的存在而改变
而且TCP选项和我想匹配的值将是dynamic的。 因此,我必须能够支持IETF指定的所有TCP选项。
(#iptables -V => v1.4.7)
对于 – 协议tcp它看起来像你可以使用 – mss 1400它也支持范围-mss值[:值]
对于MSS,您可以使用tcpmss模块。
iptables -m tcpmss --help|tail -n4 tcpmss match options: [!] --mss value[:value] Match TCP MSS range. (only valid for TCP SYN or SYN/ACK packets)
例
这是来自我的一个服务器在prerouting表。
-A PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m tcpmss ! --mss 536:65535 -j DROP
这阻止了许多端口扫描和洪水,因为很多写得不好的工具不会麻烦设置mss。
在你的情况下 ,应该是这样的
-m tcpmss --mss 1400:65535