如何利用nginx处理DDOS进行系统优化详解

2019-10-17 17:27:54丽君

列入黑名单IP地址

如果您可以识别用于攻击的客户端IP地址,则可以使用该 deny指令将其列入黑名单,以便NGINX和NGINX Plus不接受其连接或请求。例如,如果您确定攻击来自地址范围123.123.123.1到123.123.123.16:

location / { 
 deny 123.123 . 123.0 / 28 ; 
  
# ... 
} 

或者,如果您确定攻击来自客户端IP地址123.123.123.3,123.123.123.5和123.123.123.7:

location / { 
 deny 123.123.123.3; 
 deny 123.123.123.5; 
 deny 123.123.123.7; 
 # ... 
} 

将白名单IP地址

如果仅允许从一个或多个特定组或范围的客户端IP地址访问您的网站或应用程序,则可以一起使用 allow和 deny指令以仅允许这些地址访问该站点或应用程序。例如,您可以限制只访问特定本地网络中的地址:

location / { 
 allow 192.168.1.0/24; 
 deny all; 
 # ... 
} 

在这里, deny all指令阻止所有不在 allow指令指定的范围内的客户端IP地址。

使用缓存来平滑流量尖峰

您可以配置NGINX和NGINX Plus来吸收攻击导致的大量流量峰值,方法是启用缓存并设置某些缓存参数以卸载后端的请求。一些有用的设置是:

该指令的 updating参数 proxy_cache_use_stale告诉NGINX,当它需要获取一个陈旧的缓存对象的更新时,它应该只发送一个更新请求,并且继续将陈旧对象提供给在接收时间期间请求它的客户端来自后端服务器的更新。当对某个文件的重复请求是攻击的一部分时,这会显着减少对后端服务器的请求数量。 该 proxy_cache_key指令定义的键通常由嵌入式变量组成(缺省键 $scheme$proxy_host$request_uri,有三个变量)。如果该值包含 $query_string 变量,则发送随机查询字符串的攻击可能导致过度缓存。 $query_string除非您有特殊原因,否则我们建议您不要在变量中包含变量。

阻止请求

您可以配置NGINX或NGINX Plus来阻止几种请求:

请求一个似乎有针对性的特定网址 User-Agent报头设置为与正常客户端流量不对应的值的请求 将 Referer标头设置为可与攻击关联的值的请求 其他头文件具有可与攻击关联的值的请求

例如,如果您确定DDoS攻击的目标是URL /foo.php,则可以阻止该页面的所有请求:

​location /foo.php { 
 deny all; 
} 

或者,如果您发现DDoS攻击请求的 User-Agent头部值为 foo或 bar,则可以阻止这些请求。

​location / { 
 if ($http_user_agent ~* foo|bar) { 
  return 403; 
 } 
 # ... 
} 

该变量引用一个请求头,在上面的例子中是头。类似的方法可以用于具有可用于识别攻击的值的其他报头。 http_*name*``User-Agent

限制到后端服务器的连接