セキュリティの都合上詳しくは書けないのですが別館の Cloudflare WAF で使っているルールをこちらのはてなブログでも使えるようにしました。
ルートとしてはこんな感じで Workers を呼び出しています。

Workers に到達するまでにどこかでブロックされると閲覧できないようにします。一応これで IP だけでなく国や ASN といった制限も使えるようになっている…はず。
Workers デフォルトのエンドポイントはそのままだとめちゃくちゃ攻撃されるので無効にしてルートを追加しておきます。

外部からの呼び出しは制限がかかるのでコードの方で Access-Control-Allow-Origin を使って許可しておきます。
/** * Welcome to Cloudflare Workers! This is your first worker. * * - Run "npm run dev" in your terminal to start a development server * - Open a browser tab at http://localhost:8787/ to see your worker in action * - Run "npm run deploy" to publish your worker * * Learn more at https://developers.cloudflare.com/workers/ */ export default { async fetch(request, env, ctx) { return new Response(null, { headers: { 'Access-Control-Allow-Origin': 'https://mattintosh-note.jp', 'Access-Control-Allow-Methods': 'GET', } }); }, };
free プランだと一日あたり 100,000 リクエストまでみたいですがそこまで PV が多いわけではないので特に問題ないでしょう(ちなみに超えた場合は全部アクセス制限扱いになります)。
最初ははてなブログだけでなんとかしようと思ったのですがアクセス制限のルールをこっちと別館バラバラで管理するの面倒くさい…となりこんな構成に。
とりあえずこれで 2、3 日様子を見ます。