私はローカルで生成されたパケットが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ヘッダーを変更しないでください。