使用Nginx、Nginx Plus抵御DDOS攻击的方法

2019-10-17 17:37:02王振洲

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]
http://nginx.com/blog/nginx-protect-cve-2015-1635/?_ga=1.14368116.2137319792.1439284699)

10. 优化Nginx性能

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

[Tuning NGINX for Performance]
http://nginx.com/blog/tuning-nginx/?_ga=1.48422373.2137319792.1439284699

三、识别DDOS攻击

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

四、总结