根据数据包的选项或类型删除数据包

根据数据包的选项或类型删除数据包

出于测试原因,我想根据特定数据包的选项或类型来阻止它们。

例如,在 DHCP DORA 事务中,我只想阻止 DHCP ACK 数据包。

是否可以使用 iptables 来做到这一点?如果不是,有哪些可能性?

答案1

您可以使用该u32模块。 (参见联机帮助页iptables-extensions)。它不太用户友好,但应该可用。

DHCP 解析起来有点困难,因为部分数据(包括 DHCP 消息类型)位于选项中,并且可以采用任意顺序。尽管消息类型选项可能是第一个。

DHCP 选项从 UDP 数据包中的偏移量 236 开始,IP 和 UDP 标头的长度为 20+8 字节。因此,我们对从偏移量 264 开始的字节感兴趣。前四个字节应该是魔术标识符,接下来的三个字节可以检查消息类型选项。类型代码是0x35,长度始终是0x01DHCPACK值是0x05。 (这DHCP 数据包格式在 tcpipguide.com 上有描述

所以 的表达式u32可以是:

--u32 '268 >> 8 = 0x350105'

这只是意味着读取偏移量 268 处的 4 个字节(作为大端数字),将它们向右移动 8 位(以保留前三个字节),然后将其与预期值进行比较。

我们也可以检查幻数:

--u32 '264 = 0x63825363 && 268 >> 8 = 0x350105'

使用常规规则更容易检查我们是否确实有一个 UDP 数据包发送到正确的端口iptables,因此我们将使用类似以下内容来匹配预期的 DHCP 数据包。

iptables -A foo -m udp --dport bootpc -m u32 --u32 '264 = 0x63825363 && 268 >> 8 = 0x350105'

不过,如前所述,DHCP 选项可以按任何顺序排列,因此这不是一个可靠的方法,尤其是当有人积极尝试解决它时。但也许对于测试来说它可以。另外,我假设 IP 标头不包含任何选项。

相关内容