急に増えたサーバ負荷と、異常に発生している404エラー
このサイトではflentdとGrowthForecastを利用してサーバのログを可視化をしています。
「今日は少し重いかな」と思ってグラフを見てみると、数日前から3xxと4xx系のエラーが急増していました。
可視化の方法が知りたいという方は「サーバリソースをリアルタイムに監視するdstatのインストールと使い方」をご覧ください。
明らかにエラーが多すぎるのでサーバのログを見てみるとMJ12botというボットによる以下のようなログが大量に書き出されていました。
time:21/Jul/2015:08:10:44 +0900 host:198.27.66.194 request:GET /qa/tag/ada?login=google HTTP/1.0 status:302 size:20 referer:- ua:Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+) reqtime:0.046 upsttime:0.045 time:21/Jul/2015:08:10:50 +0900 host:198.27.66.194 request:GET /qa/?hauth.start=Google&hauth.time=1437433844 HTTP/1.0 status:404 size:57 referer:- ua:Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+) reqtime:0.024 upsttime:0.023 time:21/Jul/2015:08:10:59 +0900 host:198.27.66.194 request:GET /qa/tag/ada?login=twitter HTTP/1.0 status:302 size:20 referer:- ua:Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+) reqtime:0.024 upsttime:0.022 time:21/Jul/2015:08:11:05 +0900 host:198.27.66.194 request:GET /qa/?hauth.start=Twitter&hauth.time=1437433859 HTTP/1.0 status:404 size:57 referer:- ua:Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+) reqtime:0.046 upsttime:0.044 time:21/Jul/2015:08:11:08 +0900 host:198.27.66.194 request:GET /qa/tag/co2?login=facebook HTTP/1.0 status:302 size:20 referer:- ua:Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+) reqtime:0.037 upsttime:0.035 time:21/Jul/2015:08:11:15 +0900 host:198.27.66.194 request:GET /qa/?hauth.start=Facebook&hauth.time=1437433868 HTTP/1.0 status:404 size:57 referer:- ua:Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+) reqtime:0.015 upsttime:0.013
404で存在しないページをクロールするのが既に謎ですが、さらに302エラーも発生しています。
どうやらTwitterやFacebookでOAuthを試みているようです。302エラーで分かる通り、そもそもこのWebサイトではそのようなパラメータは利用していません。明らかに誤ったプログラムによって機械的にアクセスしています。
MJ12botは何のためのBot?
ここで素朴な疑問が湧きます。「MJ12botって何?」
クローラーのユーザーエージェントに書きだされたアドレスにアクセスすると以下のページヘリダイレクトされます。
Site Explorer Results – Summary – Majestic
まとめると、イギリス発症のMajestic-12というプロジェクト。
機械的にサイトに関する情報を蓄積しており、その情報はSite Explorerで使われる。
Site Explorerとはサイトのバックリンクやアンカーテキストなど、サイトのプロファイルを調べることができるサイト。
サイト管理者なら無料で使えるが、競合のサイト等を調べるのは有料となる。
つまり、主に英国で展開している有料のSEOツールためのボットということだ。
Google Analyticsやウェブマスターツールがあれば、自分のサイトの情報はいくらでも見ることができるので、噛み砕いて言うと「MJ12botは有害でしか無い」と言える。
MJ12botのアクセスを規制する
せっかくなので日本のサイト運営者にとって迷惑でしか無いbotも紹介します。
MJ12bot
幸い、上記の解説サイトでrobot.txtを解釈することができるとあるので、遠慮なくアクセス規制します。
User-agent: MJ12bot Disallow: /
Ahrefs
同じようなサービスであるAhrefsのbotも結構な頻度でアクセスがあるので、利用する予定がないなら拒否します。
User-agent: AhrefsBot Disallow: /
WebMeUp
同じくSEOツールを提供するWebMeUpも拒否します。
User-agent: BLEXBot Disallow: /
Yandex
ロシアの検索エンジンYandexも日本では無意味なので拒否します。
User-agent: Yandex Disallow: /
baidu
他にも日本での検索サービス事業が終了してほどんど価値の無くなったbaiduも行儀の悪いbotとして有名なのでブロックをお勧めします。
User-agent: baiduspider Disallow: /
SemrushBot
ログを見てみると、それほど多く無いながらも403を断続的に出していた。
User-agent: SemrushBot Disallow: /
一定の数は許可する場合
少しのアクセスなら許可するという場合は「Crawl-delay」でディレイの時間を指定します。
単位は秒なので以下の設定だと「10分に一度だけ許可」となります。
User-Agent: MJ12bot Crawl-delay: 600
ちなみにGoogle botやMSN botは専用の管理画面でクロールの頻度をコントロールできます。どちらで設定しても有効になりますが、robot.txtで制御する場合は以下のようになります。
User-Agent: bingbot Crawl-delay: 600 User-Agent: Googlebot Crawl-delay: 600
正しく動作するか不安な方は以前投稿した「Googlebotを手懐ける!robots.txtの書き方とrobots.txtテスターの使い方」の方法を使えばテストできるので試してみてください。
追記
以上の対策をして数日経過しましたが、かなりサーバへの異常なアクセスが制御できました。
まだ、多少は変なアクセスがありますが、botによる無視して良い程度のエラーです。
とりあえず以上の設定を追加しておけばリソースに影響をあたえるようなbotは制御することができます。
しかし、サイト全体を3秒に1回アクセスするという行為が迷惑になることくらい理解できそうなものですが、何を考えて設計しているのでしょうか?
まさしく「雉も鳴かずば撃たれまい…」といった心境になります。
私のサイトはMJ12botとNutchにありもしない外部リンクをデータをGoogleコンソールにつけられました。
Nutchも止めた方が良いですよ。
Nutchも止めました。
情報ありがとうございます。