runする水霊、RUNdine

Web tool development for DIY

Cloudflare CDNで個人サイトのAI学習対策をする

Cloudflare CDNを使ってAIトレーニングbotからサイトを保護するやり方について解説します。robots.txt(&noindex)のみの対策よりも強固なセキュリティを無料(※要独自ドメイン)で実現できます。

予備知識:旧来の対策

定番の対策としてrobots.txtとnoindexがありますが、CDN導入前にまずはこれらの役割を明確にしておく必要があります(いずれもCDNと組み合わせて使えます)。

robots.txtの限界

そもそもrobots.txtはアクセスを禁ずるものではなく、「このルールを守ってください」という意思表示です1。あくまでお願いであって強制力を持たず、たとえばWAFのようにHTTPリクエストを技術的に拒否する仕組みではない、という理解が必要です。

そして世の中にはこのお願いを公然と無視する行儀の悪いbotが存在するため、「robots.txtを書いたから安心」というのは残念ながら幻想ということになってしまいます2 3。User-Agentも偽装が可能であり、すり抜けようと思えばすり抜けることは可能です。

検索避けの意義

一般的に検索避けとして使われるnoindexは、検索エンジンに情報を登録するためにインターネットを巡回しているクローラー(googlebotなど)に向けた 「検索結果には載せないでください」という意思表示です。こちらもアクセス自体を止めるものではないことに注意が必要です。

また、検索結果に載らなくても、あらゆるサイトは基本的にbotには補足されています。
DNSを設定してサイトを公に公開した時点で、新規ドメインを状態監視しているbotは平気でアクセスしてきます。SNSなどにリンクを貼っている場合は尚更で、そこからさまざまなbot(脆弱性スキャナやAI学習botなど)が流入することは覚悟しておくべきです。

Cloudflareの保護を利用する

Cloudflare CDNは独自ドメインさえあれば静的or動的やホスティングサービスを問わず無料で利用できるのが最大のポイントで、ドメインのネームサーバーをCloudflareのものに書き換える(=プロキシを噛ませる)ことで、HTTPリクエストの時点で(要はアクセス発生前に)botを遮断することが可能です。静的サイト、てがろぐやwordpress(セキュリティプラグインとの競合注意)などの動的サイトはもちろん、その他独自ドメインが設定可能なサービス全般で広く使えます。

独自ドメインの取得

既に独自ドメインをお持ちで自サイトにも設定済みの方はこの手順を飛ばしてください。

お好きなレジストラで独自ドメインを契約し、自サイトに適用します(必要なら301リダイレクトの設定も行ってください)。レジストラおよびレンタルサーバー/サービス側に設定手順のマニュアルがあるので、詳しい手順についてはそちらを参照してください。
ドメインの種類によってはレジストラによって値段が数千円単位で違うこともあるので、これから取得される方は何社か比較してみるといいと思います。安いドメインであれば月100円台から持てます。

ちょうどCloudflare Registerが安くドメインを提供しています(ただし支払いはドル建て/ネームサーバー変更不可)。後述するネームサーバー書き換え手順を省略できるのでCloudflareをずっと使う気であればおすすめですが、ネームサーバー変更不可で汎用性は他より落ちるのでこの点で迷うなら他で取るのがいいと思います。筆者はporkbun贔屓です(ドル建て/サイト全部英語なので難易度高め)。

国内だと大手のXserver Domainが.comや.netをひとつ無料で取得できるキャンペーンをやっています。円建てかつ更新もお安いです。特に.jpが欲しい場合にはおすすめできます(海外レジストラでは.jpは基本取れません)。

ネームサーバーを書き換えるまでの手順

Cloudflare Registerで独自ドメインを取得しているならこの手順は省略できます。

  1. Cloudflare公式にアクセスしてアカウントを作成
  2. ログインしてダッシュボードの左メニューから「ドメイン」→「概要」→右上の「ドメインを追加」
  3. 「ドメインを接続」から自分のドメイン名を入力、「追加設定」で弾きたいものを「ブロック」にして「続行」
  4. 料金画面で「無料プラン」を選択(個人利用なら無料プランで十二分です!)
  5. DNSレコードの確認画面が出るので、特に追加の必要がないなら「アクティベーションに進む」
  6. ネームサーバーをCloudflareのものに更新する方法が表示されるので、画面の指示に従って設定する
  7. 「ネームサーバーを今すぐ確認」ボタンを押すと確認作業が開始(通常数分くらい/完了するとメールが届きます)
  8. 保護が開始されたら、検索避けをしている場合はこちらの手順、クロールさせたい場合はこちらの手順へ

パターンA:検索避けをしている場合の追加設定

標準WAFを基準に Bot Fight Mode + AI Labyrinth + カスタムルールを追加していきます。
(サイトのnoindexは予め設定されているものとします)

  1. ダッシュボードで当該ドメインを選択
  2. 画面右側の『AIボットアクセスを管理』で「AIトレーニングボットをブロックする」を「すべてのページでブロック」 「robot.txtを管理する」を「robot.txtでトレーニングをブロックする設定を行う」に変更
  3. ダッシュボードの左メニューから「セキュリティ」→「設定」→「セキュリティ ルール」→右上の「ルールを作成」→「カスタム ルール」
    ここでさまざまなルールを定義することができます。以下は一例。
    • RSSを使わず、アーカイバも含めbotを入念に弾きたい場合は「既知のbot」にして、アクションは「ブロック」でデプロイ
    • 閲覧者のほとんどが国内からのアクセスであることを想定する場合は「国 + 次と等しくない + Japan」にして、アクションは「マネージドチャレンジ」で「デプロイ」
  4. ダッシュボードの左メニューから「セキュリティ」→「設定」→フィルタ条件の「ボット トラフィック」
    • AI ボット ポリシーを設定:全部ブロック
    • AI ボットをブロック:ブロック
    • AI ラビリンス:オン
    • Bot Fight モード:オン
    • チャレンジ経路:任意の時間
  5. SNS等でリンクのサムネイルを出したい場合はサムネイルが出るか試してみてください。出なければ「検証済みbot + 次と等しい + Page Preview」で、「スキップ」にし、「Super Bot Modeの全ルール」にチェックを入れます(順位は一番上にしてください)。

パターンB:クロールさせたい(=検索避けしない)場合の追加設定

むしろクロールさせたい、という場合はクローラーだけを通すように設定を工夫します。ただし、googlebotはクロールと学習を兼ねている混合型のため、SEOと学習対策の両立には妥協が必要であることをご承知おきください。
標準WAFを基準に Bot Fight Mode + AI Labyrinth + カスタムルールを追加していきます。

  1. ダッシュボードで当該ドメインを選択
  2. 画面右側の『AIボットアクセスを管理』で「AIトレーニングボットをブロックする」を「ブロックしない」4 、「robot.txtを管理する」を「robot.txtでトレーニングをブロックする設定を行う」に変更
  3. ダッシュボードの左メニューから「セキュリティ」→「設定」→「セキュリティ ルール」→右上の「ルールを作成」→「カスタム ルール」で、 「検証済みbotのカテゴリ + 次と等しい + AIクローラー」を設定して、アクションは「ブロック」で「デプロイ」 ここでは他にさまざまなルールを定義することができます。以下は一例。
    • 必要に応じて「検証済みbotのカテゴリ + 次と等しい + AI検索」OR「検証済みbotのカテゴリ + 次と等しい + AIアシスタント」を「ブロック」で追加
    • 閲覧者のほとんどが日本からのアクセスであることを想定する場合は「国 + 次と等しくない + Japan」にして、アクションは「マネージドチャレンジ」で「デプロイ」
  4. ダッシュボードの左メニューから「セキュリティ」→「設定」→フィルタ条件の「ボット トラフィック」
    • AI ボット ポリシーを設定:検索は「許可」、AI検索は任意、AIトレーニングは「許可」4
    • AI ボットをブロック:ブロック
    • AI ラビリンス:オン
    • Bot Fight モード:オン
    • チャレンジ経路:任意の時間
  5. Search Consoleからサイトマップの送信やインデックス登録のリクエスト、リッチリザルトテストをやってみて、一通り通るなら完了。しばらく「セキュリティ」→「Analytics」でgooglebotの様子をチェックして、意図通りの挙動でないなら3,4の設定を調整
    • WordpressでAll In One Security(AIOS)を使っている場合、「ファイアウォール」→「オンラインのボットの設定」にある「偽のgooglebotをブロック」を外すとサイトマップが読めるようになることがあります

Footnotes

  1. RFC 9309 Robots Exclusion Protocol (英語) ↩

  2. robots.txt setting · Cloudflare bot solutions docs (英語) ↩

  3. robots.txtを無視するクローラーまとめ ↩

  4. ここをブロックにしてしまうとgooglebotも一緒に弾かれてインデックス登録やサイト評価に悪影響が出るため、他の手順でAIクローラーを名指しでブロックする方法を取っています。 ↩ ↩2