AWS WAFで特定のIP以外からのログイン制御-Wordpressログイン-

今回はAWS WAFを利用し、ログインの制御を行います。

具体的な要件としては特定のユーザ名(今回は「admin」)でログインを行おうとする場合は、
特定のIP以外からのログインは拒否する設定を試してみようと思います。

 

目次

AWS WAF
条件の作成
ルールの作成
Web ACLの作成
動作確認

 

AWS WAF

AWS WAFは名前の通り、アプリケーションを様々な攻撃から守る
AWSウェブアプリケーションファイヤーウォールのサービスです。

WAFなのでSQLインジェクションからクロスサイトスクリプティング等から
リソースを守るルールを作成出来ますが、今回はIP一致条件、
及び文字列一致条件を設定します。

また、AWS WAFはApplication Load Balancer、もしくはCloudFrontと紐づける事が出来ます。

今回はCloudFront経由でWordPressサイトにアクセスする環境で試してみましょう。

 

条件の作成

まずはAWS WAFで下記条件を作成します。

・特定のIPからのアクセス

AWS WAFのコンソールからIP addresses→Create conditionから自社IPの条件を登録

 

AWS WAFのコンソール

 

・特定のURIへのアクセス(ログインページ)

AWS WAFのコンソールからString and regex matching→Create conditionからログインURIをフィルタ

Create conditionからログインURIをフィルタ

 

・特定のリクエストボディの文字列(ログインユーザー名)

AWS WAFのコンソールからString and regex matching→Create conditionからリクエストボディのユーザ名をフィルタ

AWS WAFのコンソールからString and regex matching

 

今回はテストでWordpressのログイン画面を使うのでURIは/wp-login.php、リクエストボディはlog=adminを指定しました。
また、regexでもフィルタする事も可能です。

 

ルールの作成

次にこれらの条件を含めたルールを作ります。
ルールはAWS WAFコンソールのRules→Create ruleから作成します。

先程作成した条件を追加していきましょう。

条件で記載したIPアドレス以外からのアクセスを拒否したいのでIP制限の条件はWhen a request  "does not"
他二つはWhen a request "does"で追加します。

 

IP制限の条件

 

Web ACLの作成

 

ルールを作成したらCloudFrontに紐づけるWeb ACLを作成しましょう。
AWS WAF コンソールよりWeb ACLs→Create web ACLで作成です。

AWS resource to associateに紐づけたいCloudFrontを選びます。

 

 

Web ACLs→Create web ACL

 

後は先程作成したルールを追加し、ルールにマッチしない場合は許可(Allow all requests that don't match any rules)
を選択し作成します。

AWS WAF ルールを追加

 

動作確認

設定し終わりましたら、実際にブロックされるか確認してみましょう。 まずは自社IPからadminユーザーでログインしてみます。

 

AWS WAF 動作確認

 

AWS WAF 動作確認

 

ログイン出来ますね。
では自社IP以外で試してみますと……

 

<img src="https://cdn-ak.f.st-hatena.com/images/fotolife/c/crosspower/20230228/20230228054230.jpg" alt="AWS WAF 動作確認 エラー" width="696" height="238" />

 

拒否されましたね!admin以外のユーザーでログインを試した場合は無事ログイン出来ます。

 

AWS WAF ログイン

 

 

今回は試しにAWS WAFで簡単にルールを使いログインの制限を行いましたが、
制御するリソースやルールを増やしたり、大手セキュリティー会社が提供している
マネージドルール等の付与も安価で行えるので、是非一度お試しください!

 

 

AWS相談会