質問: ### 前提・実現したいこと AWSのプライベートサブネットにELB(CLB)を置き、その配下で複数のプロキシサーバとしてSquidを稼働させています。 Squidのアクセスログに、ユーザーのIPアドレスが記録されるようにしたいです。 ### 発生している問題 ELBを経由するため、アクセスログに記載されるIPアドレスはELBのIPアドレスが記載されてしまいます。 ※アクセスログに問題があるだけで、Squidを経由した接続自体はできています。 ### 試したこと * /etc/squid/squid.confに下記の設定を追記 ``` logformat combined %{X-Forwarded-For}>h (%>a) %ui %un [%tl] "%rm %ru HTTP/%rv" %>Hs %h" "%{User-Agent}>h" %Ss:%Sh access_log /var/log/squid/access.log combined ``` ### 試したことの結果 * Squidサーバ自身から、X-Forwarded-Forヘッダを付与して、自分自身にcurlを実行 > 意図した通り、X-Forwarded-Forヘッダが取得できている ``` # curl -H 'X-Forwarded-For:192.168.0.1' --verbose https://www.google.com -x http://127.0.0.1:8080 > /dev/null ---(アクセスログ)--- 192.168.0.1 (127.0.0.1) - - [01/Jul/2019:02:17:16 +0000] "CONNECT www.google.com:443 HTTP/1.1" 200 16257 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.15.3 zlib/1.2.3 libidn/1.18 libssh2/1.4.2" TCP_MISS:DIRECT ``` * Squidサーバ自身から、X-Forwarded-Forヘッダを付与して、ELBにcurlを実行 > X-Forwarded-Forヘッダが取得できない ``` # curl --verbose https://www.google.com -x http://squid-elb-XXXXXXXXX.ap-northeast-1.elb.amazonaws.com:8080 > /dev/null ---(アクセスログ)--- - (172.30.0.209) - - [01/Jul/2019:02:18:17 +0000] "CONNECT www.google.com:443 HTTP/1.1" 200 16257 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.15.3 zlib/1.2.3 libidn/1.18 libssh2/1.4.2" TCP_MISS:DIRECT ``` * Squidサーバとは別のサーバから、X-Forwarded-Forヘッダを付与して、Squidサーバに直接curlを実行 > X-Forwarded-Forヘッダが取得できない ``` $ curl -H 'X-Forwarded-For:192.168.0.2' --verbose https://www.google.com -x http://X.Y.Z.1:8080 > /dev/null ---(アクセスログ)--- - (x.y.z.100) - - [01/Jul/2019:04:06:32 +0000] "CONNECT www.google.com:443 HTTP/1.1" 200 16102 "-" "curl/7.52.1" TCP_MISS:DIRECT ``` ### 補足情報 * SquidサーバのOSはCentOS 6.5を使用 * Squid自体はyumでsquid-3.1.23をインストール
回答: CLB, squid 両方で ProxyProtocol を有効にする、もしくは、NLB を使うといいと思います。