conntrack
がアクティブな場合、iptablesスタックはフラグメント化されたIPパケットを認識せず、再構築されたもの( source )のみを認識します。したがって、-f
テストは一致しません。
フラグメントをブロックしたい場合は、ipfrag_high_thresh
またはipfrag_time
を0( source )に設定できますが、それではあらゆる種類のフラグメントが削除されます。特定のIPプロトコルのフラグメントを削除したい場合にできることはありますか?
私はあなたのニーズに応じて、あなたの目標を達成するための2つの方法を見ています。
再組み立てにコースを実行させ、再組み立てが成功した後、パケット全体をドロップできます。これは、再構成されたパケットがインターフェイスMTUを介している場合にのみ機能します(そうでない場合、再構成されたパケットと「通常の」パケットを区別できません)。パケットを正常に再構築できない場合でも、パケットはドロップされますが、CPUのオーバーヘッドが大きくなります。
もう1つの方法は、ソースを変更し、nf_defrag_ipv4
に直接処理するプロトコルからのパケットを無視させることです。再組み立てコードをバイパスできるRAWソケット用のオプション(IP_NODEFRAG
)がすでにあるため、一目見ればこれでうまくいくはずです。
正直なところ、私もフィルタリングのこの部分をもっと制御したいので、状況を改善するためにパッチを適用しようと思います。
ほとんどの接続追跡フックの前にあるnetfilter「raw」テーブルを使用できるかどうか疑問に思います。 conntrackから特定のパケットを免除するために使用できる「NOTRACK」ターゲットがあります。または、おそらく-f
条件自体が--table raw
で機能します。