筆者は最近,Apache HTTPサーバーに対するサービス拒否攻撃を防御するWebベースのセキュリティ・ツール「mod_evasive」を使い始めた。mod_evasiveは特定の挙動を探してそれをブロックするモジュールである。

 mod_evasiveは,筆者が昨年の12月に紹介した「Suhosin」に似ている(関連記事:PHPの「守護神」Suhosin)。SuhosinはPHPスクリプティング・エンジンの安全性を大幅に高めるパッチである。Suhosinは,害を及ぼす危険性を持つありとあらゆるWebベースのコンテンツを検出し,それらがPHPエンジンを越えてシステムやネットワークに到達するのを防ぐ上で役に立つ。

 mod_evasiveが機能する仕組みを説明しよう。mod_evasiveはまずURLリクエストをApacheサーバーに送信するIPアドレスの記録を取る。その後,あらかじめ設定した許容範囲を超えるリクエストがいずれかのIPアドレスから送信されていないか測定する。許容範囲を超えるリクエストがあった場合,そのIPアドレスからのリクエストは一時的にブロックされる。

 他の多くのApacheモジュールと同様に,mod_evasiveも管理者がモジュールの挙動を制御する様々なパラメータを設定することを可能にする。例えば,1つのIPアドレスが自分のサイト全体から指定した時間内(設定項目は「DOSPageInterval」)にリクエストできるページ数の上限(設定項目は「DOSSiteCount」)や,1つのIPアドレスが指定した時間内(前述の「DOSPageInterval」)リクエストできるページリロード回数の上限(設定項目は「DOSPageCount」),リクエストを出しているIPアドレスが上限を超えたときに,それをブロックする時間(設定項目は「DOSBlockingPeriod」)---などを設定できる。

 理解しやすいように,例を挙げて説明しよう。DOSSiteCountを100に,DOSPageCountを3に,DOSPageIntervalを2に,そしてDOSBlockingPeriodを10に,それぞれ設定した場合,mod_evasiveは「あるIPアドレスが100以上の異なるページをリクエストした場合,あるいは2秒以内に同じページを3回以上リロードした場合,そのIPアドレスは10秒間ブロックする」といったように動作する。

 設定可能なパラメータは,他にもいくつかある。mod_evasiveがIPアドレスの記録に使用するハッシュ・テーブルのサイズも,設定が可能だ。ハッシュ・テーブルのサイズが大きければ大きいほど,記録できるIPアドレスの数は多くなる。さらに,IPアドレスがブロックされたときに簡単な通知を受け取る電子メール・アドレスを定義することも可能だ。そして,受け取ったブロック通知メールに載っているIPアドレスを記録するようなログ・ディレクトリを設定することもできる。mod_evasiveはこのログを使って,同一のIPアドレスについて管理者に複数のメッセージを送信することを防いでいる。

 全体的に見ると,mod_evasiveをApacheに追加したのは妥当であるように思える。実際に,一部の侵入者を撃退する助けになってくれるからだ。だが設定を慎重に行わないと,Webページの先読み込みをどんどん行うブラウザやプロキシ・サーバーを使うような,比較的悪意のないユーザーまでブロックしてしまう可能性がある(こういった先読みは通常,ブラウジング体験を向上させたり,全体的なブラウジング速度を高めたりするのに使われる)。従って,設定を慎重に行い,(メール送信機能を使う場合は)mod_evasiveが送信する電子メールをきちんと監視して,設定が厳しすぎないかどうか判断する必要がある。

 mod_evasiveのソース・コードは,開発者のJonathan A. Zdziarski氏のWebサイトから入手できる(Zdziarski氏のWebサイト)。ソース・コードなので,Apacheのapxsツールを使ってコンパイルしなければならない(詳細については,readmeファイルを参照のこと)。多くの場合,Linux管理者にとってこのことは問題にならないだろう。だがapxsや他の必要なツールを持っていない可能性のあるWindowsユーザにとっては,このことは問題かもしれない。

 Windows用のapxsは,Apache LoungeでPerlスクリプトとして提供されている。これを使うには,何らかのApache関連のライブラリが必要になることに注意しよう。従って,ApacheをWindowsにインストールするときは,カスタム・インストールを選んで,インストールの一部として「Build Headers and Libraries(ヘッダとライブラリを構築する)」を選択する必要がある。apxsツールを使う前に,Apacheインストール・ディレクトリのlibサブディレクトリ内にライブラリがあることを確認しよう。

 手間を省くために,ソース・コードを含む,あらかじめコンパイルされたWindows用mod_evasiveも用意されている。

 最後になるが,mod_evasiveはApacheをサービス拒否攻撃から守るのに効果的であるものの,決して万能薬ではないということは,肝に銘じておかなければならない。たとえmod_evasiveを使っていても,攻撃者は帯域幅を飽和させたり,Webサーバーに過剰な負荷をかけたりできる可能性がある。従って,このことを肝に銘じて,こうした可能性が現実のものになるのを防ぐために,他の手段も講じるといいだろう。