web-dev-qa-db-ja.com

特定のプロトコルのIPフラグメントをドロップする

conntrackがアクティブな場合、iptablesスタックはフラグメント化されたIPパケットを認識せず、再構築されたもの( source )のみを認識します。したがって、-fテストは一致しません。

フラグメントをブロックしたい場合は、ipfrag_high_threshまたはipfrag_timeを0( source )に設定できますが、それではあらゆる種類のフラグメントが削除されます。特定のIPプロトコルのフラグメントを削除したい場合にできることはありますか?

2
Lorenzo Pistone

私はあなたのニーズに応じて、あなたの目標を達成するための2つの方法を見ています。

再組み立てにコースを実行させ、再組み立てが成功した後、パケット全体をドロップできます。これは、再構成されたパケットがインターフェイスMTUを介している場合にのみ機能します(そうでない場合、再構成されたパケットと「通常の」パケットを区別できません)。パケットを正常に再構築できない場合でも、パケットはドロップされますが、CPUのオーバーヘッドが大きくなります。

もう1つの方法は、ソースを変更し、nf_defrag_ipv4に直接処理するプロトコルからのパケットを無視させることです。再組み立てコードをバイパスできるRAWソケット用のオプション(IP_NODEFRAG)がすでにあるため、一目見ればこれでうまくいくはずです。

正直なところ、私もフィルタリングのこの部分をもっと制御したいので、状況を改善するためにパッチを適用しようと思います。

2
Matyas Koszik

ほとんどの接続追跡フックの前にあるnetfilter「raw」テーブルを使用できるかどうか疑問に思います。 conntrackから特定のパケットを免除するために使用できる「NOTRACK」ターゲットがあります。または、おそらく-f条件自体が--table rawで機能します。

1
Steven K