先日、いつものように、適切なタイミングではなく、サーバーでホストされているサイトの1つに対するDDoS攻撃。 DDoS攻撃は異なり、今回は攻撃者がHTTPフラッドを開始しました。
フラッドは、トラフィックの量がそれほど多くなく、リクエストの数も多かったです。 さらに、運が良ければ、リクエストは同じタイプではなく、絶えず変化しています。 その時点でソフトウェアセキュリティツールから得たものはすべて、このような洪水に効果的に対処できなかったため、鉄のソリューションを使用する必要がありました。
私は鉄の解決策が正しい選択だと考えていますが、誰もがアクセスできるわけではなく、常にそうであるわけではありません。 さらに、少し実験したかった。
長く成功しているnginx + Apacheバンドルの機能とnginxのドキュメントの詳細な調査の後、
ngx_http_limit_req_moduleモジュールに基づいたソリューションが生まれました。
このモジュールを使用すると、特定のセッションまたは単一のアドレスからのリクエストの数を制限できます。 その機能については詳しく説明しませんが、ドキュメントは誰でも利用できます。
私がしたこと
nginxがngx_http_limit_req_moduleモジュールでビルドされているかどうかを確認し、サーバー構成ファイルに次の行を入力しました。
http {<br> # , . <br> # . <br> <br> limit_req_zone $binary_remote_addr zone=one:10m rate=2r/s;<br> <br> # "one" <br> # 10 <br> # 2 . <br> <br> # <br> # .<br> <br> ...<br> <br> # .<br> server {<br><br> ...<br><br> location / {<br> # (zone) <br> # (burst). <br> # , , <br> # . <br> # , <br> # . <br> # "Service unavailable" (503).<br> <br> limit_req zone=one burst=4;<br> } <br><br> * This source code was highlighted with Source Code Highlighter .
*モジュールのドキュメントページの設定例と説明
私が得たもの
途方もない頻度でサーバーを「空洞化」し、応答でHTTPエラー503を受信し始めたすべてのボット。
tail -1000 /var/log/nginx-access.log | grep "503" | cut -f1 -d "" | ソート-u
その後、ファイアウォールテーブル(FreeBSDとIPFWがあります)にそれらを配置するのは簡単ではなく、すべてをcrontabに配置します。
実際、それがすべてです。 Nginxとこのモジュールを実装したIgor Sysoevに感謝します。
動的で高頻度のHTTPフラッドリクエストから保護するこの非常に手頃な方法が役立つことを願っています。