web-dev-qa-db-ja.com

Squid 3.5:インターセプトモードでの転送ループの防止

ルーターとインターセプトHTTPsquidプロキシを別のマシンにセットアップしました。クライアントは、次の方法で(知識なしで)プロキシを使用する必要があります。

クライアント->ルーター(プロキシサーバーへのDNATing)->プロキシサーバー->ルーター->インターネット

プロキシサーバーに到着するリクエストには、次の属性があります。

  • 送信元IPアドレス:元のクライアントのIPアドレス
  • ソースポート:元のクライアントのポート
  • 宛先IPアドレス:プロキシサーバーのIPアドレス(192.168.4.50)
  • 宛先ポート:3380

残念ながら、squidはパケットをリクエストの宛先アドレス(プロキシサーバー自体)に転送しようとしており、無限ループを作成しているようです。 cache.logから取得:

2015/12/18 14:11:50 kid1| WARNING: Forwarding loop detected for:

代わりにDNS経由でHTTPリクエストのホスト名を解決し、デフォルトのHTTPポート80で解決されたIPアドレスにリクエストを転送するようにsquidを構成するにはどうすればよいですか?

追加情報:

DNATは、ルーター上のiptablesによって、次のルールで実行されます:iptables -t nat -A PRE_VS_PROXY -p tcp --dport 80 -j DNAT --to-destination 192.168.4.50:3380

access.logのエントリ例:

1450444309.741      0 192.168.4.50 TCP_MISS/403 4277 POST http://ocsp.digicert.com/ - HIER_NONE/- text/html
1450444309.742     46 192.168.4.46 TCP_MISS/403 4341 POST http://ocsp.digicert.com/ - ORIGINAL_DST/192.168.4.50 text/html

イカの効果的な構成:

http_access allow localhost manager
http_access deny manager

http_access deny to_localhost

cache deny all

http_access allow all
http_access deny all

http_port 3128
http_port 3380 intercept
http_port 3443 intercept

coredump_dir /var/squid/cache/squid
shutdown_lifetime 1 seconds

Tcpdumpを使用してDNSトラフィックを見ると、squidがHTTPリクエストを処理しているときに、実際には2つのDNSリクエストが行われていることがわかります。1つはHTTPリクエストのホスト名を解決するためのもので、もう1つはリクエストの宛先IPアドレスの逆ルックアップです。

3
Cybran

今日も同様の要件を満たしました。少し掘り下げてみると、これは脆弱性を防ぐためのSquidの機能のようです http://www.squid-cache.org/Advisories/SQUID-2011_1.txt

https://github.com/squid-cache/squid/blob/master/src/peer_select.cc#L287 からコードを読み取ります。インターセプトモードでのホストのDNSルックアップを意図的に回避します。

3
chuyee

http://lartc.org/lartc.html#LARTC.COOKBOOK.SQUID が出発点として適しています。

DNATをプロキシに送信せず、パケットをマークしてトラフィックをプロキシにルーティングします。プロキシからのトラフィックは別のインターフェースを使用します。このルーティングポリシーは適用されていません。

1
Devdas