Cloudflare を使ってはてなブログのアクセス制限などを行ってみました。
前々から画像の無断転載に困っていたので以前 AWS CloudFront と AWS WAF をはてなブログと組み合わせられないか試してみたことがありました。これはできるには出来たのですが恒久化は出来ませんでした。ブラウザとはてなブログの間に CloudFront を挟むには DNS を CloudFront に向けなくてはならないのですが、はてなブログが定期的に独自ドメインの DNS レコードをチェックしているようで一瞬は CloudFront 経由になるのですがしばらくすると独自ドメインが設定されていないと判断して無料ドメインに戻してしまうんですね。
しばらく仕方ないかと様子を見ていたのですが日に日に無断転載の量が増えていくんですね。私は自分の写真を Google で検索できるようにしているのですがほぼほぼフィッシングサイト(詐欺サイト)に画像を利用されています。次のスクショはすべて私の写真でフィッシングサイトへのリンクです。
ここから Google にフィードバックを送っても対応はしてくれません。正式な通報をするにしても自分の本名やら住所やらを用意しなければならないですし面倒くさい…。とは言え私の写真からフィッシングサイトに引っかかってしまう人が出るのは嫌だなと何かしらの対策はしなければならないと思っていたのですが、はてなブログには IP 制限をするといった機能はありません。はてなフォトライフもアルバムは非公開に出来ますが恐らくブログからの画像呼び出しのためか URL を直接指定すれば参照可能です。
今回 Cloudflare を使う機会が出てきたので Cloudflare でなんとか出来ないかと試してみたところなんとか出来そうだったので備忘録として残しておきます。
前提条件ですがはてなブログで独自ドメインを使用している場合に限ります。Cloudflare は Free プランで問題ありません。
Cloudflare の SSL でモードを「フル」にしておきます。フレキシブルだと恐らくはてなブログが HTTP だと誤認するため無限ループしてしまいます。
設定が出来たら DNS のレコードを設定していきます。はてなブログで独自ドメインを使用するときは下記の 2 つの IP を A レコードで登録することになっています(ネイキッドドメインの場合は)。
- 13.115.18.61
- 13.230.115.161
www
のレコードはもともと使用していなかったのですが Cloudflare のセットアップで必要になるようなので @
と同様に登録しておきます。
※このあと www
なしにリダイレクトするため www
は 192.0.2.1
(TEST-NET-1)などのテストネットワーク用アドレスに設定しておくのが良さそうです。
準備が出来たらネームサーバーを Cloudflare のものに切り替えます。
www 有りから無しへのリダイレクト
これはうちがネイキッドドメインを独自ドメインに設定しているためすべての人が適用するわけではありません。
Cloudflare のリダイレクトに関するドキュメントを探すとページルール(Page Rules)を使う方法がたくさん出てくるのですが 2024 年 6 月時点では非推奨になっていました。
Single Redirect というリダイレクトを使うようなのですがなかなかドキュメントが出てこず…。しばらく探してようやくサンプルを見つけました。
例えばうちのブログの場合はホストヘッダーの一致で www.mattintosh-note.jp
を設定します。これの Cloudflare の式は下記のようになります。
http.host eq "www.mattintosh-note.jp")
実行内容の方で下記のように設定をします。
- タイプ: 動的
- 式:
concat("https://mattintosh-note.jp", http.request.uri.path)
- ステータス: 301
- クエリ文字列を保持する: 有効
このようにすることでパスとクエリを維持したままホストのリダイレクトをしてくれるようになります。
フィールドや関数に関しては下記に説明があります。色々カスタマイズできそうですね。
日本以外からのアクセスに制限をかける
やりたかったのがこれですね。一応海外ユーザーからの普通のアクセスもあるので完全にブロックはしません。条件を日本以外に設定し、アクションを「マネージドチャレンジ」に設定しておきます。これで日本以外からのアクセスの場合には Cloudflare による認証が入ります。
正しいボットをアクセス制限から除外する
日本以外からのアクセスに制限をかけると Google などの検索エンジンのボットも弾いてしまうことになるのでそれらを通過させる設定をします。
「検証済みボット」という項目があるのでそれを選択して値を「検索エンジン クローラー」に設定します。その他はお好みで設定してください。
検証済みボットの一覧は下記にあります。うーん、Google だけでもいろんな種類がある…。
https://radar.cloudflare.com/traffic/verified-bots
設定したらルールの順番を忘れずにセットします。今回はボットの評価の方が上位になります。その評価が終わったら日本国内かそうではないかで振り分けられることになります。
というわけで Cloudflare のおかげで不要なボットの排除ができるようになりましたのでしばらくこれで様子を見たいと思います。Cloudflare をすり抜けようと思えばすり抜けられますがフィッシングサイトの素材回収ボットはブロックできるでしょう。Twitter とかにサムネとかも出なくなるけどそれは追々なんとかしまします。
2024-06-05 追記:やっぱり駄目だった。うん、知ってた。