#■ 概要
・Webサーバのデファクトスタンダードである Apache
・C10K問題を解決するために開発された Nginx
どっちの方がDoS攻撃(F5攻撃)に強いか、検証してみました。
#■ F5攻撃とは
F5攻撃とは、ブラウザの再読み込みを何度も繰り返すことにより、大量のリクエストをサーバに送信し、サイトをダウンさせるDoS攻撃の1つです。
#■ 検証環境
◆Apache HTTP Server 2.4.6(prefork MPM)
⇒ マルチプロセス型
◆Apache HTTP Server 2.4.6(worker MPM)
⇒ マルチプロセスとマルチスレッドのハイブリッド型
◆Apache HTTP Server 2.4.6(event MPM)
⇒ イベント駆動型(Apache2.4 から導入)
◆Nginx 1.12.0
⇒ イベント駆動型
※OSは、CentOS 7.3。
※Apacheは、全てのマルチプロセッシングモジュールで検証しました。
マルチプロセッシングモジュールの切替方法はこちら。
http://qiita.com/nk9bb8/items/4e7e2199c6c7b824f550
※本検証では、DoS対策を行わない状態で検証しました。
#■ 検証(1)
###◆検証方法
・同時接続数:10
・同時接続数:50
・同時接続数:100
・同時接続数:200
のリスエストを発行し、1秒間のリクエスト処理件数を計測しました。
###◆検証結果(1秒間のリクエスト処理件数)
同時10 | 同時50 | 同時100 | 同時200 | |
---|---|---|---|---|
Apache(prefork MPM) | 2,280 | 2,176 | 1,943 | 1,212 |
Apache(worker MPM) | 2,919 | 3,232 | 3,369 | 1,991 |
Apache(event MPM) | 2,332 | 2,734 | 3,368 | 2,545 |
Nginx | 2,460 | 3,079 | 2,890 | 2,405 |
###◆まとめ
マルチプロセス型の Apache(prefork MPM)は、同時接続数に比例し、1秒間の処理件数は低下しますが、
イベント駆動型の Apache(event MPM)や Nginx は、同時接続数が増えても、1秒間の処理件数は一定です。
#■ 検証(2)
###◆検証方法
・同時接続数:100
・総リクエスト数:100万
のリスエストを発行し、ロードアベレージを計測しました。
(DoS攻撃中のロードアベレージの平均値と最大値)
###◆検証結果(ロードアベレージ)
||ロードアベレージ(平均値)|ロードアベレージ(最大値)|
|:--|--:|--:|--:|
| Apache(prefork MPM)|190.3|249.7|
| Apache(worker MPM)|285.6|380.5|
| Apache(event MPM) |56.1|75.4|
| Nginx |3.0 |3.5|
###◆まとめ
イベント駆動型の方が、システムに与える負荷は低いです。
特に、Nginx は、DoS攻撃を感じないレベルです。
#■ 総括
DoS攻撃に強いのは、Nginx でした。
今回の検証ではDoS攻撃(F5攻撃)で検証しましたが、アクセス数の多いサイトでもイベント駆動型が適していると言えます。