CloudflareでBotアクセスをブロック|AdSense停止から守る無料設定手順

概要

今回はCloudflareでブログへの不正なBotアクセスを無料でブロックする方法について紹介していきます。

きっかけは、自分のサイトでGoogle AdSenseの「無効な操作: 自己クリック」が突然検知され、心当たりが全く無いのにアカウント停止になってしまったことでした(- -;

調べてみると広告が止まった時刻とぴったり同じタイミングで60並列の同時接続が発生していて、明らかにVPN経由とみられる不審なBotアクセスが原因だったんですね。

放っておくとまた同じことが起きてしまうので、なんとか自力で守る方法はないかと探した結果たどり着いたのが、CloudflareをサイトとサーバのあいだにかませてBotを弾くやり方でした。

この記事では、CloudflareのDNS切り替えからボットファイトモードとセキュリティルールでBotをブロックするところまでを、実際の画面キャプチャ付きで一通り紹介していきます。
無料でここまでできるので、AdSenseを運用しているブロガーの方にはかなりお勧めです。
それではやっていきましょう!

目次

CloudflareでBotブロックが必要になった経緯

実装した経緯としては、Google AdSenseで「無効な操作: 自己クリック」が検知され、そのままアカウント停止をされたことにあります。

ただ自分の方では心当たりがなく、firebase Analyticsで調査したところ、広告が停止された時間と同時刻に60並列での同時接続が確認されました。

普段私のサイトは2並列で人が居ればいいほうなので、60並列は異常値です。
アクセス元も不明なので、おそらくVPNを使用したBOTかと思われます。

上記を踏まえ、不審な挙動をするBOTがサイトにアクセスできないようにしようと思いました。

firebase Analyticsで確認した不審なアクセスの並列数
firebase Analytics 不審なアクセス確認 並列数
firebase Analyticsで確認した不審なアクセスのアクセス元
firebase Analytics 不審なアクセス確認 アクセス元

なぜCloudflareでBotをブロックするのか

そもそもBotアクセス自体は珍しいものではなく、検索エンジンのクローラのように正規のBotもたくさん巡回しています。
問題になるのは、短時間に大量の接続を投げてくる正体不明のBotで、これがAdSenseの無効トラフィック判定を引き起こす火種になりがちなんですね。

WebサーバがGitHub Pagesのような静的ホスティングだと、サーバ側でアクセス制御を細かく書くのが難しいという事情もあります。
そこでDNSの手前にCloudflareを挟んでしまえば、サイトのコードを一切触らずにアクセス制御ができるというのが、今回のやり方の一番おいしいところです。

環境と構成の変化

まずは今回の前提となる環境です。

  • Webサーバ
    • GitHub Pages(静的ホスティング)
  • ドメイン
    • お名前.com で取得・管理

CloudflareをかませることでDNSの経由先が変わります。
具体的にはアクセスの流れが次のように変化します。

<対応前のアクセス順序>
ブラウザ → お名前.com → GitHub Pages

<対応後のアクセス順序>
ブラウザ → お名前.com → Cloudflare → GitHub Pages

CloudflareがブラウザとGitHub Pagesのあいだに入ることで、ここでBotかどうかを判定して通す/弾くを決められるようになります。

CloudflareでBotブロックを設定する手順

ここからは実際の設定手順を紹介していきます。
大きく分けると「アカウント登録 → NS情報の付け替え → Bot対策の有効化」という流れになります。

1. Cloudflareにアカウント登録する

下記にアクセスし、Cloudflareのアカウントを作成します。
Cloudflare 公式サイトcloudflare.com

登録は無料プランで問題ありません。
今回紹介するボットファイトモードもセキュリティルールも、無料プランの範囲で利用できるのがありがたいところです。

2. CloudflareのNS(ネームサーバ)情報を取得する

登録後Cloudflareの画面に表示されているNS(ネームサーバ)情報を取得しておきます。

※おそらく新規登録後の画面と下記の画像は少し違うと思います。
画像は参考までに、自身の画面に表示されているNS情報を取得しておいてください。

CloudflareのNS(ネームサーバ)情報を取得する画面
cloudflare NS情報取得

3. お名前.comにNS情報を登録する

お名前.comを開きNS情報を登録します。

「ドメイン → ドメイン機能一覧 → ネームサーバ設定」を開き、「その他のサービス」タブを選択します。
ネームサーバ1,2に先ほど取得したNS情報を設定すればOKです。

お名前.comでCloudflareのネームサーバを設定する
お名前.com ネームサーバ設定

設定後にCloudflareを開くと、自動でDNSレコードが読み込まれていることを確認できます。
画像のようにクイックスタート画面が表示されればOKです!

Cloudflareのクイックスタート画面が表示されればNS切り替えは成功
cloudflare クイックスタート画面
自分の場合、数分で設定が適用されたので、数分待っても画面が表示されていない場合は、何か間違えてるかも?

NSの切り替えはネット上に反映が広がるまで時間差が出ることもあるので、すぐ反映されなくても少し待ってから再確認してみてくださいね。

4. ボットファイトモードでBot対策を有効化する

Cloudflareに入れたら、Bot対策として「ボットファイトモード」を設定します。

これだけでBotと疑わしきアクセスにはチャレンジが表示されるようになります。

チャレンジというのは、アクセスしてきた相手が人間なのか自動化されたBotなのかを確かめるための関門のことです。
人間が普通にブラウザで見ている分には基本的に素通りできますが、機械的に大量アクセスしてくるBotはここで止まる、というイメージですね。
まずはこのボットファイトモードを入れておくだけでも、不審なBotアクセスの大半に効いてくれるので、最初の一手としてお勧めです。

Cloudflareのボットファイトモードを有効化する設定画面
cloudflare ボットファイトモードの設定

5. セキュリティルールでより細かくブロックする

基本的には、ボットファイトモードだけで問題ないと思いますが、一応下記も紹介しておきます。

アクセスに対してより詳細に対応するために、セキュリティルールを設定します。

セキュリティの都合上詳細は語れませんが、IPアドレス、国、ヘッダー、ユーザエージェントなどアクセス元の情報によってブロックやチャレンジを設定できます。

たとえば「特定の国からのアクセスはチャレンジを出す」「怪しいユーザエージェントは問答無用でブロックする」といった具合に、条件を組み合わせて自分のサイトに合った守りを作れるわけですね。
無料でここまでできるの助かりますよね!

Cloudflareのセキュリティルールでアクセス元ごとに制御する
cloudflare セキュリティルール

Cloudflareが正しく動作しているか確認する

設定したら、ちゃんと機能しているかを確認しておきましょう。
ここを飛ばすと「設定したつもりで実は効いていなかった」となりがちなので、地味ですが大事な工程です。

サイトにCloudflareが適用されていることを確認する

セキュリティルールに自分のIPを設定して、自分のサイトにCloudflareが設定されていることを確認します。

セキュリティルールに下記のように設定すればOKです。

  • フィールド
    • 送信元のIPアドレス
    • 自分のIPアドレス

この状態で自分のサイトにアクセスし、Cloudflareのログに自分のアクセスが記録されていれば、ちゃんと経由している証拠になります。

Cloudflareのログで自分のアクセスが経由していることを確認
cloudflare ログの確認

ボットファイトモードが機能していることを確認する

Botを本当にアクセス拒否できているかを確認します。

ログを確認するとボットファイトモードでBotアクセスが処理されていることを確認できます。

CloudflareのログでボットファイトモードがBotを処理している様子
cloudflare ログの確認
「User-Agent Switcher」 というChromeの拡張機能を使えば自分でもbotアクセスを実施できますが、複雑なのと、間違えて他サイトにアクセスするとBot判定され、アクセス拒否されることがあるので、自信がある人以外はやらないことをお勧めします。

まとめ

こんな感じで無料かつ簡単に、CloudflareでBotアクセスをブロックしてサイトのセキュリティを高めることができます。

ポイントを振り返ると、DNSをCloudflareに向ける → ボットファイトモードを有効化する → 必要ならセキュリティルールで細かく制御するという流れでした。
GitHub Pagesのようにサーバ側を触りにくい環境でも、サイトのコードを一切いじらずに対策できるのが大きいですね。

インターネットには、悪い人たちがたくさんいるので、自分のサイトは自分で守ることが大切ですね。
自分も今回の件で改めて実感しました。

広告については、Googleにお気持ち表明するフォームがあるので、情報(接続元、時間、接続数etc…)を報告しておきました。
早く停止解除されるといいな~

以上となります。
インターネットを使うならセキュリティ意識を高めていきましょう。
お疲れさまでした!