- blogs:
- cles::blog

リバースプロキシ経由のアクセス元IPを書き換える

Reverse Proxy の裏側にウェブサーバをたてると、クライアントからのアクセスがあったときの REMOTE_ADDR が Reverse Proxy のアドレスになってしまうので、アクセスログをそのままログ分析することができないという状況になります。Proxy に変な手を入れていない限り、Proxy からのリクエストにはオリジナルのアクセス元を表す X-Forwarded-Fo r ヘッダがついてるので、REMOTE_ADDR の代わりに X-Forwarded-Fo r ヘッダの内容をログに記録してやればよいことになります。
具体的なやり方は2つあって、1つはログの出力を変えてしまう方法、もう一つはApacheに専用のモジュールを入れる方法です。
† ログの出力を変更する方法
単にログの表記上の問題であれば、最初の方法が一番簡単でデフォルトのログのフォーマット(おそらくcombined)の%hを%{X-Forwarded-For}iに書き換えるだけで対応可能です。このあたりは以前にクライアント証明書のDNをログに残すところでつかったのと同じ方法です。
/etc/httpd/conf/httpd.conf の該当部分を書き換え
↓
† mod_extract_forwardedを導入する方法
上記の方法は、REMOTE_ADDRを使ってアクセス制御していたり、呼び出されるプログラムでREMOTE_ADDRを使っていたりするとその部分がうまく動かないという問題が起こります。プログラムをHTTP_X_FORWARDED_FORに対応させるというのもアリですが、通常はREMOTE_ADDRを書き換えてくれるモジュールを入れた方が対応が楽だろうと思います。今回はmod_extract_forwarded*1というモジュールを使ってみました。EPELが使えるようになっていれば、yumで一撃でインストールできました。
あとは、設定ファイルにproxyサーバのIPアドレスを入れて、httpdを再起動すればOKです。
/etc/httpd/conf.d/mod_extract_forwarded.conf に下記の行を追加
† 2015/10/20 追記
上記は Apache 2.2 の場合にのみ有効です。
CentOS 7.x (Apache 2.4.x)の場合には mod_extract_forwarded_for_2.4 を使う必要があります。
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/3499
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
2 . Windows 10 で勝手にログアウトされないようにする(31145)
3 . Word で数式がグレーアウトされていて挿入できないときは(26602)
4 . リモートデスクトップで Alt + PrtSc と同じことをするには(22069)
5 . Visual Studio 2017/2019 で scanf() がエラー(C4996)になるときは(21371)