ApacheでDOS攻撃対策してみた 第一回

こんにちは!グローバルソリューション事業部の田口です。

クララオンラインではお客様へ国外・国内問わず、お客様に多くのサーバを提供しております。
サーバの用途はお客様によって多岐にわたりますが、WEBサイトを公開しているお客様はとても多くいらっしゃいます。

WEBサイトはインターネット上のだれからでも見れるようにすることが多いですが、その際につきまとう問題の1つがwebサイトへの攻撃です。

お客様から「サーバが重い~、見にくい~、表示されない~」等々のお問い合わせをいただいた時、サーバを調べてみると怪しげなIPアドレスから大量のHTTPリクエストを受けていているシーンがよく(とてもとても)あります。

厄介なことにHTTPで大量の通信があった場合に、それを攻撃と判断するかアクセス過多と判断する指標はとても難しいのです。

例えば

・単一のIPアドレスを使った複数人がHTTPを行った場合

・単一のIPから特定人物が大量のHTTPリクエストを行った場合

どちらもサーバ側(受け取り側)から見ると同じ大量の通信に見えるからです。ブロックすべき通信とそうではない通信をサーバでどのように判断させるか難しいのがDOS対策の難しいところですね。

今回はApacheのmod_dosdefectorモジュールを利用して同一のIPアドレスから一定以上のアクセスがあった場合にDOS攻撃とみなし接続を拒否する設定を行い、効果の程を検証したいと思います。

 

■Ajenda

1.検証サイトにDOS攻撃を行いサーバのロードアベレージを計測する。(対策前)

2.検証サイトにmod_dosdefectorをインストールする。

3.検証サイトにDOS攻撃を行いサーバのロードアベレージを計測する。(対策後)

※mod_dosdefectorとは
動的にDoS攻撃を検出しブロックするApache moduleです。
http://d.hatena.ne.jp/keyword/mod_dosdetector

▼検証環境
CentOS release 6.5 64bit
httpd-2.2.15-39.el6.centos.x86_64
httpd-devel-2.2.15-39.el6.centos.x86_64
httpd-tools-2.2.15-39.el6.centos.x86_64
gcc-4.4.7-11.el6.x86_64
mod_dosdetector-0.2

 

1.検証サイトにDOS攻撃を行いサーバのロードアベレージを計測する。(対策前)

mod_dosdefector導入後の効果を計るために、検証用サイトへDOS攻撃を行ってみます。

wordpress

さてさてDOS攻撃するとどうなるのでしょうか。当然ですが、DOS攻撃の手法は省略します(震え声)。

teraodosb

盛大に高負荷状態となりました。

これが本番環境のサーバなら確実にサービス影響がでてしまいますね。

 

2.検証サイトにmod_dosdefectorをインストールする。

基本的なLAMP構成は構築済みとします。Apache VirtualhostでWordpressのサイトを準備しました。
併せてhttpd-devel,gccが必要になりますので、事前にインストールをしておきます。

下記URLからmod_dosdefectorのダウンロードを行い、サーバに配置します。
ダウンロードしたファイルはmod_dosdetector-0.2.tar.gzです。

http://sourceforge.net/projects/moddosdetector/

解凍し、ディレクトリに移動します。

ソースからmod_dosdefectorをビルドします。

ビルドしたmod_dosdefectorをインストールします。

configにmod_dosdefectorの設定パラメータを追記します。mod_dosdefectorは閾値を超えたリクエスト数がきた場合、該当通信をDOSの疑いありと判断して、環境変数に1をセットします。なお環境変数がセットされた場合、どのような振る舞いをさせるかはmod_dosdefectorでは設定できないようです。そのためセットでmod_rewriteを使用し、変数がセットされた場合の通信はこのエラーを返すといった設定を行うことが多いようです。

DOSとみなされた場合の動作をVirtualboxディレクティブ内に追記します。下記設定では、SuspectHardDoSに変数1がセットされたリクエストに対しては503エラーを返す設定を行っています。

3.検証サーバ(mod_dosdefected実装済み)にDOS攻撃を行う。

さて、DOS防御の術を身に付けた検証サーバはどうなるでしょうか。さっそく攻撃を行ってみます。

teraodosb

おおおおおおおおお!!サーバへの負荷は軽減されたようです。データベースを参照する等ディスクI/Oが発生するコンテンツならかなり効果が期待できるのではないでしょうか。

…しかし、残念な点がありました。

MaxClientsに達しています。今回の設定ではDOSの疑いありと判断した場合はmod_rewriteを利用してエラーページを返すようにしていますが、Apacheがリクエストに対して応答していることに変わりはありません。今回の検証で達成できたのはサーバの負荷を軽減させることだけでした。次回はmod_dosdefectorになにかを組み合わせてより良い手法を探ってみます。

ではまた次回!!

Share on LinkedIn
LINEで送る
Pocket

claraer

claraer