|
一个分布式拒绝服务(DDoS)攻击 是企图使一个服务,通常一个网站,通过从多台机器这么多的流量轰击它不可用时提供服务的服务器不再能够正常工作,因为资源疲惫。 通常情况下,攻击者尝试饱和有这么多连接和请求一个系统,它不再能够接受新的流量,或变得如此缓慢,这是有效地可用。
应用层DDoS攻击特性应用层(第7层/ HTTP)DDoS攻击是由软件程序(进行机器人可定制最好地利用特定系统的漏洞)。例如,对于那些不处理大量并发连接好,仅仅打开一个大量的连接,并保持其有效通过定期发送量的一小数额会耗尽系统的新的连接能力的系统。其他攻击可以采用发送大量请求或非常大的请求的形式。因为这些攻击是由机器人进行的,而不是实际的用户,攻击者可以轻易打开大量连接,并发送请求的大量非常迅速。 的可用于帮助减轻对他们的包括以下内容(这并不意味着是一个详尽的列表)DDoS攻击的特点: - 因为流量由机器人产生,其目的是压倒服务器,流量速率远远高于人类用户可以生成。
- 该用户代理头有时设定为非标准值。
- 该Referer的头有时设为您可以与攻击相关联的值。
使用NGINX和NGINX加抗击DDoS攻击NGINX和NGINX加上有许多功能 - 与上面提到的DDoS攻击的特点相结合 - 可以让他们DDoS攻击缓解解决方案中有价值的一部分。这些功能可以解决DDoS攻击通过调节传入流量,并因为它是代理到后端服务器控制的交通都造成了攻击。 限制请求率您可以限制在该NGINX和NGINX加接受传入的请求,典型的真正的用户价值率。例如,您可能决定访问登录页面一个真正的用户只能提出一个要求每两秒钟。您可以配置N​​GINX和NGINX加上允许单个客户端IP地址尝试登录仅每2秒(相当于每分钟30请求): limit_req_zone $ binary_remote_addr区=一个:10M率= 30R /平方米;服务器{ ... 位置/login.html { limit_req区=之一; ... }}所述limit_req_zone 指令配置称为共享存储器区域1存储的请求的状态指定键,在这种情况下,客户端IP地址($ binary_remote_addr)。该limit_req 在指令中的位置块/login.html引用共享内存区域。 限制连接数你可以限制由单个客户端的IP地址被打开,再次为适合于真正的用户的值的连接数。例如,你可以让每一个客户端IP地址打开到不超过10个连接/存储你的网站领域: limit_conn_zone $ binary_remote_addr区=地址:10米;服务器{ ... 位置/存储/ { limit_conn地址10; ... }}该limit_conn_zone 指令配置称为共享内存区地址存储指定键的请求,在此情况下(如在前面的例子),客户端IP地址,$ binary_remote_addr。该limit_conn在指令位置块/存储引用共享内存区,并设置一个最大从每个客户端的IP地址10连接。 关闭低速连接您可以关闭频率太低写入数据连接,这可以代表试图保持连接打开尽可能长的时间(从而减少服务器的接受新连接的能力)。Slowloris是这种类型的攻击的一个例子。该client_body_timeout指令控制NGINX客户身体的写操作之间的等待时间,并且client_header_timeout 指令控制NGINX客户端头的写操作之间等待的时间。这两个指令默认为60秒。此示例配置NGINX等待写入之间不超过5秒,从客户端无论是头部或身体: 服务器{ client_body_timeout 5S; client_header_timeout 5S; ...}列入黑名单的IP地址如果你能找出被用于攻击客户端的IP地址,你可以用它们列入黑名单拒绝指令,使NGINX和NGINX加不接受它们的连接或请求。例如,如果你已经确定的攻击是从地址范围123.123.123.1通过123.123.123.16来: 位置 / { 否认123.123.123.0/28; ...}或者,如果你已经确定攻击来自客户机的IP地址123.123.123.3,123.123.123.5和123.123.123.7: 位置 / { 否认123.123.123.3; 否认123.123.123.5; 否认123.123.123.7; ...}白名单的IP地址如果从一个或多个特定的组或客户端的IP地址范围只允许访问您的网站或应用程序,您可以使用允许和拒绝指令一起,让只有这些地址访问该站点或应用程序。例如,您可以限制只访问地址在一个特定的本地网络: 位置 / { 允许192.168.1.0/24; 拒绝所有; ...}在这里,拒绝所有指令块并不是由指定的范围内的所有客户端的IP地址允许指令。 使用缓存来平滑流量高峰您可以配置N​​GINX和NGINX Plus来吸收大量的流量高峰,从攻击的结果,通过启用缓存和设置某些缓存参数卸载从后端请求。一些有用的设置如下: - 该更新参数的proxy_cache_use_stale指令告诉nginx,当它需要获取一个陈旧缓存对象的更新,应发送的更新只是一个请求,并继续服务于陈旧的对象谁中所花费的时间要求其客户接收从后端服务器的更新。当为一个特定的文件重复请求是一个攻击的一部分,这将大大减少请求到后端服务器的数量。
- 由定义的关键proxy_cache_key指令通常由嵌入式变量(默认键,$ $计划$ proxy_host REQUEST_URI,有三个变量)。如果该值包含$ QUERY_STRING 变量,然后发送随机查询字符串可导致过度缓存的攻击。我们建议您不要包含$ QUERY_STRING中的关键变量,除非你有特别的理由这样做。
阻止请求您可以配置N​​GINX或NGINX加阻止几种请求: - 请求到一个特定的URL,这似乎是有针对性
- 请在该用户代理头被设置为不符合正常的客户端的流量值
- 请求,其中所述的Referer首部设置为可以与攻击相关联的值
- 要求在其他头都可以与攻击相关联的值
例如,如果您确定DDoS攻击是针对URL /foo.php你可以阻止页面的所有请求: 位置/foo.php { 拒绝所有;}或者,如果你发现DDoS攻击请求有用户代理的头值富或酒吧,你可以阻止这些请求。 位置 / { 如果($ HTTP_USER_AGENT~* foo的|吧){ 返回403; } ...}该HTTP_ 名变量引用一个请求头,在上面的例子中的User-Agent头。类似的方法可与具有可被用于识别一个攻击值其他头一起使用。 限制连接到后端服务器一个NGINX或NGINX加实例通常可以处理比后端服务器是负载均衡更多的并发连接。与NGINX另外,可以限制到每个后端服务器的连接数。例如,如果你想NGINX加限制建立不超过200个连接到每个在两个后端服务器的网站 上游组: 上游网站{ 服务器192.168.100.1:80 MAX_CONNS = 200; 服务器192.168.100.2:80 MAX_CONNS = 200; 队列10超时值为30秒;}的MAX_CONNS 施加到每个服务器参数指定NGINX加上打开它的最大连接数。该队列 指示限制时,在上游组的所有服务器都达到它们的连接限制排队请求的数目,和所述超时参数指定多久保留在队列中的请求。 使用范围为基础的应对攻击攻击的一个方法是发送一个范围头具有非常大的值,这可能会导致缓冲器的溢出。有关如何使用NGINX和NGINX Plus来减轻这种类型的样本的情况下攻击的讨论,请参阅使用NGINX和NGINX加防御目标CVE-1615至35年。 处理高负荷DDoS攻击通常会导致高流量负载。有关调整NGINX或NGINX Plus和操作系统,使系统能够处理更高的负载提示,请参阅调整NGINX绩效。 识别DDoS攻击到目前为止,我们都集中在你可以使用什么NGINX和NGINX Plus来帮助减轻DDoS攻击的影响。但如何才能nginx的或NGINX Plus帮助你发现一个DDoS攻击?该NGINX加状态模块 提供了有关正在负载后端服务器,你可以用它来 ​​发现异常流量模式平衡交通的详细指标。NGINX另外配备了一个状态仪表板网页图示说明NGINX Plus系统的当前状态(见的例子demo.nginx.com)。同样的指标也可通过一个API,你可以用它来 ​​度量送入定制或第三方监控系统,你可以做历史趋势分析被发现的异常模式并启用报警。 概要NGINX和NGINX加上可以用作DDoS攻击缓解溶液中有价值的一部分,和NGINX Plus提供附加功能为防止DDoS攻击,并帮助当它们存在来识别。
|