ローカルで生成されたパケットがPREROUTINGチェーンを通過する方法は?

ローカルで生成されたパケットがPREROUTINGチェーンを通過する方法は?

私はローカルで生成されたパケットがPREROUTINGチェーンを通過するようにしたいと思います。

sudo iptables -t mangle -A PREROUTING -p tcp -d somewebsite.com -j TPROXY --on-port 32794

somewesite.comに向けられたすべてのパケット(ローカルプロセスによって生成された)をローカルポート32794にリダイレクトします。

多くの人が次のようにお勧めします。

sudo iptables -t nat -A OUTPUT -p tcp -d somewebsite.com -j REDIRECT --to-ports 32794

しかし、REDIRECT はデータパケットヘッダーを変更します。私はこれを避けようとしています。パケットヘッダーを変更しない唯一の宛先タイプであるTPROXYを使用する必要があります。

それでは、ローカルで生成されたパケットがPREROUTINGチェーンを通過するようにするにはどうすればよいですか?たぶんループバックを使用しますか?しかし、ループバックがパケットヘッダを変更しているかどうかはわかりません...

ベストアンサー1

iptablesは、チェーン内で見つけることができるルールセット(またはルールセット)です。チェーンはテーブルの中にあります。

あなたの場合はREDIRECT宛先を使用しましたが、これは実際にパケットを変更して宛先アドレスを変更するため、許可されない可能性があり、natほとんどの場合テーブルにバインドされます。

ターゲットはTPROXY同様の機能を提供し、mangleテーブルを使用します。 iptablesルールセットに次のルールを追加するだけです。

iptables -t mangle -A PREROUTING -p tcp -d your.ip.address.here --dport 80 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 32794 --on-ip=127.0.0.1

注:このフラグも使用しましたが、これによりTCPヘッダーを変更しないでください。

おすすめ記事