ボットの大量アクセス、DoS攻撃対策としてApache mod_dosdetector、iptables hashlimit などを使う。アクセス数の制限、規制。
他人に恨まれることがない普通のサイト運営者でもDoS攻撃のような大量アクセスを受ける可能性が増えつつある。 サイトに短時間に大量アクセスするものはいくつかある。
サイトによっては何者かの恨みを買いDoS攻撃を受ける可能性もあるが、普通はない。 最近(2016年)個人的に問題視しているのは悪意のあるボットで、特にサイトの記事をパクるのが目的と思われる自動収集プログラムのアクセスが目立つようになってきた。 1秒間1回以上のアクセスで全ページにアクセスし、ひどい場合は503エラーが出る。 ページ数が多いサイトほど過負荷が続く。
サイトで稼ぐのが難しくなってきたためか分からないが、こういうボットが増えてきて、以前は無視していたが無視できないレベルになりつつある。 ボットのIPアドレスやホスト名を見ると、国内プロバイダーのもの、中国やアメリカのサーバーを使ったものなどいろいろある。 .htaccess で防げるものは防ぐが、基本的にこれは大量アクセスがあった後の話で、できればどこからくるか分からない大量アクセスを事前に防ぎたい。 正直、記事がパクられることより、503エラーが出続けることの方が困る。
大量アクセスを制限(規制)できるものとして mod_evasive や mod_dosdetector がある。 少し調べた印象では mod_dosdetector が良さそうだ。 同一IPアドレスからの大量アクセスを制限できる。 mod_dosdetector が良いところは、制限したいまたは制限したくないIPアドレスやホスト名を指定する際、ドメイン名だけ指定したり、正規表現も使える点。 test.example.com などホスト名(FQDN)で書く必要がなく、.example.com など部分一致でも良い。 ただ、後述の iptables もそうだが、現状これらのモジュールを使うにはレンタルサーバーではVPSなど自分でいじれるものを借りなければいけない。
iptablesのモジュールとしてlimitやhashlimitがあり、こちらは hashlimit が良さそうだ。 ただ、mod_dosdetector と違い .example.com など部分一致で制限できず、省略せず書く必要がある。 制限をかけたくないボットとしてはGoogleやBingのボットがあり、使用されているIPアドレスまたはホスト名を調べて列挙すれば良いが、新しく追加されたり変更されたりする可能性もあり、定期的にチェックする必要がある。 サイトの運営という点では mod_dosdetector の方が制限のルールが書きやすい。 サーバーはウェブサーバー以外にもいろいろあるので、そういったものには hashlimit は有用。
サイトによるが、1秒間1回以上のアクセスが20回も続けばほぼボットと言っていい。 1秒間1回以上のアクセスが10回でもほぼボットと言えなくもないが、10ページくらい一気にタブでページを開く人もいる。 Apacheのアクセスログなどを見れば、そのサイトにおけるボットや人のアクセス数やアクセスの仕方が見えてくる。 制限から外したいボットのドメイン名としては、個人的には google.com、googlebot.com、msn.com、msn.net、bing.com、yahoo.net くらいしかない。 ユーザーエージェントは偽装しやすいので制限の判別には向かない。
いきなりボットと決めつけたが、そうでない場合もある。 企業や学校からのアクセスは同一のIPアドレス・ホスト名になるため、実際には複数の人がアクセスしていてもボットのように見える。 大手のニュースサイトであれば、企業や学校のネットワークから複数の人が同時にアクセスする可能性はあるが、小規模なサイトでは可能性は低い。 小規模なサイトでも、社内の掲示板やSNS、学校の授業などで取り上げられ、一時的に同一IPアドレスからアクセスが増える可能性はある。
昨今、サイト運営者としては迷惑メールより、攻撃的なボットの方が脅威だと感じる。 IPアドレスのブラックリストとしてはDNSBL(RBL)があるが、基本的に DNSBL は迷惑メールが対象で、ブルートフォースアタックのようなサイトに対して攻撃的なボットの情報を収集しているサービスはあまりない。
迷惑なボット等の情報も収集しているサービスとしては AbuseIPDB というサイトがある。 信頼性はともかく、主な DNSBL で見つからない場合、このサイトでIPアドレスやホスト名が見つかる場合がある。 不信なアクセスを見つけた場合は AbuseIPDB で探してみると良い。
AbuseIPDB は API を公開していて、外部のサイトからブラックリストをチェックできる。 ただ、AbuseIPDB へのアカウント登録なしの場合1日1000回、アカウント登録した場合1日3000回という利用回数の制限がある。 この回数で足りる場合は有用かもしれない。 アカウント登録しない場合、API Key は空で良い。