CloudFront と AWS WAF 適用済みの WordPress (AMIMOTO) サイトで、ウェブモニタリング (Site24x7 & StatusCake) からのポーリングをブロックさせない様にしてみる

# ０．はじめに

AWS EC2 AMIMOTO で WordPress サイトを構築して、

* [AMIMOTO AMI を使って、WordPress を立ち上げて、接続先を RDS に変更してみる \- Qiita](https://qiita.com/kusokamayarou/items/58d550b82b960c321c3a)

CloudFront やら ALB やら AWS WAF を適用していたんですが、

* [SSL 化済みの WordPress サイトに CloudFront を適用してみる \- Qiita](https://qiita.com/kusokamayarou/items/21e4bcdaa7c8dd8523ab)
* [CloudFront 適用済みの WordPress サイトに ALB を適用してみる \- Qiita](https://qiita.com/kusokamayarou/items/1229bed12462eee48e68)
* [CloudFront 適用済みの WordPress サイトに ALB を適用後、ALB \- WordPress 間を HTTP\(80番\) で通信させてみる \- Qiita](https://qiita.com/kusokamayarou/items/edffa0f1159f60a2ce82)
* [CloudFront 適用済みの WordPress サイトに AWS WAF も適用してみる \- Qiita](https://qiita.com/kusokamayarou/items/099a97fc0edc493e22fb)

<br>

夜間に大量のアタックがあった際に、ウェブモニタリング (Site24x7 & StatusCake) からのアクセスも AWS WAF でブロックされてしまう事象が発生したので、以前対応した以下の記事を参考に、AWS WAF に設定を追加してみました。

* [CloudFront と AWS WAF 適用済みの WordPress \(AMIMOTO\) サイトで、海外からの特定 URL \(/wp\-login\.php & /wp\-cron\.php\) へのアクセスを制限してみる \- Qiita](https://qiita.com/kusokamayarou/items/5eea60f4ab87189763de)

<br>

因みに、ウェブモニタリングには、以下のサービビスを利用。

* [クラウド型Webサイト監視・サーバー監視ツール：Site24x7](https://www.site24x7.jp/)
* [Website Monitoring & Downtime Updates \| StatusCake](https://www.statuscake.com/)

<br>

あと、こちらの記事も参考にさせて頂きました。

* [AWS WAFで特定のUser\-Agentだけ通信できるサイトを構築 \#reinvent ｜ DevelopersIO](https://dev.classmethod.jp/cloud/aws/aws-waf-header-strict-reinvent/)

毎度のことながら、クラスメソッドさんには感謝ですね♪

ありがとうございました！

🙇‍♂️

# １．CloudWatch Logs でのアクセスログの確認
1. CloudWatch Logs にサーバーのアクセスログをエクスポートしているので、そちらでログを確認します。
<br><br>
1. すると、以下の様なログが確認されましたので、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`
<br><br>
    * `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`

# ２．String and regex match コンディションの作成
1. 以下のページの手順を参考に、コンディションを作成します。
    * ※各種設定
        * 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
        * <b><font color="red">「Create pattern set and add filter」ボタンを押下するのを忘れないこと!!</font></b>
    * [AWS WAFで特定のUser\-Agentだけ通信できるサイトを構築 \#reinvent ｜ DevelopersIO](https://dev.classmethod.jp/cloud/aws/aws-waf-header-strict-reinvent/)
1. 作成後の設定は、こんな感じ。
    * ![FireShot Capture 135 - AWS WAF - console.aws.amazon.com.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161939/103571dd-92a5-08b8-7d07-47a8ff16b7d7.jpeg)
1. Regex pattern sets の設定は、こんな感じ。
    * Regex pattern strings
        * `.*Site24x7.*`
        * `.*StatusCake.*`
        * ※ [PCRE 形式の正規表現](https://qualysguard.qualys.com/qwebhelp/jp/fo_portal/module_pc/policies/regular_expression_symbols.htm)
    * ![FireShot Capture 134 - AWS WAF - console.aws.amazon.com.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161939/d0f5ab6a-85a6-e897-4f02-25b96b648ef5.jpeg)

# ３．新しくルールを作成し、作成した各コンディションの設定を追加
1. 以下のページの手順を参考に、ルールを作成し、作成した各コンディションを設定します。
    * ※各種設定
        * 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 コンディション名
    * [AWS WAFで特定のUser\-Agentだけ通信できるサイトを構築 \#reinvent ｜ DevelopersIO](https://dev.classmethod.jp/cloud/aws/aws-waf-header-strict-reinvent/)
    * ![FireShot Capture 136 - AWS WAF - console.aws.amazon.com.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161939/e47aee3c-a3d0-52ff-f560-a67dfdbbd992.jpeg)

# ４．Web ACL に作成した新しいルールの設定を追加
1. 以下のページの手順を参考に、ルールを作成し、作成した各コンディションを設定します。
    * ※各種設定
        * Order : 新しく作成したルール
        * Rule type : Regular
        * Action : Allow
    * [AWS WAFで特定のUser\-Agentだけ通信できるサイトを構築 \#reinvent ｜ DevelopersIO](https://dev.classmethod.jp/cloud/aws/aws-waf-header-strict-reinvent/)
1. 作成後の設定は、こんな感じ。
    * ![FireShot Capture 137 - AWS WAF - console.aws.amazon.com.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/161939/cf2519ec-7f71-7cf3-8233-df3c3d1d3cb9.jpeg)

# ９９．ハマりポイント

* 今回は、それ程ハマったところは無かったんですが…。
<br><br>
* [PCRE 形式の正規表現](https://qualysguard.qualys.com/qwebhelp/jp/fo_portal/module_pc/policies/regular_expression_symbols.htm) にちょっと慣れていなく、その辺がちょっと手間取りました。

# ＸＸ．まとめ

ご参考になれば♪