Apache Webサーバーを低速読み取り攻撃から保護した経験を共有したいと思います。 この攻撃がここ (英語)とここ (ロシア語)で読めるという事実。
考慮された方法では、mod_evasiveおよびmod_securityの拡張機能を使用してサーバーを保護できます。最も重要なことは、30分未満の実装時間です。 設定はUbuntuバージョン12.04 + Apache 2.2で行われました。 Webサーバーの他のバージョンと他のオペレーティングシステムの設定は、主にソフトウェアパッケージのインストール機能と、実際にインストールされたプログラムとモジュールのバージョンが異なります。
パッケージのインストール
保護されたサーバーはUbuntuにインストールされるため、Apacheに必要なモジュールのインストールは1つのコマンドで実行されます。
sudo apt-get install libapache2-mod-evasive libapache-mod-security
mod_evasiveパッケージは 、 アプリケーションレベルの DDOS フラッド攻撃に対する保護を提供しますが 、 mod_securityは、スローリード攻撃などの標的型攻撃に対する保護を提供します。
mod_securityは、Webサーバーを保護するオープンソースソフトウェアファイアウォールであり、 Trustwave SpiderLabsによって開発されています 。
mod_evasiveの構成
モジュールを機能させるには、Apacheを書き込む権限を持つログを保存するためのフォルダーが必要です(Webサーバーはwww-dataユーザーから起動されることを前提としています)。
sudo mkdir /var/log/mod_evasive
sudo chown www-data:www-data /var/log/mod_evasive/
設定を使用してファイルを作成します。
sudo nano /etc/apache2/conf.d/modevasive
<ifmodule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 90
DOSLogDir /var/log/mod_evasive
DOSEmailNotify EMAIL@DOMAIN.com
DOSWhitelist 127.0.0.1
</ifmodule>
電子メールは、検出された攻撃に関する情報の受信者のアドレスに置き換える必要があります(手紙を送信するには sendmail / postfixが必要です)。
これでmod_evasiveのセットアップが完了しました。
mod_securityの構成
mod_securityはファイアウォールであるため、機能するには一連のルールが必要です。
SourceForgeのページから最新バージョンのルールをダウンロードできます。 さらに、ルールの自動更新を設定することもできます。これについては、 ここで詳しく説明します 。
ダウンロードしたアーカイブには、いくつかのフォルダーがあります。 base_rulesフォルダーにある基本的なルールに興味があります。
ルール用のフォルダーを作成し、SourceForgeからダウンロードして解凍したファイルからルールをコピーします。
sudo mkdir /etc/apache2/mod_security_rules
sudo mv base_rules/* /etc/apache2/mod_security_rules
sudo chown -R root:root /etc/apache2/mod_security_rules
次の内容でmod_securityの構成ファイルを作成します。
sudo nano /etc/apache2/conf.d/modsecurity
<ifmodule mod_security2.c>
Include mod_security_rules/*.conf
SecWriteStateLimit 100
</ifmodule>
この構成は、コピーしたばかりのルールを接続し、さらに、個々のIPのストリーム数に制限を設定します。これは、 SERVER_BUSY_WRITEモードにすることができ、 Slow Loris / SlowHttpなどの攻撃の可能性を防ぎます。
Ubuntuの32ビットバージョンの場合、設定はここで終了します。
x64には、libxmlの接続を妨げるライブラリパスの違いに関連するmodsecurityのバグがあります。 これを修正するには、最初に行うことは、libxml2.so.2ライブラリの場所を特定することです。
2つのオプションがあります:/usr/lib/x86_64-linux-gnu/libxml2.so.2または/usr/lib/i386-linux-gnu/libxml2.so.2 次に、/ etc / apache2 / mods-enabled / mod-security.loadファイルを編集し、接続されたライブラリが存在するパスを/usr/lib/libxml2.so.2でシステム上のライブラリパスに置き換えます。locate libxml2.so.2
モジュールが接続されていることを確認します。
sudo a2enmod mod-evasive
sudo a2enmod mod-security
Apacheを再起動して構成を適用します。
service apache2 restart
テスト中
テストには、 slowhttptestユーティリティを使用します。 プロジェクトのページでその構成とインストールについて読むことができるので、すぐにアプリケーションに移りましょう。
slowhttptest -c 65539 -B -g -o my_server_stats -i 110 -r 200 -s 8192 -t FAKEVERB -u DOMAIN.COM -x 10 -p 3
プログラムの出力を信じている場合、すでに5秒でサーバーが利用できなくなります。
Sat Jun 2 16:41:37 2012:slow HTTP test status on 5th second:
initializing: 0
pending: 564
connected: 217
error: 0
closed: 0
service available: NO
そして、ここに私がApacheログに書いたものがあります:
tail /var/log/apache2/error.log
[Sat Jun 02 16:41:38 2012] [warn] ModSecurity: Access denied with code 400. Too many threads [101] of 100 allowed in WRITE state from xxx.xxx.xxx.xxx - Possible DoS Consumption Attack [Rejected]
そのため、サーバーは遅い読み取り攻撃の影響を受けにくくなり、 IPアドレスによって攻撃ユーザーを一時的にブロックします 。
この保護方法の主な利点は、構成のシンプルさと速度、オープンソースソリューションの使用です。
弱点は、さまざまなIPアドレスからの分散攻撃です。