Squidプロキシを構成して、トラフィックの出口の一種のゲートウェイとして機能させています。これがデプロイされている環境には、ロードバランサーを介してリクエストを行うクライアントがあり、ロードバランサーはそれをsquidプロキシに送信します。元のクライアントIPを難読化しないために、ロードバランサーはプロキシプロトコルを使用します。 Squid(3.5+)はプロキシプロトコルを「サポート」し、ACLで使用できるようにします。プロキシプロトコルアクセスを許可するために私が見た動作構成は以下のとおりです。
acl localnet src 10.0.0.0/8
http_port 3128 require-proxy-header
http_port 3128
proxy_protocol_access allow localnet
ただし、これでは、dstdomainに基づいて後続のリクエストをフィルタリングすることはできません。私も試しました
acl allowed dstdomain .google.com
acl localnet src 10.0.0.0/8
http_port 3128 require-proxy-header
http_port 3128
proxy_protocol_access allow localnet allowed
しかし、これにより、curlリクエストがエラー53空のリクエストで返されます。私はもう試した
acl allowed dstdomain .google.com
http_port 3128 require-proxy-header
http_port 3128
proxy_protocol_access allow allowed
これは、真上のものと同じ動作をします。私も試しました
acl localnet src 10.0.0.0/8
http_port 3128 require-proxy-header
http_port 3128
proxy_protocol_access allow localnet
acl allowed dstdomain .google.com
http_access allow allowed
http_access deny all
そしてこれにより、すべてのトラフィックが許可されます。 (私もそれらの2つのブロックを交換しようとしましたが、同じ結果になりました。
何か不足していますか?誰かがドメインフィルタリングを可能にする作業構成を持っていますかそしてプロキシプロトコル?
これをさらに検討した後、構成を修正して機能させることができました。これは機能します:
acl localnet src 10.0.0.0/8
http_port 3128 require-proxy-header
http_port 3128
proxy_protocol_access allow localnet
acl allowed dstdomain .google.com .yahoo.com
http_access allow allowed
http_access deny all
以前にこれを試したことがありますが、上記のhttp_access deny all
で問題が発生していました。
Proxy_protocol_accessは、プロキシプロトコルを受け入れる場所を確立するだけです。リロード時にcache.logを見ると、proxy_protocol_accessでのdstdomainフィルタリングが実際には許可されていないことが示されているようです。
注:ルールは、構成に表示される順序で適用され、一致するものが適用されます。したがって、上記に拒否が表示された場合、要求は拒否されます。
構成ファイルのトラブルシューティングにdebug_options
、具体的にはdebug_options 3,28
を使用して、トラブルシューティング用に追加のログ情報を提供できます。 (詳細はこちら: http://wiki.squid-cache.org/KnowledgeBase/DebugSections )
http://www.squid-cache.org/Doc/config/proxy_protocol_access/