Apache2.2系でmod_remoteipを使うには

Apache2.4系であれば、デフォルトで組み込まれているmod_remoteipですがApache2.2系で使う方法をご紹介します。

どんなときに"mod_remoteip"を使うのか

LB(ロードバランサー)やWAF、CDNだったりが最近はリバースプロキシ型が多くクライアント端末との通信がApacheまで直接行われない環境において役に立ちます。

具体的に言うと

リバースプロキシでは大体が、接続元のIPアドレスをX-Forwarded-ForというHTTPヘッダに格納してくれるのでこれをApache内部でうまく送信元IPとして書き換えてくれるモジュールです。

仕様

ここで、使用したサーバ環境は以下のような感じです。

OS Apache
CentOS release 6.9 64bit httpd-2.2.15-60.el6.centos.6.x86_64

インストール作業

Apacheのバージョンが2.2系であることを確認します

ないとは思いますが、mod_remoteipが既に組み込まれていないか確認します

  • remoteip_moduleが表示された場合、既に組み込まれています

作業にあたって必要なライブラリやパッケージをインストールします

  • 必要なものが足らないとインストール時にエラーとなります

githubに掲載されているmod_remoteipのソースをクローンします

先ほどのソースをコンパイルしてからインストールします

  • このときに、足らないものがあればエラーとなります

初期の設定ファイルをコピーします

先ほどのモジュールが組み込まれたことを確認します

  • remoteip_moduleがあるので成功です

設定ファイルについて確認します

  • RemoteIPHeader・・・
    送信元IPの書き換えに使う、HTTPヘッダ名を定義します。
    ※通常は、X-Forwarded-Forのままで問題ないですが、一部CDNとWAFの多段構成だったりするとX-Forwarded-For2にする必要があるかもしれません。

  • RemoteIPInternalProxy・・・
    送信元IPの書き換えを行うにあたって、信頼できるホストのIPアドレスを定義します。
    ※例えば、悪意のある人がX-Forwarded-Forに適当なIPアドレスを記載されるとそれに置き換えてします可能性があるので送信元IPが限定されているWAFなどを利用する場合は設定するようにしましょう。
    どうしても、WAFのIPなどがわからない場合は、この設定項目は消してください。

参考サイトを見ていただくと更なる設定項目について紹介されています。

デフォルトのLogFormatを書き換えします

デフォルトのLogFormatで用いられている%hでは、書き換えられたIPアドレスが記録されないので%aに書き換えます。

余談

他にも、.htaccessなどで使われる
REMOTE_HOSTは書き換えられないがREMOTE_ADDRは書き換えられるなど少し配慮も必要

Apacheの再起動を実施します

Avatar photo

SNOWSKI

大阪にあるどこかのIT会社で働いております / もしかするとあなたのそばにいるかもね...