私は、2つのインターフェースを備えたゲートウェイシステムとして機能するUbuntu Linuxシステムを持っています。 1つのインターフェイスはローカルネットワーク用で、1つのインターフェイスはインターネット用です。トラフィックをまったく問題なくルーティングできます。 2つのiptables
ルールを使用して、内部インターフェースからの送信トラフィックを転送します。
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
iptables --append FORWARD --in-interface eth1 -j ACCEPT
次に、eth1
インターフェースを介してネットワークを出ていくすべてのtcpポート80および443トラフィックをフィルタリングしてリダイレクトし、それをループバックインターフェースにあるプロキシサーバーに送信するiptables
ルールを作成する必要があります。 tcpポート9090。
私はSO全体を検索してきましたが、機能する例を見つけることができませんでした。これを行う効率的な方法はありますか?
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to 9090
HTTPSは透過プロキシでは使用できません。いくつかのハックがありますが、それは意味がなく、役に立たないです。
iptables -t nat -A PREROUTING -i eth0 -s ! squid-box -p tcp --dport 80 -j DNAT --to squid-box:3128
iptables -t nat -A POSTROUTING -o eth0 -s local-network -d squid-box -j SNAT --to iptables-box
iptables -A FORWARD -s local-network -d squid-box -i eth0 -o eth0 -p tcp --dport 3128 -j ACCEPT
どこ:
最初のものは、iptables-boxからsquid-boxにパケットを送信します。 2番目は、クライアントに直接ではなく、iptables-boxを介して返信が返されることを確認します(これは非常に重要です)。最後のものは、iptables-boxが適切なパケットをsquid-boxに転送することを確認します。必要ないかもしれません。 YMMV。 「-i eth0」を指定し、次に「-o eth0」を指定したことに注意してください。これは、入力インターフェースeth0および出力インターフェースeth0を表します。パケットが別のインターフェイスに出入りする場合は、それに応じてコマンドを調整する必要があります。
これらのコマンドを/etc/rc.d/の下の適切な起動スクリプトに追加します