mod_evasive を導入してみる

2007年9月19日

Ping一括配信サービス Pingoo! にPing を送ると、お返しに鬼のような連続アクセスがあるので困る。サービス自体は便利なのになあ。

ということで、Nuclear Elephant: mod_evasive をApache に組み込んで、連続アクセスを遮断するようにして対応してみる。

インストール

Apache 2 でDSO が有効になっているならば、apxs を利用すれば簡単。Vine 3.2 では以下の手順でインストールできました。

$ wget http://www.zdziarski.com/projects/mod_evasive/mod_evasive_1.10.1.tar.gz
$ gtar xvzf mod_evasive_1.10.1.tar.gz 
$ cd mod_evasive_1.10.1.tar.gz 
$ cd mod_evasive
$ sudo /usr/bin/apxs -i -a -c mod_evasive20.c

httpd.conf に追記されるモジュールロード部分のパスが間違っているので、

LoadModule evasive20_module   modules/mod_evasive20.so

と記述。

設定

<IfModule mod_evasive20.c>
  DOSHashTableSize 3097
  DOSPageCount 2
  DOSSiteCount 50
  DOSPageInterval 1
  DOSSiteInterval 1
  DOSBlockingPeriod 10
  DOSLogDir "/var/log/apache2/mod_evasive"
</IfModule>

これで、あるIP アドレスから、1秒間に2回以上の同一ページへのアクセスがあったり、50回以上のリクエストが送られてきたときに、10秒間アクセスを拒否する動作をする、と。

ログを見てみると、トップページやフィードへのアクセスが微妙な間隔を空けて集中しているので、5秒に3回のリクエストがあったら制限するように変更してみよう。