しつこくアクセスしてくるBotからのアクセスを拒否する方法(MJ12Bot編)

サイトを運営していると、よくわからないBotからの大量アクセス被害に合うことがあります…。
まだ当サイトは開設間もないのでこれといった問題ないですが、サイト規模が大きくなってくるとこれによるサーバー負荷による表示速度の低下などの影響が発生してきます。

 

具体例で挙げると「MJ12bot」の偽物(?)が代表的でしょうか。
今回は「MJ12bot」からのアクセスを拒否する方法についてご紹介したいと思います。

 

 

「MJ12bot」とは

MJ12bot」は、イギリスのMajestic12社による分散型Webクローラーだそう。
MJ12botでは、Webサイトのキャッシュ取得は行わず、ウェブサイト間のリンク関係をマップして検索エンジンを構築しており、404ページや301ページなどの存在しないページにもアクセスしていきます。

 

このクローラーによって集積されたデータは、専用ツールを用いる事で自サイトのバックリンクに関するデータを取得出来るらしいですが、日本では馴染みが無さすぎです。ぶっちゃけ要らないです。

 

また、「MJ12bot」はrobots.txtによるクロールの停止は可能なようですが、これはあくまで本物の「MJ12bot」の場合です。
「MJ12bot」の名前を語った偽物・悪質なBOTも存在するそうで、これらはrobots.txtを無視し、サーバーに負荷をかけ、極端にサイトの表示パフォーマンスを落としたり、500エラーを引き起こす事もあります。

 

偽物の「MJ12Bot」からのアクセスのみの対策を行う場合、いたちごっこになる可能性が非常に高いため、本物を含めた「MJ12bot」のアクセスを拒否するのが手っ取り早いでしょう。

 

対策手段

・Wordpressプラグインを用いてアクセス拒否を行う
・.htaccess を直接記述してアクセス拒否を行う

 

対策手段としては、まずこれらが筆頭に挙げられます……が、Wordpressプラグインで対策を行う場合、キャッシュ系プラグインを導入していると正常に動作しない物ばかりです。
サイトの表示速度向上のためにキャッシュプラグインを導入しない方は少ないと思いますし、うちでも導入していますので、プラグインを用いての対策は論外です。

 

なので、今回はプラグインを用いず .htaccess を直接記述する方法で対策を実施しようと思います。

 

サーバー上のどの.htaccessファイルに追記するのが的確か?

WordPressには、複数の.htaccessファイルが存在しており、どこの階層に存在するものに追記するのが的確でしょうか?

 

先に述べた通り、アクセスブロック対策を行う上で障害になるのはキャッシュプラグインです。
なので、まず考えるべきは「キャッシュプラグインより先にアクションを起こす!」という事です。

 

例として、当サイトではキャッシュプラグインとして「WP Fastest Cache」を利用しており、このプラグインはWordpressの管理画面-[設定][一般]で設定した「サイトアドレス (URL)」のPATHに対応するディレクトリに存在する.htaccessにキャッシュ表示を行うためのRewrite記述を書き込みます。
よって、今回のBotアクセスを拒否するには、「サイトアドレス (URL)」のPATHに対応するディレクトリに存在する.htaccessに追記するか、これより上位のディレクトリに.htaccessを作成し、記述するのがベストと言えるでしょう。

 

当サイトでは、Wordpressのルートディレクトリをサイトアドレスから省いていますので、下記ディレクトリ構造の赤文字で示した.htaccessファイルがキャッシュプラグインによる記述が行われているものであり、今回追記対象としたファイルです。

 

/    
  wp/  
    wp-admin/
    wp-content/
    wp-includes/
    .htaccess
  .htaccess  
  index.php  

 

.htaccessでアクセスを拒否する

今回は、複数のUserAgentを拒否する方法の例として、アクセス元のUserAgentが「MJ12bot」か、RSSから記事を盗む迷惑Botとして以前に紹介した「FeedWordPress」の場合にアクセスを拒否する、といった記述にしておきます。
複数のBotを拒否する際の参考にしてください。

 

※.htaccess に下記を追加する際、元々記述されている「# BEGIN ○○」~「# END ○○」内に記述してしまわないよう十分に注意して下さい。
また、.htaccess ファイルは構文を正しく変更しないとサーバーエラーを引き起こしますので、慎重に作業を行って下さい。

 

.htaccess

 

RewriteCond行の最後のフラグ指定について

[OR]は複数条件を指定するフラグ、[NC]は大文字小文字区別なしを指定するフラグです。
両方を指定する場合は、上記.htaccessへの追記内容サンプルの通り、カンマ区切りで[NC,OR]や[OR,NC]のように記述出来ます。

 

これは余談ですが、[OR]は見ての通り「もしくは」の意味でわかりますが、[NC]については「No Case」の略です。フラグ文字を覚えるために合わせて覚えておくと良いかもしれませんね!

 

最後に

世の中には沢山のBotが存在し、有益な物、有害な物、有害ではないが恩恵が無い物、様々なBotが存在します。
正直、来てもらわない方が幸せなBotが殆どです。
ですが、一部を許可するよりも、一部を拒否したほうが影響も少なく、問題は起きにくいので、地道に拒否を行っていくしかないのでしょう。

 

来年の元旦には「邪魔なBotが世の中から無くなりますように」とお願いしよう…。
みなさんも是非ご一緒に…。