1. アプリケーション層の DDOS 攻撃の特徴
アプリケーション層 (第 7 層/http 層) の DDOS 攻撃は、通常、トロイの木馬プログラムによって開始されます。ターゲット システムの脆弱性を悪用してより適切に設計できる。たとえば、多数の同時リクエストを処理できないシステムの場合、セッションを維持するために多数の接続を確立し、定期的に少数のデータ パケットを送信するだけで、システムのリソースが枯渇してしまい、処理できなくなる可能性があります。 DDoS の目的を達成するために新しい接続要求を受け入れます。その他の攻撃には、大きなデータ パケットを送信するために大量の接続要求を送信することが含まれます。この攻撃はトロイの木馬プログラムによって開始されるため、攻撃者は迅速に多数の接続を確立し、短期間に大量のリクエストを発行することができます。
以下は DDoS の特別な証拠です。これらの特性を利用して DDoS (含むがこれに限定されない) に対抗できます。
攻撃は、比較的固定された IP から発生することがよくあります。 IP セグメント、つまり各 IP には実際のユーザーよりもはるかに多くの接続とリクエストがあります。 (注: これは、そのようなリクエストすべてが DDoS 攻撃を表すという意味ではありません。NAT を使用する多くのネットワーク アーキテクチャでは、多くのクライアントがゲートウェイの IP アドレスを使用してパブリック ネットワーク リソースにアクセスします。ただし、それでも、そのようなリクエストの数とその数は接続数も ddos 攻撃よりもはるかに少なくなります。)
この攻撃はトロイの木馬によって発行され、その目的はサーバーに過負荷をかけることであるため、接続の頻度は要求は普通の人よりもはるかに高くなります。
2. nginx と nginx plus を使用して ddos 攻撃に対抗する
1. リクエスト速度の制限
limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m; server { ... location /login.html { limit_req zone=one; ... } }
2. 接続数を制限する
limit_conn_zone $binary_remote_addr zone=addr:10m; server { ... location /store/ { limit_conn addr 10; ... } }
3. 遅い接続を閉じる
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; ... }
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_key ` 命令定义的键值通常包含一些内嵌的变量(默认的键值 $scheme$proxy_host$request_uri 包含了三个变量)。如果键值包含 `$query_string` 变量,当攻击的请求字符串是随机的时候就会给 nginx 代理过重的缓存负担,因此我们建议一般情况下不要包含 `$query_string` 变量。
7. 屏蔽特定的请求
可以设置 nginx、nginx plus 屏蔽一些类型的请求:
针对特定 url 的请求
针对不是常见的 user-agent 的请求
针对 referer 头中包含可以联想到攻击的值的请求
针对其他请求头中包含可以联想到攻击的值的请求
比如,如果你判定攻击是针对一个特定的 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 サイトの他の関連記事を参照してください。