webサイトで管理画面へのアクセスはIP制限を行いたい場合の方法メモ
経緯
料金等を考えずにALB + EC2で特定URLへのアクセス制限をしたい場合はAWS WAFを利用すれば良いのですが、コストの都合上などで使用しない方針になったのでEC2のapacheのconfigで制限を実施しました。
Apacheでのアクセス元IP制限について
ALBを挟まずにEC2のみでサイトを運用している場合はhttpd設定ファイルに
<Directory /xxx/yyy>
Require <IP adress>
</Directory>
の記載で対象サイトにアクセス元のIP制限をかけることができるのですが、ALBを挟んでいる場合はEC2と通信するのは常にALBとなるのでこの書式ではIP制限を行うことができません。
設定した内容
なので今回はX-Forwarded-Forヘッダの値を見て以下のような記述でアクセス制限をします。apacheの設定ファイルに記載します。
<Directory /xxx/yyy>
SetEnvIf X-Forwarded-For "^192\.168\.xxx\.xxx" allowed_ip
Require env allowed_ip
</Directory>
X-Forwarded-ForはクライアントやALB、CloudFrontなどの経由したサーバのIPアドレスが記録されるヘッダーなので、正規表現でここにアクセス元のIPがあるかどうかで許可を行なっています。
CloudFront + EC2などでもこの記載でアクセス制限可能ですね。