使用 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 计数器接受’