最近、「スローロリス」と呼ばれるスクリプトが注目を集めています。 slowlorisが行うことの基本的な概念は新しい攻撃ではありませんが、最近の注意を払って、一部のApache Webサイトに対する攻撃がわずかに増加しているのを目にしました。
現時点では、これに対する100%の防御策はないようです。
これまでに決定した最善の解決策は、MaxClientsを増やすことです。
もちろん、これは攻撃者のコンピュータの要件を増やすだけであり、実際にサーバーを100%保護するわけではありません。
他の1つのレポートは、Apacheサーバーの前でリバースプロキシ(Perlbalなど)を使用すると、攻撃の防止に役立つことを示しています。
Mod_evasiveを使用して1つのホストからの接続数を制限し、mod_securityを使用して、slowlorisによって発行されたように見えるリクエストを拒否することが、これまでのところ最良の防御策のようです。
ServerFaultの誰かがこのような攻撃を経験していますか?その場合、それを防御/防止するためにどのような対策を講じましたか?
注:Windows IISサーバーは影響を受けないと私が理解しているため、この質問はApacheサーバー用です。
私はそのような攻撃を経験しました...真夏の真ん中(6月23日)に、あなたは田舎にいてビールを飲むことになっています:>
私は自分のApacheを Varnish の後ろに置きました。これは、slowlorisから保護されるだけでなく、かなり高速化されたWebリクエストも行います。
また、iptables
は私を助けてくれました:
iptables -I INPUT -p tcp --dport 80 \
-m connlimit --connlimit-above 20 --connlimit-mask 40 -j DROP
このルールは、1つのホストをポート80への20接続に制限します。これは、悪意のないユーザーには影響しませんが、1つのホストからスローロリスを使用できなくなります。
mod_antiloris 、そのように単純です。
すべてのApacheモジュールがスレッドセーフである場合、イベントまたはワーカーMPMに切り替えるだけで、slowlorisを打ち負かすことができます。 ref: ここ
これが他の人を助ける場合、Apache 2.2.15以降でこの問題を次の構成で克服できることがあります。
LoadModule reqtimeout_module modules/mod_reqtimeout.so
RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500
詳細はこちら: https://httpd.Apache.org/docs/2.2/mod/mod_reqtimeout.html
今のところ、サーバー上のIPごとの最大同時接続数を制限することはこれ以上ないようです。
あなたが試すことができるユーザーパッチがあります。サーバーの負荷に基づいてタイムアウトを変更しますが、そのステータスを考慮すると、深刻なテストを行わずに本番マシンで使用したくない場合があります。見てください こちら
iptablesベースのファイアウォールは、1つのipからの複数の接続からユーザーを保護するはずです。