0.はじめに
AWS EC2 AMIMOTO で WordPress サイトを構築して、
CloudFront やら ALB やら AWS WAF を適用していたんですが、
- SSL 化済みの WordPress サイトに CloudFront を適用してみる - Qiita
- CloudFront 適用済みの WordPress サイトに ALB を適用してみる - Qiita
- CloudFront 適用済みの WordPress サイトに ALB を適用後、ALB - WordPress 間を HTTP(80番) で通信させてみる - Qiita
- CloudFront 適用済みの WordPress サイトに AWS WAF も適用してみる - Qiita
夜間に大量のアタックがあった際に、ウェブモニタリング (Site24x7 & StatusCake) からのアクセスも AWS WAF でブロックされてしまう事象が発生したので、以前対応した以下の記事を参考に、AWS WAF に設定を追加してみました。
因みに、ウェブモニタリングには、以下のサービビスを利用。
あと、こちらの記事も参考にさせて頂きました。
毎度のことながら、クラスメソッドさんには感謝ですね♪
ありがとうございました!
🙇♂️
1.CloudWatch Logs でのアクセスログの確認
- CloudWatch Logs にサーバーのアクセスログをエクスポートしているので、そちらでログを確認します。
- すると、以下の様なログが確認されましたので、User-Agent でのアクセス制御を行うことにします。
-
XXX.XXX.XXX.XXX _ - [21/Jun/2019:09:15:56 +0900] "GET / HTTP/1.1" 200 XXXXX "-" "Site24x7" "XXX.XXX.XXX.XXX, XXX.XXX.XXX.XXX" 0.XXX
XXX.XXX.XXX.XXX _ - [21/Jun/2019:10:35:48 +0900] "GET / HTTP/1.1" 200 XXXXX "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/98Safari/537.4 (StatusCake)" "XXX.XXX.XXX.XXX, XXX.XXX.XXX.XXX" XXX
-
2.String and regex match コンディションの作成
- 以下のページの手順を参考に、コンディションを作成します。
- ※各種設定
- Name : ※任意
- Region : Global (CloudFront) ※今回は、CloudFront の AWS WAF の設定なので
- Type : Regex match
- Part of the request to filter on : Header
- Header : User-Agent
- Transformation : None
- Regex patterns to match to request : Create regex pattern set
- 「Create pattern set and add filter」ボタンを押下するのを忘れないこと!!
- AWS WAFで特定のUser-Agentだけ通信できるサイトを構築 #reinvent | DevelopersIO
- ※各種設定
- 作成後の設定は、こんな感じ。
- Regex pattern sets の設定は、こんな感じ。
- Regex pattern strings
.*Site24x7.*
.*StatusCake.*
- ※ PCRE 形式の正規表現
- Regex pattern strings
3.新しくルールを作成し、作成した各コンディションの設定を追加
- 以下のページの手順を参考に、ルールを作成し、作成した各コンディションを設定します。
- ※各種設定
- Rule type : Regular rule
- Region : Global(CloudFront) ※今回は、CloudFront の AWS WAF の設定なので
- Add conditions
- When a request
- does
- match at least one of the filters in the string match condition
- 作成した String and regex match コンディション名
- When a request
- AWS WAFで特定のUser-Agentだけ通信できるサイトを構築 #reinvent | DevelopersIO
- ※各種設定
4.Web ACL に作成した新しいルールの設定を追加
- 以下のページの手順を参考に、ルールを作成し、作成した各コンディションを設定します。
- ※各種設定
- Order : 新しく作成したルール
- Rule type : Regular
- Action : Allow
- AWS WAFで特定のUser-Agentだけ通信できるサイトを構築 #reinvent | DevelopersIO
- ※各種設定
- 作成後の設定は、こんな感じ。
99.ハマりポイント
- 今回は、それ程ハマったところは無かったんですが…。
- PCRE 形式の正規表現 にちょっと慣れていなく、その辺がちょっと手間取りました。
XX.まとめ
ご参考になれば♪