Iptablesを使用すると、次のルールで断片化されたパケットをブロックできます。
iptables -A INPUT -f -j DROP
しかし、nftablesには同等のものはありません。それを行う方法はありますか?
Nftables Wiki または単に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パーツは フック優先度-4 で登録され、すべてのフラグメントを再構築します。つまり、その後の処理ではフラグメントは表示されません。したがって、チェーンはそれよりも低い優先度の値でフックする必要があります。これが完全な実例です:
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
に置き換える必要があるかもしれません。
試してください:
iptables-translate -A INPUT -f -j DROP
結果:
nft add rule ip filter INPUT ip frag-off != 0 counter drop
iptables-comme from(debian Debian 4.9.82-1 + deb9u3(2018-03-02)x86_64 GNU/Linux:
apt install iptables-nftables-compat
https://wiki.nftables.org/wiki-nftables/index.php/Configure_chains#Base_chain_priority
またはnft 'ルールを追加inetfilter input ip frag-off 0x4000 counter accept'