Apacheアクセス制御をロードバランサー配下でも

先日、クラウドのロードバランサー配下にあるApacheの環境においてアクセス元IPを制御する必要が出てきました。

仕様

ここでお話しするサーバ環境の仕様は
OSがCentOS7
ApacheがApache2.4
となります。

許可したいIPが192.0.2.1
ロードバランサーのIPが203.0.113.1

ロードバランサーの仕様としては、Apacheにたどり着く送信元IPをロードバランサーのIPに置き換えられるものです。
しかし、ロードバランサーまで着信するIPは、X-Forwarded-Forのヘッダーに格納されているものです。
※AWSのELBなどのロードバランサーはこの仕様が用いられています。

要件

要件としては、
http://example.com/testapiに対して特定のIPアドレス以外からのアクセスは遮断したいというものです。

設定内容

まず、ロードバランサーが組み込まれていない環境であれば

を設定することで192.0.2.1以外からのアクセスは403 Forbiddenとなり正常なアクセスはできなくなります。

では、ロードバランサーが組み込まれている環境に上記を設定するとどうなるでしょうか。

Apacheが評価できる送信元IPはロードバランサーのIPとなり192.0.2.1からアクセスしているにも関わらずロードバランサーを経由したアクセスでは403 Forbiddenとなり正常なアクセスはできなくなります。
※Apacheは、203.0.113.1からアクセスが来たと評価してしまいます。

解消方法

解消方法はないのでしょうか。

Apache 2.4から組み込まれているremoteip_moduleというモジュールを使うことで解消できます。

の設定はそのままで

の1行を追加することで、X-Forwarded-Forに格納されているIPを評価してくれるようになります。

備考

remoteip_moduleのモジュールが組み込まれているApacheなのか確認する方法

を実行しremoteip_module (shared)が含まれていればOKです。

Avatar photo

SNOWSKI

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