丢弃特定协议的 IP 分片

丢弃特定协议的 IP 分片

conntrack处于活动状态时,iptables 堆栈永远不会看到碎片化的 IP 数据包,而只会看到重组的 IP 数据包(来源),因此-f测试永远不会匹配。

如果我想阻止任何片段,我可以将ipfrag_high_thresh或 设置ipfrag_time为 0(来源),但这样会丢弃任何类型的碎片。如果我想丢弃某个 IP 协议的碎片,我该怎么做?

答案1

根据您的需要,我认为有两种方法可以实现您的目标。

您可以让重组过程自行完成,然后在重组成功后丢弃整个数据包。这仅在重组后的数据包超过接口 MTU 时才有效(否则您将无法区分重组后的数据包和“正常”数据包)。如果无法成功重组数据包,它们无论如何都会被丢弃,但 CPU 开销会更大。

另一种方法是修改源代码,并忽略nf_defrag_ipv4您想要直接处理的协议的数据包。快速浏览一下,你会发现这应该可行,因为IP_NODEFRAGRAW 套接字已经有一个选项 ( ) 可用于绕过重组代码。

说实话,我也希望对过滤的这一部分有更多的控制权,所以我会尝试修补以补救这种情况。

答案2

我想知道您是否可以使用 netfilter“原始”表,该表位于大多数连接跟踪挂钩之前。它有一个“NOTRACK”目标,您可以使用它来免除某些数据包的 conntrack,或者条件-f本身也可以与一起使用--table raw

相关内容