ApacheとTomcatで訪問者のIPアドレスを正しく検出する方法

パソコン
スポンサーリンク

メタディスクリプション

Apache単独運用と、ApacheからTomcatへのプロキシ構成における「訪問者IP検出方法」を解説。REMOTE_ADDR だけでは不十分なケースや、mod_remoteip・RemoteIpValveの導入ポイントを紹介します。


はじめに

アクセスログやセキュリティ対策のためには、訪問者の 正しいIPアドレス を取得することが重要です。
しかし、リバースプロキシやアプリケーションサーバ(Tomcat)を挟む構成では、そのままではプロキシサーバのIPしか取得できないケースがあります。

この記事では、Apache単独の場合Apache→Tomcatの場合に分けて、正しいIP検出方法を解説します。


1. Apache単独運用の場合

  • バーチャルホストで直接リクエストを受けている場合は、REMOTE_ADDR がそのまま訪問者のIPになります。
  • このケースでは特別な設定は不要で、追加のヘッダを信頼する必要もありません。

2. Apache → Tomcat プロキシ構成の場合

  • ApacheがフロントでTomcatに中継する構成では、Tomcat側から見るとREMOTE_ADDRはApacheのIPになります。
  • このままでは正しい訪問者のIPが記録されないため、Apacheで mod_remoteip を有効にし、X-Forwarded-For を信頼する設定を入れるのが一般的です。

Apacheの例

RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 127.0.0.1
LogFormat "%a %l %u %t \"%r\" %>s %b" vhost_with_realip
CustomLog logs/access.log vhost_with_realip
  • RemoteIPInternalProxy に「信頼するプロキシ」を指定することで、不正なヘッダ偽装を防ぎます。
  • %a を使うと置換後のクライアントIPがログに記録されます。

3. Tomcat単独運用の場合

将来的にTomcatを直接公開する場合は、server.xmlRemoteIpValve を追加することで同様の効果が得られます。

<Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="x-forwarded-for" protocolHeader="x-forwarded-proto" internalProxies="127\.0\.0\.1" />
  • internalProxies に信頼できるプロキシを指定するのが安全です。
  • Tomcatのログでは %a を使うと適用後のクライアントIPが表示されます。

4. 注意点

  • 直受けのApacheには不要REMOTE_ADDRだけで十分。余計なヘッダを信頼すると偽装リスクが高まります。
  • プロキシ経由の場合のみ設定:mod_remoteipやRemoteIpValveを使う。
  • 信頼できるプロキシを限定:安全に運用するために必須です。

まとめ

  • Apache単独REMOTE_ADDR をそのまま利用。
  • Apache→Tomcat → mod_remoteip で X-Forwarded-For を解釈。
  • Tomcat単独 → RemoteIpValve を導入。
  • 共通の注意点 → 信頼プロキシを限定すること。

このように環境ごとに適切なヘッダ処理を導入することで、正しい訪問者IPをログに記録し、セキュリティ対策やアクセス解析に役立てることができます。