質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.53%
Squid

Squidは、TCP/IPネットワークでのユーザーとサーバの通信を中継するオープンソースのプロキシサーバソフト。リバースプロキシやキャッシュサーバとして使用することも可能です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

9086閲覧

Squidのアクセスログにアクセス元のIPアドレスを記載したい

yu_ry

総合スコア13

Squid

Squidは、TCP/IPネットワークでのユーザーとサーバの通信を中継するオープンソースのプロキシサーバソフト。リバースプロキシやキャッシュサーバとして使用することも可能です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2019/07/01 04:17

前提・実現したいこと

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 %<st "%{Referer}>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をインストール

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

CLB, squid 両方で ProxyProtocol を有効にする、もしくは、NLB を使うといいと思います。

投稿2019/07/01 05:03

TaichiYanagiya

総合スコア12139

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yu_ry

2019/07/01 08:38 編集

ご回答、ありがとうございます。 CLBのProxy Protocol有効化については公式の資料にありましたので、対応できそうです。 https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/classic/enable-proxy-protocol.html#enable-proxy-protocol-cli しかしながら、Squid側のProxy Protocol有効化については、参考にした下記[1]の有効化設定に対応しているのがSquidのVer3.5以降(下記の[2]より)であるように思われましたので、少なくてもSquidのバージョンアップが必要であると考えています。 [1] http://blog.serverworks.co.jp/tech/2018/04/13/clb-proxyprotocol/ [2] http://www.squid-cache.org/Doc/config/proxy_protocol_access/ Squid Ver3.1+CLBという構成を変えずに実装する他の方法があればご教授ください。
yu_ry

2019/07/02 00:16 編集

追加質問については、自己解決しました。 ・ フロントエンド接続とバックエンド接続の両方にTCPを指定すると、   CLBはリクエストヘッダーを変更しない。 ・ Proxy ProtocolはL4におけるx-forwarded-forみたいなもの。 ・ Squidの3.1ではProxy Protocolが扱えない。 なので、『CLB, squid 両方で ProxyProtocol を有効にする』 [1] http://www.mpon.me/entry/2017/04/22/024650 また… ・ NLB+インスタンスタイプのターゲットグループとすることで、クライアントのIPアドレスが   バックエンドのインスタンスに直接伝わる なので、『NLB を使う』 [2] https://dev.classmethod.jp/cloud/nlb-source-ip-security-group-considerations/ というご回答ということですね。いくつか、他のサイトを見て、腹落ちしました。 質問させて頂いた本番環境はVPCピアリングでスター型に構成された中央のVPCにSquidを配置しているのですが、NLBだとVPCピアリング越しに使えないということもわかりましたので、CLB、Squidの両方でProxyProtocolを有効にする以外、選択肢がなさそうです。 [3] https://dev.classmethod.jp/cloud/aws/nlb-access-via-vpc-peering/
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.53%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問