mattintosh note

どこかのエンジニアモドキの備忘録

2024-06-05: 現在ホビー関連の記事を 新しいブログ に移行しています。

Cloudflareをはてなブログに接続してアクセス制限などをしてみた

Cloudflare を使ってはてなブログのアクセス制限などを行ってみました。

前々から画像の無断転載に困っていたので以前 AWS CloudFront と AWS WAF をはてなブログと組み合わせられないか試してみたことがありました。これはできるには出来たのですが恒久化は出来ませんでした。ブラウザとはてなブログの間に CloudFront を挟むには DNS を CloudFront に向けなくてはならないのですが、はてなブログが定期的に独自ドメインDNS レコードをチェックしているようで一瞬は CloudFront 経由になるのですがしばらくすると独自ドメインが設定されていないと判断して無料ドメインに戻してしまうんですね。

しばらく仕方ないかと様子を見ていたのですが日に日に無断転載の量が増えていくんですね。私は自分の写真を Google で検索できるようにしているのですがほぼほぼフィッシングサイト(詐欺サイト)に画像を利用されています。次のスクショはすべて私の写真でフィッシングサイトへのリンクです。

Google 検索
Google 検索

ここから Google にフィードバックを送っても対応はしてくれません。正式な通報をするにしても自分の本名やら住所やらを用意しなければならないですし面倒くさい…。とは言え私の写真からフィッシングサイトに引っかかってしまう人が出るのは嫌だなと何かしらの対策はしなければならないと思っていたのですが、はてなブログには IP 制限をするといった機能はありません。はてなフォトライフもアルバムは非公開に出来ますが恐らくブログからの画像呼び出しのためか URL を直接指定すれば参照可能です。

今回 Cloudflare を使う機会が出てきたので Cloudflare でなんとか出来ないかと試してみたところなんとか出来そうだったので備忘録として残しておきます。

前提条件ですがはてなブログ独自ドメインを使用している場合に限ります。Cloudflare は Free プランで問題ありません。

Cloudflare の SSL でモードを「フル」にしておきます。フレキシブルだと恐らくはてなブログが HTTP だと誤認するため無限ループしてしまいます。

Cloudflare
Cloudflare

設定が出来たら DNS のレコードを設定していきます。はてなブログ独自ドメインを使用するときは下記の 2 つの IP を A レコードで登録することになっています(ネイキッドドメインの場合は)。

  • 13.115.18.61
  • 13.230.115.161

help.hatenablog.com

www のレコードはもともと使用していなかったのですが Cloudflare のセットアップで必要になるようなので @ と同様に登録しておきます。

※このあと www なしにリダイレクトするため www192.0.2.1(TEST-NET-1)などのテストネットワーク用アドレスに設定しておくのが良さそうです。

Cloudflare
Cloudflare

準備が出来たらネームサーバーを Cloudflare のものに切り替えます。

www 有りから無しへのリダイレクト

これはうちがネイキッドドメイン独自ドメインに設定しているためすべての人が適用するわけではありません。

Cloudflare のリダイレクトに関するドキュメントを探すとページルール(Page Rules)を使う方法がたくさん出てくるのですが 2024 年 6 月時点では非推奨になっていました。

Single Redirect というリダイレクトを使うようなのですがなかなかドキュメントが出てこず…。しばらく探してようやくサンプルを見つけました。

developers.cloudflare.com

例えばうちのブログの場合はホストヘッダーの一致で www.mattintosh-note.jp を設定します。これの Cloudflare の式は下記のようになります。

http.host eq "www.mattintosh-note.jp")

実行内容の方で下記のように設定をします。

  • タイプ: 動的
  • 式: concat("https://mattintosh-note.jp", http.request.uri.path)
  • ステータス: 301
  • クエリ文字列を保持する: 有効

Cloudflare
Cloudflare

このようにすることでパスとクエリを維持したままホストのリダイレクトをしてくれるようになります。

フィールドや関数に関しては下記に説明があります。色々カスタマイズできそうですね。

developers.cloudflare.com

developers.cloudflare.com

日本以外からのアクセスに制限をかける

やりたかったのがこれですね。一応海外ユーザーからの普通のアクセスもあるので完全にブロックはしません。条件を日本以外に設定し、アクションを「マネージドチャレンジ」に設定しておきます。これで日本以外からのアクセスの場合には Cloudflare による認証が入ります。

Cloudflare
Cloudflare

正しいボットをアクセス制限から除外する

日本以外からのアクセスに制限をかけると Google などの検索エンジンのボットも弾いてしまうことになるのでそれらを通過させる設定をします。

「検証済みボット」という項目があるのでそれを選択して値を「検索エンジン クローラー」に設定します。その他はお好みで設定してください。

Cloudflare
Cloudflare

検証済みボットの一覧は下記にあります。うーん、Google だけでもいろんな種類がある…。

https://radar.cloudflare.com/traffic/verified-bots

設定したらルールの順番を忘れずにセットします。今回はボットの評価の方が上位になります。その評価が終わったら日本国内かそうではないかで振り分けられることになります。

Cloudflare
Cloudflare


というわけで Cloudflare のおかげで不要なボットの排除ができるようになりましたのでしばらくこれで様子を見たいと思います。Cloudflare をすり抜けようと思えばすり抜けられますがフィッシングサイトの素材回収ボットはブロックできるでしょう。Twitter とかにサムネとかも出なくなるけどそれは追々なんとかしまします。

2024-06-05 追記:やっぱり駄目だった。うん、知ってた。