#はじめに
CloudFront→ALB→サーバー
という構築において、パス/admin/users.php
へのIPアドレスでのアクセス制限をする簡易な方法について説明します。
結論を言うと、ALBのリスナールールで送信元IPアドレスを判定し、アクセス制御
できます。
他の方法として、WAF
やサーバーのapacheやnginx
によるアクセス制御は、ありますが、WAFだとお金がかかる、サーバーだとSSH接続など手間がかかりますので、ALBのコンソールで設定できる方法が適切だと考えます。
ちなみにサーバーでのIP制限の方法も記事にまとめていますので、参考になればと思います。
#ALBのルール
以下のように設定しました。
送信元IPが111.111.111.111
の場合のみ、パスadmin/users.php
にアクセスできます。
リスナールールには、X-Forwarded-Forが111.111.111.111
としています。
#X-Forwarded-Forとは
X-Forwarded-For (XFF) ヘッダーは、 HTTP プロキシ又はロードバランサーを通過してウェブサーバーへ接続したクライアントの、送信元 IP アドレスを特定するために事実上の標準となっているヘッダーです。
クライアントとサーバーとの間でトラフィックに何かが介在すると、サーバーのアクセスログにはプロキシ又はロードバランサーのアドレスしか残りません。
クライアントの元 IP アドレスを記録するために、 X-Forwarded-For 要求ヘッダーが使用されます。
##今回X-Forwarded-For使用した理由
CloudFront
やALB
を通してサーバーにアクセスすると、サーバーから見た送信元IPは、ALB
のものになってしまいます。
同様に、ALB
から見たクライアントIPは、CloudFront
になってしまいます。
それを解決するために、HTTP HeaderのX-Forwarded-For
に送信元IP を記録して、サーバーやALB
ではその値を見ることで送信元IPを取得できるようになります。
#参考