DDOS に対する防御は体系的なプロジェクトです。攻撃にはさまざまな種類があり、防御コストは高く、多くのボトルネックがあります。防御は受動的で無力です。 DDOS の特徴は、分散型で、帯域幅とサービス攻撃、つまり、レイヤ 4 トラフィック攻撃とレイヤ 7 アプリケーション攻撃をターゲットにすることです。対応する防御ボトルネックは、レイヤ 4 では帯域幅、レイヤ 7 ではアーキテクチャのスループットです。
1. 1 秒あたりのリクエスト数を制限する
ngx_http_limit_req_module モジュールは、リーキー バケットの原則を使用して、1 秒あたりのリクエスト数を制限します単位時間あたりのリクエスト数が制限を超えた場合、503 エラーが返されます。
設定は 2 か所で設定する必要があります:
nginx.conf の http セクションでトリガー条件を定義します。複数の条件を指定できます
場所でトリガー条件に達したときにnginxによって実行されるアクションを定義します
http { limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s; //触发条件,所有访问ip 限制每秒10个请求 ... server { ... location ~ \.php$ { limit_req zone=one burst=5 nodelay; //执行的动作,通过zone名字对应 } } }
パラメータの説明:
$binary_remote_addr バイナリリモートアドレス
zone=one :10m ゾーン名を 1 として定義し、セッション (バイナリ リモート アドレス) を保存するためにこのゾーンに 10M メモリを割り当てます。1m のメモリで 16,000 セッションを保存できます
rate=10r/s; 制限頻度を 1 秒あたり 10 に設定します。 リクエスト
burst=5 頻度制限を超えるリクエストの数は 5 つまでです。1、2、3、および 4 秒間のリクエストの数を想定します。が 1 秒あたり 9 の場合、5 秒目に 15 のリクエストが許可されます。逆に、最初の 1 秒に 15 のリクエストがある場合、2 番目の秒に 5 つのリクエストが配置されます。2 番目の秒に 10 を超えるリクエストは直接 503 になります。 、複数秒間の平均レート制限に似ています。
nolay 制限を超えたリクエストは遅延せず、設定後は 1 秒以内に 15 件のリクエストが処理されます。
2. IP 接続の数を制限する
ngx_http_limit_conn_module の設定方法とパラメーターは http_limit_req モジュールと非常によく似ていますが、パラメーターが少なく、より単純です
http { limit_conn_zone $binary_remote_addr zone=addr:10m; //触发条件 ... server { ... location /download/ { limit_conn addr 1; // 限制同一时间内1个连接,超出的连接返回503 } } }
3. ホワイトリスト設定
http_limit_conn および http_limit_req モジュールは、単一 IP の単位時間あたりの同時実行数とリクエストの数を制限しますが、ロード バランシングやリバース プロキシなどがある場合は、 Nginx の前の lvs または haproxy として、nginx が取得するすべての接続またはリクエストはロード バランシングからのものです。現時点では、ロード バランシング接続とリクエストは制限すべきではありません。地理モジュールとマップ モジュールのホワイトリストを設定する必要があります:
geo $whiteiplist { default 1; 10.11.15.161 0; } map $whiteiplist $limit { 1 $binary_remote_addr; 0 ""; } limit_req_zone $limit zone=one:10m rate=10r/s; limit_conn_zone $limit zone=addr:10m;
その他の Nginx 関連の技術記事については、Nginx の使用方法チュートリアル 列を参照して学習してください。
以上がnginx リバースプロキシ後の DDoS 攻撃を防ぐ方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。