...pudding - diary


2020-02-10

_ [Software] CentOS7 の Apache2.4 で X-Forwarded-For を REMOTE_ADDR にする

WEBサーバとクライアントの間にロードバランサやプロキシがいたりして、ログに記録されるクライアントIPアドレスがロードバランサやプロキシのIPアドレスになってとっても不便ということがある。

ログだけでなく、クライアントのIPアドレスによってコンテンツアクセスの制御をしたいときも、クライアントのIPアドレスが一律ロードバランサやプロキシのIPアドレスになってしまって不便である。

そんなときは X-Forwarded-For に入っているアドレスを REMOTE_ADDR に転記してくれるモジュール mod_remoteip を使えば良い。

CentOS7 の Apache2.4 であれば、mod_remoteip が組み込まれているので何も考えずに httpd.conf に 以下のようなことを書いておけば良い。

RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 192.168.0.1 #ロードバランサやプロキシのIPアドレス

RemoteIPInternalProxy に記載したIPアドレスから来たリクエストのみ X-Forwarded-For のアドレスを REMOTE_ADDR に転記するようになる。このとき元のリクエストに含まれていた X-Forwarded-For は消去される。

WEBアプリケーション側から見れば、X-Forwarded-For のないリクエストに見える。よってクライアントIPアドレスで制御し放題である。

Apache のログに記録したい場合は、%h (リモートホスト名) ではなく %a (アクセス元IPアドレス) で記録するよう設定を変更しておく。


2020年
2月
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
Twitter : @moriya_jp