web-dev-qa-db-ja.com

Linuxでiptablesを使用してhttpおよびhttpsトラフィックを透過プロキシに転送する方法

私は、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全体を検索してきましたが、機能する例を見つけることができませんでした。これを行う効率的な方法はありますか?

11
ajt
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to 9090

HTTPSは透過プロキシでは使用できません。いくつかのハックがありますが、それは意味がなく、役に立たないです。

16
Diego Woitasen
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

どこ:

  • squid-box:squidサーバー
  • local-network:あなたのネットワーク(私の場合は192.168.0.0/24)
  • iptables-box:iptablesソフトウェアが存在する場所(通常はゲートウェイ、私の場合は192.168.1.1)

最初のものは、iptables-boxからsquid-boxにパケットを送信します。 2番目は、クライアントに直接ではなく、iptables-boxを介して返信が返されることを確認します(これは非常に重要です)。最後のものは、iptables-boxが適切なパケットをsquid-boxに転送することを確認します。必要ないかもしれません。 YMMV。 「-i eth0」を指定し、次に「-o eth0」を指定したことに注意してください。これは、入力インターフェースeth0および出力インターフェースeth0を表します。パケットが別のインターフェイスに出入りする場合は、それに応じてコマンドを調整する必要があります。

これらのコマンドを/etc/rc.d/の下の適切な起動スクリプトに追加します

FROM: http://www.tldp.org/HOWTO/TransparentProxy-6.html

1
Fabrizio