DoS攻撃に対する耐性の実験の前に、ふつーの負荷に耐える、ふつーの設定をすること。
これ、とっても大事です。
そんなApacheの設定の入れ方についてお話します。
といっても、まだちょっといじっていないので、暫定的な、参考程度の値だと思ってください。
目安程度にはなると思うんですけどね。
というかね、ためしにちょっと負荷をかけたら、うちのサーバがダウンしてしまいまして…泣きながら設定を変えました。
なお、環境は、CentOS 5.8 x64
Hyper-V下の仮想マシンでLinuxIC2.1導入済み。
CPUは物理的には E3-1220で、4コアを割り当て。
物理メモリの割り当ては 1GB です。
最初の設定はこんなかんじでした。(今回は、prefork しか変更していないため、それのみ紹介します)
<IfModule prefork.c> StartServers 8 MinSpareServers 5 MaxSpareServers 20 ServerLimit 256 MaxClients 256 MaxRequestsPerChild 4000 </IfModule>
たぶんだいたいデフォルトだったんだろうと思います。
ここに対して、別のサーバから次のように負荷をかけてみました。
apacheに付録でついてくる ab っていう負荷テストツールなんですが。
[root@attacker]# ab -k -c300 -n 10000 http://code.zobe.jp/
↑よい子のみんなはマネしないで!http://…のところは、おとうさん、おかあさんのサーバにしようね!
これを5秒だけ実行したところ。
まさかのサーバダウン。
Webがみられないだけじゃない。sshでも入れない。
コンソールからはいったれと思ったものの
重すぎて入れず。
なにが起きてるって、調べ方は省略しますが、
- 負荷テストツール ab により、Apacheに同時接続300が来る
- WordPress のプログラムが同時に300起動する
- メインメモリを消費し尽くす
- さらに不足した分は、HDDのスワップ領域に書き込まれる
- 数GBに及ぶHDDへのランダムな読み書きが…システム全体を高負荷状態に追い込み、なにもできなくする
となっているのです。
結局、さっきの設定を
<IfModule prefork.c> StartServers 10 MinSpareServers 30 MaxSpareServers 40 ServerLimit 55 MaxClients 50 MaxRequestsPerChild 1000 MaxMemFree 1024 </IfModule>
ここまで減らしたところ、スワップ領域がほとんど使われずに動作し、負荷に耐えきることができました。
具体的には、攻撃を受けても、サーバダウンには至らず、Webもだいぶ遅いけどどうにか閲覧可能というところです。
上記設定、ちょっと欲張って
<IfModule prefork.c> StartServers 10 MinSpareServers 30 MaxSpareServers 40 ServerLimit 60 (← 5増やした) MaxClients 55 (← 5増やした) MaxRequestsPerChild 1000 MaxMemFree 1024 </IfModule>
こうするだけで、メモリ不足でサーバダウンします。まじです。危ないです。
メモリの利用状況を考えて節約大事です。
なお、Web領域にWordPressを入れずに、単にhtmlと画像ファイルだけ、という状態を試したところ、
いっくら負荷試験ツールで負荷をかけても、Apacheの設定デフォルトのままで大丈夫でした。
やっぱ WordPress はそれなりに重いってーわけですね。
そろそろDoS攻撃関係の調査もしてみようと思います。
最近のコメント