Nginxの設定でGoogleAnalyticsのリファラスパムボットを除外
調べてみたところ、ほとんどがリファラスパムボットの仕業でした。
リファラスパムボットとは、リファラ(参照元)を偽装し、Webサーバに対してアクセスログだけを残していく悪質なボットのことです。特に悪質なものは、直接GAのセッションを偽装してくるようです。
※ Webサーバにアクセスすることなく、直接GAのデータに対して悪意あるリファラを残して去っていくタイプもある
リファラスパムボットがGAに残した参照元URLには、絶対にアクセスしてはいけません。
アクセスすると、URL先でリダイレクトが発生し、悪意のあるサイトへ誘導されることになります。
今回は、リファラスパムボットへの対策方法を、
Nginxで稼働しているWebサーバを例として書き残しておきます。
なお、Apacheでの設定方法については「Web制作 W3G」さんの
「Google Analyticsのアクセス解析データを掻き乱すリファラスパム対策」という記事が参考になります。
リファラスパムボット用のconfファイルを作成する
有志の方がリファラスパムボットの参照元をまとめてくれてます。非常に助かります。
[見つけ次第更新] リファラースパムリスト Google Analytics
上記サイトに掲載されている、「参照元」を全部まとめて「SublimeText3(以下、ST3)」へコピペします。
ST3の複数行同時編集機能(Altまたはoptionキーを押しながらドラッグ)を利用しながら、
下記のような if文 を全行に追加し、spambot.conf というファイルを作成してください。
# リファラスパムボットのアクセスでない場合は「0」を維持する
set $spambot 0;
# リファラスパムボットそれぞれの判定
if ($http_referer ~* (4webmasters.org) ) {
set $spambot 1;
}
if ($http_referer ~* (76brighton.co.uk) ) {
set $spambot 1;
}
if ($http_referer ~* (7makemoneyonline.com) ) {
set $spambot 1;
}
if ($http_referer ~* (7secretsearch.com) ) {
set $spambot 1;
}
if ($http_referer ~* (acads.net) ) {
set $spambot 1;
}
(…中略…)
# 最後に403を返すif文を追加する
if ($spambot = 1) {
return 403;
break;
}
この分岐、非常に冗長なんですが、ほかの方法を探しても見つかりませんでした。
※ Nginxのif文は「If is evil.」(ifは邪悪)と言われるほど使い勝手が悪いようです…
spambot.conf をNginxに読み込ませる
読み込ませるディレクティブは、「Location」もしくは「Server」ディレクティブになります。
※ if文は、どちらかのディレクティブでしか使用できないため
location / {
include /etc/nginx/spambot.conf;
(…以降に既存の設定が続きます…)
}
この設定により、トップページ以下すべてのディレクトリにおいて、スパムボットかどうかの判定が行われるようになります。
GAのフィルタを設定して完全にボットを除外する
Nginxでリファラスパムボットを除外しただけでは、
先述した「直接GAのセッションを偽装してくる」リファラスパムボットには対応できません。
これに対応するためには、GA側の「フィルタ」設定を利用して、正規表現で弾く必要があります。
※ 無理矢理に正規表現で書かず、参照元を1つずつ設定していってもOKですが、フィルタがたくさん必要になります…
対応方法は、最初にも紹介した「Web制作 W3G」さんの
「Google Analyticsのアクセス解析データを掻き乱すリファラスパム対策」という記事にバッチリ書いてあります。
※「フィルタパターン用リファラスパムボットリスト」という章です
※ 2015/5/30 追記
Gistにフィルタの正規表現をまとめたものを公開しました。
raingarden / ga-spambot-filter
おわりに
リファラスパムボットは日々増え続けているようで、
結局はいたちごっこになります。根本的な対策にはなりません…。
新たなボットがリストとして登録されていないか、定期的にチェックするのが良いと思われます。