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がサイトにアクセスできないようにしようと思いました。
なぜ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情報を取得しておいてください。
3. お名前.comにNS情報を登録する
お名前.comを開きNS情報を登録します。
「ドメイン → ドメイン機能一覧 → ネームサーバ設定」を開き、「その他のサービス」タブを選択します。
ネームサーバ1,2に先ほど取得したNS情報を設定すればOKです。
設定後にCloudflareを開くと、自動でDNSレコードが読み込まれていることを確認できます。
画像のようにクイックスタート画面が表示されればOKです!
NSの切り替えはネット上に反映が広がるまで時間差が出ることもあるので、すぐ反映されなくても少し待ってから再確認してみてくださいね。
4. ボットファイトモードでBot対策を有効化する
Cloudflareに入れたら、Bot対策として「ボットファイトモード」を設定します。
これだけでBotと疑わしきアクセスにはチャレンジが表示されるようになります。
チャレンジというのは、アクセスしてきた相手が人間なのか自動化されたBotなのかを確かめるための関門のことです。
人間が普通にブラウザで見ている分には基本的に素通りできますが、機械的に大量アクセスしてくるBotはここで止まる、というイメージですね。
まずはこのボットファイトモードを入れておくだけでも、不審なBotアクセスの大半に効いてくれるので、最初の一手としてお勧めです。
5. セキュリティルールでより細かくブロックする
基本的には、ボットファイトモードだけで問題ないと思いますが、一応下記も紹介しておきます。
アクセスに対してより詳細に対応するために、セキュリティルールを設定します。
セキュリティの都合上詳細は語れませんが、IPアドレス、国、ヘッダー、ユーザエージェントなどアクセス元の情報によってブロックやチャレンジを設定できます。
たとえば「特定の国からのアクセスはチャレンジを出す」「怪しいユーザエージェントは問答無用でブロックする」といった具合に、条件を組み合わせて自分のサイトに合った守りを作れるわけですね。
無料でここまでできるの助かりますよね!
Cloudflareが正しく動作しているか確認する
設定したら、ちゃんと機能しているかを確認しておきましょう。
ここを飛ばすと「設定したつもりで実は効いていなかった」となりがちなので、地味ですが大事な工程です。
サイトにCloudflareが適用されていることを確認する
セキュリティルールに自分のIPを設定して、自分のサイトにCloudflareが設定されていることを確認します。
セキュリティルールに下記のように設定すればOKです。
- フィールド
- 送信元のIPアドレス
- 値
- 自分のIPアドレス
この状態で自分のサイトにアクセスし、Cloudflareのログに自分のアクセスが記録されていれば、ちゃんと経由している証拠になります。
ボットファイトモードが機能していることを確認する
Botを本当にアクセス拒否できているかを確認します。
ログを確認するとボットファイトモードでBotアクセスが処理されていることを確認できます。
まとめ
こんな感じで無料かつ簡単に、CloudflareでBotアクセスをブロックしてサイトのセキュリティを高めることができます。
ポイントを振り返ると、DNSをCloudflareに向ける → ボットファイトモードを有効化する → 必要ならセキュリティルールで細かく制御するという流れでした。
GitHub Pagesのようにサーバ側を触りにくい環境でも、サイトのコードを一切いじらずに対策できるのが大きいですね。
インターネットには、悪い人たちがたくさんいるので、自分のサイトは自分で守ることが大切ですね。
自分も今回の件で改めて実感しました。
広告については、Googleにお気持ち表明するフォームがあるので、情報(接続元、時間、接続数etc…)を報告しておきました。
早く停止解除されるといいな~
以上となります。
インターネットを使うならセキュリティ意識を高めていきましょう。
お疲れさまでした!





