ホームページ 運用・保守 Nginx Nginx と Nginx Plus を使用して DDOS 攻撃に対抗する方法

Nginx と Nginx Plus を使用して DDOS 攻撃に対抗する方法

May 14, 2023 pm 08:34 PM
nginx ddos

1. アプリケーション層の DDOS 攻撃の特徴

アプリケーション層 (第 7 層/http 層) の DDOS 攻撃は、通常、トロイの木馬プログラムによって開始されます。ターゲット システムの脆弱性を悪用してより適切に設計できる。たとえば、多数の同時リクエストを処理できないシステムの場合、セッションを維持するために多数の接続を確立し、定期的に少数のデータ パケットを送信するだけで、システムのリソースが枯渇してしまい、処理できなくなる可能性があります。 DDoS の目的を達成するために新しい接続要求を受け入れます。その他の攻撃には、大きなデータ パケットを送信するために大量の接続要求を送信することが含まれます。この攻撃はトロイの木馬プログラムによって開始されるため、攻撃者は迅速に多数の接続を確立し、短期間に大量のリクエストを発行することができます。

以下は DDoS の特別な証拠です。これらの特性を利用して DDoS (含むがこれに限定されない) に対抗できます。

  1. 攻撃は、比較的固定された IP から発生することがよくあります。 IP セグメント、つまり各 IP には実際のユーザーよりもはるかに多くの接続とリクエストがあります。 (注: これは、そのようなリクエストすべてが DDoS 攻撃を表すという意味ではありません。NAT を使用する多くのネットワーク アーキテクチャでは、多くのクライアントがゲートウェイの IP アドレスを使用してパブリック ネットワーク リソースにアクセスします。ただし、それでも、そのようなリクエストの数とその数は接続数も ddos​​ 攻撃よりもはるかに少なくなります。)

  2. この攻撃はトロイの木馬によって発行され、その目的はサーバーに過負荷をかけることであるため、接続の頻度は要求は普通の人よりもはるかに高くなります。

  3. #user-agent は通常、非標準の値です。

  4. referer は、攻撃に簡単に関連付けられる値である場合があります

2. nginx と nginx plus を使用して ddos​​ 攻撃に対抗する

上記の ddos​​ 攻撃の特徴と組み合わせることで、nginx と nginx plus nginx plus には、DDoS 攻撃を効果的に防御するために、入口のアクセス トラフィックを調整し、リバース プロキシからバックエンド サーバーへのトラフィックを制御することで、DDoS 攻撃に抵抗するという目的を達成できます。

1. リクエスト速度の制限

nginx および nginx plus の接続リクエストを実際のユーザーリクエストの妥当な範囲内に設定します。たとえば、通常のユーザーが 2 秒ごとにログイン ページをリクエストできると思われる場合は、クライアント IP からのリクエストを 2 秒ごとに受信するように nginx を設定できます (1 分あたり 30 リクエストにほぼ相当)。

limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m; 
server { 
... 
location /login.html { 
limit_req zone=one; 
... 
} 
}
ログイン後にコピー

`limit_req_zone` コマンドは、リクエスト ステータスの特定のキー値 (上記の例ではクライアント IP ($binary_remote_addr)) を保存するために one という名前の共有メモリ ゾーンを設定します。 location ブロックの `limit_req` は、1 つの共有メモリ領域を参照することによって /login.html へのアクセスを制限します。

2. 接続数を制限する

nginx および nginx plus の接続数を、実際のユーザー リクエストの妥当な範囲内に設定します。たとえば、クライアント IP ごとに /store への接続を 10 個まで設定できます。

limit_conn_zone $binary_remote_addr zone=addr:10m; 
server { 
... 
location /store/ { 
limit_conn addr 10; 
... 
} 
}
ログイン後にコピー

`limit_conn_zone` コマンドは、特定のキー値 (上記の例ではクライアント IP ($binary_remote_addr)) の状態を保存するために、addr と呼ばれる共有メモリ領域を設定します。 location ブロックの `limit_conn` は、addr 共有メモリ領域を参照することにより、/store/ への最大接続数を 10 に制限します。

3. 遅い接続を閉じる

slowlris などの一部の DDoS 攻撃は、多数の接続を確立し、定期的にデータ パケットを送信することでセッションを維持します。攻撃の目的を達成するために、このサイクルは通常、通常のリクエストよりも低くなります。この場合、低速接続を閉じることで攻撃に抵抗できます。

`client_body_timeout` コマンドはクライアント要求の読み取りのタイムアウトを定義するために使用され、`client_header_timeout` コマンドはクライアント要求ヘッダーの読み取りのタイムアウトを設定するために使用されます。これら 2 つのパラメータのデフォルト値は 60 秒ですが、次のコマンドを使用して 5 秒に設定できます:

server { 
client_body_timeout 5s; 
client_header_timeout 5s; 
... 
}
ログイン後にコピー

4. Set ip blacklist
# #攻撃が特定の IP アドレスからのものであると判断された場合は、その IP アドレスをブラックリストに追加することができ、nginx はそのリクエストを受け付けなくなります。たとえば、攻撃が 123.123.123.1 ~ 123.123.123.16 の範囲の IP アドレスから発生していると判断した場合、次のように設定できます。

location / { 
deny 123.123.123.0/28; 
... 
}
ログイン後にコピー

または、攻撃が 123.123 から発生していると判断した場合.123.3、123.123.123.5、123.123.123.7 いくつかの IP は次のように設定できます:

location / { 
deny 123.123.123.3; 
deny 123.123.123.5; 
deny 123.123.123.7; 
... 
}
ログイン後にコピー

5. IP ホワイトリストを設定します


Web サイトのみの場合特定の IP または IP セグメントへのアクセスを許可します。allow コマンドと Deny コマンドを一緒に使用して、指定した IP アドレスのみに Web サイトへのアクセスを制限できます。次のように、192.168.1.0 セグメントのイントラネット ユーザーのみにアクセスを許可するように設定できます。

location / { 
allow 192.168.1.0/24; 
deny all; 
... 
}
ログイン後にコピー

deny コマンドは、allow で指定された IP 範囲を除く他のすべての IP アドレスからのアクセス要求を拒否します。

6. キャッシュを使用してトラフィックのピークを削減する


nginx のキャッシュ機能を有効にし、特定のキャッシュ パラメーターを設定することで、攻撃によるトラフィックを削減できます。同時に、バックエンド サーバーにかかるリクエストの負荷も軽減できます。以下にいくつかの便利な設定を示します:

    proxy_cache_use_stale ` の更新パラメータは、キャッシュされたオブジェクトをいつ更新するかを nginx に指示します。必要なのはバックエンドへの更新リクエストのみであり、キャッシュが有効である間、オブジェクトに対するクライアント リクエストはバックエンド サーバーにアクセスする必要はありません。ファイルに対する頻繁なリクエストによって攻撃が実行される場合、キャッシュによってバックエンド サーバーへのリクエストの数が大幅に削減されます。
  1. proxy_cache_key ` 命令定义的键值通常包含一些内嵌的变量(默认的键值 $scheme$proxy_host$request_uri 包含了三个变量)。如果键值包含 `$query_string` 变量,当攻击的请求字符串是随机的时候就会给 nginx 代理过重的缓存负担,因此我们建议一般情况下不要包含 `$query_string` 变量。

7. 屏蔽特定的请求

可以设置 nginx、nginx plus 屏蔽一些类型的请求:

  1. 针对特定 url 的请求

  2. 针对不是常见的 user-agent 的请求

  3. 针对 referer 头中包含可以联想到攻击的值的请求

  4. 针对其他请求头中包含可以联想到攻击的值的请求

比如,如果你判定攻击是针对一个特定的 url:/foo.php,我们就可以屏蔽到这个页面的请求:

location /foo.php { 
deny all; 
}
ログイン後にコピー

或者你判定攻击请求的 user-agent 中包含 foo 或 bar,我们也可以屏蔽这些请求:

location / { 
if ($http_user_agent ~* foo|bar) { 
return 403; 
} 
... 
}
ログイン後にコピー

http_name 变量引用一个请求头,上述例子中是 user-agent 头。可以针对其他的 http 头使用类似的方法来识别攻击。

8. 限制到后端服务器的连接数

一个 nginx、nginx plus 实例可以处理比后端服务器多的多的并发请求。在 nginx plus 中,你可以限制到每一个后端服务器的连接数,比如可以设置 nginx plus 与 website upstream 中的每个后端服务器建立的连接数不得超过200个:

upstream website { 
server 192.168.100.1:80 max_conns=200; 
server 192.168.100.2:80 max_conns=200; 
queue 10 timeout=30s; 
}
ログイン後にコピー

`max_conns` 参数可以针对每一个后端服务器设置 nginx plus 可以与之建立的最大连接数。`queue` 命令设置了当每个后端服务器都达到最大连接数后的队列大小,`timeout` 参数指定了请求在队列中的保留时间。

9. 处理特定类型的攻击

有一种攻击是发送包含特别大的值的请求头,引起服务器端缓冲区溢出。nginx、nginx plus 针对这种攻击类型的防御,可以参考

[using nginx and nginx plus to protect against cve-2015-1635]
)

10. 优化nginx性能

ddos 攻击通常会带来高的负载压力,可以通过一些调优参数,提高 nginx、nginx plus 处理性能,硬抗 ddos 攻击,详细参考:

[tuning nginx for performance]

三、识别ddos攻击

到目前为止,我们都是集中在如何是用 nginx、nginx plus 来减轻 ddos 攻击带来的影响。如何才能让 nginx、nginx plus 帮助我们识别 ddos 攻击呢?`nginx plus status module` 提供了到后端服务器流量的详细统计,可以用来识别异常的流量。nginx plus 提供一个当前服务状态的仪表盘页面,同时也可以在自定义系统或其他第三方系统中通过 api 的方式获取这些统计信息,并根据历史趋势分析识别非正常的流量进而发出告警。

以上がNginx と Nginx Plus を使用して DDOS 攻撃に対抗する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Nginxが開始されるかどうかを確認する方法 Nginxが開始されるかどうかを確認する方法 Apr 14, 2025 pm 01:03 PM

nginxが開始されるかどうかを確認する方法:1。コマンドラインを使用します:SystemCTLステータスnginx(Linux/unix)、netstat -ano | FindStr 80(Windows); 2。ポート80が開いているかどうかを確認します。 3.システムログのnginx起動メッセージを確認します。 4. Nagios、Zabbix、Icingaなどのサードパーティツールを使用します。

Windowsでnginxを構成する方法 Windowsでnginxを構成する方法 Apr 14, 2025 pm 12:57 PM

Windowsでnginxを構成する方法は? nginxをインストールし、仮想ホスト構成を作成します。メイン構成ファイルを変更し、仮想ホスト構成を含めます。 nginxを起動またはリロードします。構成をテストし、Webサイトを表示します。 SSLを選択的に有効にし、SSL証明書を構成します。ファイアウォールを選択的に設定して、ポート80および443のトラフィックを許可します。

Nginxが起動されているかどうかを確認する方法は? Nginxが起動されているかどうかを確認する方法は? Apr 14, 2025 pm 12:48 PM

Linuxでは、次のコマンドを使用して、nginxが起動されるかどうかを確認します。SystemCTLステータスNGINXコマンド出力に基づいて、「アクティブ:アクティブ(実行)」が表示された場合、NGINXが開始されます。 「アクティブ:非アクティブ(dead)」が表示されると、nginxが停止します。

Linuxでnginxを開始する方法 Linuxでnginxを開始する方法 Apr 14, 2025 pm 12:51 PM

Linuxでnginxを開始する手順:nginxがインストールされているかどうかを確認します。 systemctlを使用して、nginxを開始してnginxサービスを開始します。 SystemCTLを使用して、NGINXがシステムスタートアップでNGINXの自動起動を有効にすることができます。 SystemCTLステータスNGINXを使用して、スタートアップが成功していることを確認します。 Webブラウザのhttp:// localhostにアクセスして、デフォルトのウェルカムページを表示します。

nginxサーバーを開始する方法 nginxサーバーを開始する方法 Apr 14, 2025 pm 12:27 PM

NGINXサーバーを起動するには、異なるオペレーティングシステムに従って異なる手順が必要です。Linux/UNIXシステム:NGINXパッケージをインストールします(たとえば、APT-GetまたはYumを使用)。 SystemCtlを使用して、NGINXサービスを開始します(たとえば、Sudo SystemCtl Start NGinx)。 Windowsシステム:Windowsバイナリファイルをダウンロードしてインストールします。 nginx.exe実行可能ファイルを使用してnginxを開始します(たとえば、nginx.exe -c conf \ nginx.conf)。どのオペレーティングシステムを使用しても、サーバーIPにアクセスできます

nginx403を解く方法 nginx403を解く方法 Apr 14, 2025 am 10:33 AM

Nginx 403禁止エラーを修正する方法は?ファイルまたはディレクトリの許可を確認します。 2。HTACCESSファイルを確認します。 3. nginx構成ファイルを確認します。 4。nginxを再起動します。他の考えられる原因には、ファイアウォールルール、Selinux設定、またはアプリケーションの問題が含まれます。

nginx304エラーを解く方法 nginx304エラーを解く方法 Apr 14, 2025 pm 12:45 PM

質問への回答:304変更されていないエラーは、ブラウザがクライアントリクエストの最新リソースバージョンをキャッシュしたことを示しています。解決策:1。ブラウザのキャッシュをクリアします。 2.ブラウザキャッシュを無効にします。 3.クライアントキャッシュを許可するようにnginxを構成します。 4.ファイル許可を確認します。 5.ファイルハッシュを確認します。 6. CDNまたは逆プロキシキャッシュを無効にします。 7。nginxを再起動します。

nginx403エラーを解く方法 nginx403エラーを解く方法 Apr 14, 2025 pm 12:54 PM

サーバーには、要求されたリソースにアクセスする許可がなく、NGINX 403エラーが発生します。ソリューションには以下が含まれます。ファイル許可を確認します。 .htaccess構成を確認してください。 nginx構成を確認してください。 SELINUXアクセス許可を構成します。ファイアウォールルールを確認してください。ブラウザの問題、サーバーの障害、その他の可能なエラーなど、他の原因をトラブルシューティングします。

See all articles