一連のルールに基づいてネットワーク パケットのペイロードを変更できる Linux ユーティリティを探しています。理想的にはiptables
、netfilter
カーネル モジュールを使用しますが、それらは一般的なペイロード マングリングをサポートしていません。iptables
さまざまなヘッダーフィールド (アドレス、ポート、TOS など) を変更し、パケット内の任意のバイトに一致させることができますが、明らかにパケット内の任意のデータを変更することはできません。
効率性が懸念されるため、カーネル モジュールは大きなプラスになりますが、仕事を成し遂げる他のオプションを喜んで検討します。
アイデアをありがとう!
久々の更新:
このNFQUEUE
モジュールは、Robert Gamble が提案した QUEUE モジュールの最新の実装です。コードをカーネルではなくユーザースペースで実行できるようにするための安全ボーナスを備えた、かなり単純なように見えました。
サイズを変更せずにペイロードを変更するだけであれば、実装はほとんど簡単でした。iptables
その場合、 「関心のある」パケットを選択してNFQUEUE
ターゲットに送信するルールを定義します。からのパケットを検査し、NFQUEUE
必要に応じてデータを変更し、TCP および IP ヘッダーのチェックサムを再計算するコールバック関数を作成します。
ただし、私たちの使用例には、データ ストリームに追加の文字を挿入することが含まれます。これには、TCP ストリーム内の対応する SEQ/ACK 番号を増加させるというやや明白な副作用と、conntrack
NAT を完全に破壊するほどモジュールを混乱させるというそれほど明白ではない副作用があります。多くの調査、頭を悩ませ、実験を重ねた結果、最も適切な解決策は、これらの特定のパケット (テーブル NOTRACK
内のターゲットを含む) の接続追跡を無効にし、コールバックで処理することでした。raw
あなたのトマトと憎しみのメールを保存してください。ボンネットの下に入れることを誇りに思っているわけではありませんが、次の氷河期の前に信頼できる製品を顧客に届ける唯一の方法でした. そして、それは良い話です。しかし、私はあなたの心からの気持ちを本当に感謝し、共有します.
iptables
バージョン 2 では、コールバックといくつかのルールをカスタム NAT および/またはconntrack
ヘルパーに置き換えることで、新たに発見された啓発を活用します。今回の演習で、遭遇した問題を解決する netfilter アーキテクチャに有機的に適合するカーネル モジュールを作成するのに十分な経験が得られたと確信しています。