ボット、クローラのアクセスを除外する方法を調べてみました。
除外したい背景、実現したいこと、周辺技術、製品、調べたこと、実施することを記載します。
除外したい背景
Google Analytics 上記録されないが、HTTP サーバでは記録されるアクセスがある。
このアクセス が無視できないレベルでサーバリソースを消費している。
実現したいこと
Google Analytics に記録されないアクセスは、ボット、クローラによるアクセス。
ボット、クローラには、良いもの、悪いものがいて、悪いもののアクセスを除外したい。
具体的に403、もしくは応答自体を返さず、アクセス Deny したい。
周辺技術、製品
Google Analytics の ボットのフィルタリング 機能について
-
既知のボットやスパイダーからのヒットをすべて除外します
チェックボックス- Google Analytics には、
既知のボットやスパイダーからのヒットをすべて除外します
というチェックボックスがあり、チェックを ON にすると、Google Analytics 上でアクセスを除外できる。 - ボットかどうかの判断には、IAB/ABC という会社 が提供している IAB/ABC International Spiders and Bots List を使用している。
- IAB/ABC の提供するボットリストは、有料 非会員
$14,000
会員になるともっと安く購入できる。 - 法人でないと、購入は躊躇するレベルの金額。
- Google Analytics には、
-
IAB/ABC International Spiders and Bots List の関連情報
- Software - IAB Tech Lab から、List ファイルの Sample 等が入手できる。
- snowplow/iab-spiders-and-robots-java-client: Java 7+ client library for the IAB and ABC International Spiders and Robots list という Java Client がある。
- batrobots と、goodrobots が区別されていないのかもしれない。(ものを見てみないとわからない)
-
フィルタ機能による除外
ボットのフィルタリングをすり抜けてくるアクセスは、フィルタ機能での除外設定を手動で行うことができます。
手動での設定はたいへんなので、自動で除外フィルタを追加してくれる、Home | Referrer Spam Blocker - Automatically block referrer spam for Google Analytics というサービスがあったのですが、2017年で停止しています。
サービスを停止する理由が、The state of Referrerspamblocker.com – Stijlbreuk – Medium に記載されていますが、Spam が進化して、Google Analytics に渡されるパラメータレベルだと通常のアクセスと区別がつかない旨が記載されていて、過去有効だった手段が通用しない場合も多く、現在、Spam ブロックの目的で設定する意味があるのかちょっと微妙に思いました。
Ultimate Bot Blocker
Ultimate Bot Blocker
で検索すると、Apache、Nginx でそれぞれ、Github リポジトリが見つかります。
Apache のリポジトリ、Nginxのリポジトリのリンクを以下に記載します。
その他、Addon 、付録のようなもので以下が用意されています。
fail2ban
の Addonn- Google Seach Console の バックリンク否認でアップロードする txt ファイル
- Google Analytics のフィルター定義ファイル
- robots.txt
Application レベル での Bot Blocker
Django の ライブラリで以下を見つけました。一定以上の頻度で同一IPからのアクセスを遮断する機能を持っているようです。
Bot を Block する 製品
プロキシサーバ的に機能して Block するような製品が多いように思いました。
- 悪意のあるボット乱用をブロック | Cloudflare
- ボット | トレンドマイクロ
- Bot Manager | Akamai
- Distil Networks社|製品紹介|日本コーネット・テクノロジー株式会社
調べたこと
-
Google Analytics で、アクセスが除外されているエージェントを調べる
HTTP サーバ上でアクセスはあるが、Google Analytics で除外されているユーザーエージェントの種類を調べてみました。このブログは、PC ページ側の Google Analytics に、カスタムディメンションでユーザーエージェントを設定しています。AMP ページ側は、ユーザーエージェントが記録できていないため、だいたいになってしまいますが、記録結果を元にアクセスログのユーザーエージェントと、付き合わせを行いました。 -
アクセスログからユーザーエージェントを取得する
以下、ワンライナーでアクセスログからユーザーエージェント文字列を取得しました。
cat /var/log/httpd/access_log* | cut -f6 -d'"' | sort -r | uniq
cat /var/log/httpd/ip_direct_custom_log* | cut -f6 -d'"' | sort -r | uniq
cat /var/log/httpd/ssl_access_log* | cut -f6 -d'"' | sort -r | uniq
-
GAからデータを取得する
カスタムディメンション ユーザーエージェント を集計する カスタムレポートを作成し、CSVとして取得しました。 -
付き合わせた結果
User Agent のリスト -
感想
- 計測期間、測定環境の影響で、本物っぽいユーザーエージェントが混ざる。
- 確かにボットであろうアクセスは抽出できている。
- 良いボットと思われる ユーザーエージェント 名で、何をしているボットかなんとなくわかる。
実施すること
- mitchellkrogza/apache-ultimate-bad-bot-blocker を使って Bot を Block は実施する。
- fail2ban の設定を行う。
GA フィルタの定義ファイル、robots.txt 等は、HTTPサーバーの設定をすればそこでブロックされるので、設定が不要に思いました。
Google Search Console へのリンク拒否ファイルのアップロードは、bots 側にURLがあることは検知されるので、実施しておいたほうがいいかもしれません。
実施したこと
実施したことを以下にまとめました。よろしければ、ご確認ください。
-
apache-ultimate-bad-bot-blocker を使って、ボット、クローラのアクセスをブロックする | Monotalk
Apache で ultimate-bad-bot-blocker を設定する方法について書きました。 -
ultimate-bad-bot-blocker の bad domain の バックリンクを否認する | Monotalk ultimate-bad-bot-blocker のリソースを使って、Google Search Console でバックリンクを否認する方法を書きました。
-
ultimate-bad-bot-blocker の bat bot を robots.txt に追加する | Monotalk
robots.txt に、bat bot を Disallow する定義を記載する方法を書きました。 -
Googleアナリティクス ultimate-bad-bot-blocker で、ボットを除外する | Monotalk
Google Analytics 上で bat bot のセグメントを作成する方法について書きました。
参考
以下、参考になりました。
- 悪質なbotのアクセスをNginxでバッサリ切り捨てる
- GoogleAnalyticsで怪しいリファラを除外する方法(ビュー設定を使う)
- Google アナリティクスのボットのフィルタリング設定とは?|Sunfish
- ANA-White_Ops_-The_Bot_Baseline-_Fraud_in_Digital_Advertising-JP.pdf
- ゴーストリファラ対策~リファラスパムとつきあう方法~ | ウェブの実
- 参照元スパム対策をしてわかったこと | ウェブの実
- バックリンクを否認する - Search Console ヘルプ
- UserAgentからOS/ブラウザなどの調べかたのまとめ
以上です。
コメント