web-dev-qa-db-ja.com

iptablesはhttpトラフィックを私のSquidプロキシにリダイレクトしません!

一部のWebサイトをブロックするために、localhostのポート3128をリッスンする透明なSquidプロキシを配置しました。

Firefoxを使用してプロキシをテストしましたが、動作します。

次に、すべてのhttp要求をプロキシにリダイレクトすることを期待して、これを実行しました。

Sudo iptables -t nat -A PREROUTING -p tcp -j REDIRECT --to-ports 3128

悲しいことに、何も起こりません。私のシステムの他のブラウザはプロキシを使用していないようです。プロキシを使用するために、各ブラウザーを構成する必要もありません。

Sudo iptables -Lは、ルールが割り当てられていないことを示します。

Ubuntu 13.04を使用していますが、3G USBモデム(ppp0)を使用してインターネットに接続しています。アドバイスをいただければ幸いです!

7
Naveen

宛先ポートが欠落していると思うので、以下を試してください

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3128

dportを使用しない場合、宛先ポート3128のトラフィックをローカルポート3128に転送します。宛先ポート80のトラフィックをローカルポート3128に転送します。

さらに、natルールを表示するには、次を使用します

iptables -t nat -L

ただし、事前ルーティングチェーンは、リモートクライアント。ローカルで生成されたパケットに対しては何もしません。したがって、システムから出力されるローカルで生成されたパケットには、OUTPUTチェーンを使用する必要があります。

代わりに以下を試してください

iptables -t nat -A OUTPUT -p tcp -m owner ! --uid-owner proxy --dport 80 -j REDIRECT --to-port 3128

proxyユーザーが所有するプロセス以外のプロセスのトラフィックのみをリダイレクトします。

-m owner ! --uid-owner proxyがないと、ルールがプロキシサーバーの送信トラフィックもキャッチし、ループになってしまうため、機能しません。

12
John Siu