丢弃 nftables 中的碎片数据包

丢弃 nftables 中的碎片数据包

使用 iptables 是否可以通过以下规则阻止碎片数据包:

iptables -A INPUT -f -j DROP

但是 nftables 中没有等效方法。有什么办法吗?

答案1

Nftables 维基或者man nft你也可以使用ip frag-off。现在(经过几次尝试和错误)3 个标志(保留、DF、MF)包含在此值的 3 个最高位,必须从测试中排除,需要进行操作&。所以这样:

nft 'add rule ip filter input ip frag-off & 0x1fff != 0 drop'

會做這件事...

...但是当 nf_conntrack_ipv4 被加载时(几乎总是),其特定的 nf_defrag_ipv4 部分注册在钩子优先级 -400,并将重新组装所有片段。这意味着之后的任何处理都不会看到任何片段。因此,您的链必须使用低于该优先级的优先级值进行挂钩。这是一个完整的工作示例:

nft add table filter
nft 'add chain filter predefrag { type filter hook prerouting priority -450; }'
nft 'add rule ip filter predefrag ip frag-off & 0x1fff != 0 drop'

可以说,第一个数据包也是一个偏移量为 0 的片段,但设置了 MF。因此,也许0x1fff应该将其替换为0x3fff以捕获它。

答案2

尝试:

iptables-translate -A INPUT -f -j DROP

结果:

nft add rule ip filter INPUT ip frag-off != 0 counter drop

iptables-translate 来自(在 debian Debian 4.9.82-1+deb9u3(2018-03-02)x86_64 GNU/Linux 上:

apt 安装 iptables-nftables-compat

https://wiki.nftables.org/wiki-nftables/index.php/Configuring_chains#Base_chain_priority

或 nft‘添加规则 inet 过滤器输入 ip frag-off 0x4000 计数器接受’

相关内容