Cloudflare を導入したことによって JavaScript を使わないエージェントなどからのアクセスも解析できるようになったのだけどイベントを見てると見たこと無いエージェントのものがありました。
イベントを JSON としてダウンロードしたものを記載します(一部の識別情報は秘匿しています)。
{ "action": "managed_challenge", "clientASNDescription": "GOOGLE-CLOUD-PLATFORM", "clientAsn": "396982", "clientCountryName": "US", "clientIP": "0.0.0.0", "clientRequestHTTPHost": "hobby.mattintosh-note.jp", "clientRequestHTTPMethodName": "GET", "clientRequestHTTPProtocol": "HTTP/1.1", "clientRequestPath": "/", "clientRequestQuery": "", "datetime": "2024-06-04T16:59:37Z", "rayName": "0000000000000000", "ref": "", "ruleId": "00000000000000000000000000000000", "rulesetId": "00000000000000000000000000000000", "source": "firewallCustom", "userAgent": "Hatena-Favicon/2 (https://www.hatena.ne.jp/faq/)", "matchIndex": 0, "metadata": [ { "key": "ruleset_version", "value": "14" }, { "key": "version", "value": "5" }, { "key": "type", "value": "customer" }, { "key": "js_detection", "value": "MISSING" } ], "sampleInterval": 1 }
気になったのはこれ。
Hatena-Favicon/2 (https://www.hatena.ne.jp/faq/)
調べてみるとページの Favicon を特定するエージェントだそう。他にもいくつかはてなのエージェントがあるらしい。
はてなブログのクローラーもいるらしい。タイトルやブログカードの取得に使用しているとのこと。
というわけで WAF の条件からこれらをマネージドチャレンジから除外する設定を追加する。
Cloudflare の式は下記の通り。(わかりやすく改行して書いても登録時に改行無しに変換されるっぽい)
(http.user_agent eq "Hatena-Favicon/2 (https://www.hatena.ne.jp/faq/)") or (http.user_agent eq "Hatena::Scissors/0.01") or (http.user_agent eq "HatenaBookmark/4.0 (Hatena::Bookmark; Analyzer)") or (http.user_agent eq "HatenaBookmark/0.03 (Hatena::Bookmark; master;) Furl/3.13") or (http.user_agent eq "HatenaBookmark/4.0") or (http.user_agent eq "Hatena Star UserAgent/2") or (http.user_agent eq "Hatena Antenna/2 (https://a.hatena.ne.jp/help; alpha)") or (http.user_agent eq "HatenaBlog-bot/0.02 (+https://help.hatenablog.com/entry/about-hatenablogbot)")
設定後にこれらのエージェントに対して WAF の処理がスキップされていることを確認。エージェントには AWS か GCP を使っているみたい。