Nginx 防止DDOS攻击

简介: 分布式拒绝服务攻击(DDoS)指的是通过多台机器向一个服务或者网站发送大量看似合法的数据包使其网络阻塞、资源耗尽从而不能为正常用户提供正常服务的攻击手段。

分布式拒绝服务攻击(DDoS)指的是通过多台机器向一个服务或者网站发送大量看似合法的数据包使其网络阻塞、资源耗尽从而不能为正常用户提供正常服务的攻击手段。随着互联网带宽的增加和相关工具的不断发布,这种攻击的实施难度越来越低,有大量IDC托管机房、商业站点、游戏服务商一直饱受DDoS攻击的困扰,那么如何缓解甚至解决DDoS呢?最近Rick Nelson在Nginx的官方博客上发表了一篇文章,介绍了如何通过Nginx和Nginx Plus缓和DDoS攻击

Rick Nelson首先介绍了DDoS攻击的一些特点,例如攻击的流量通常来源于一些固定的IP地址,每一个IP地址会创建比真实用户多得多的连接和请求;同时由于流量全部是由机器产生的,其速率要比人类用户高的多。此外,进行攻击的机器其User-Agent头也不是标准的值,Referer头有时也会被设置成能够与攻击关联起来的值。针对这些特点,Rick Nelson认为Nginx和Nginx Plus有很多能够通过调节或控制流量来应对或者减轻DDoS攻击的特性。

限制请求率 

将Nginx和Nginx Plus可接受的入站请求率限制为某个适合真实用户的值。例如,通过下面的配置让一个真正的用户每两秒钟才能访问一次登录页面:

limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m;

server {

    ...

    location /login.html {

        limit_req zone=one;

    ...

    }

}

在该配置中,limit_req_zone指令配置了一个名为one的共享内存zone用来存储$binary_remote_addr的请求状态,location块中/login.html的limit_req指令引用了共享内存zone。

限制连接的数量 

将某个客户端IP地址所能打开的连接数限制为真实用户的合理值。例如,限制每一个IP对网站/store部分打开的连接数不超过10个:

limit_conn_zone $binary_remote_addr zone=addr:10m;

server {

    ...

    location /store/ {

        limit_conn addr 10;

        ...

    }

}

该配置中,limit_conn_zone指令配置了一个名为addr的共享内存zone用来存储 $binary_remote_addr的请求,location块中/store/的limit_conn指令引用了共享内存zone,并将最大连接数设置为10.

关闭慢连接 

关闭那些一直保持打开同时写数据又特别频繁的连接,因为它们会降低服务器接受新连接的能力。Slowloris就是这种类型的攻击。对此,可以通过client_body_timeout和client_header_timeout指令控制请求体或者请求头的超时时间,例如,通过下面的配置将等待时间控制在5s之内:

server {

    client_body_timeout 5s;

    client_header_timeout 5s;

    ...

}

设置IP黑名单 

如果能识别攻击者所使用的客户端IP地址,那么通过deny指令将其屏蔽,让Nginx和Nginx Plus拒绝来自这些地址的连接或请求。例如,通过下面的指令拒绝来自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指令让网站或者应用程序只接受来自于某个IP地址或者某个IP地址段的请求。例如,通过下面的指令将访问限制为本地网络的一个IP段:

location / {

    allow 192.168.1.0/24;

    deny all;

    ...

}

通过缓存削减流量峰值 

通过启用缓存并设置某些缓存参数让Nginx和Nginx Plus吸收攻击所产生的大部分流量峰值。例如,通过proxy_cache_use_stale指令的updating参数告诉Nginx何时需要更新过期的缓存对象,避免因重复发送更新请求对后端服务器产生压力。另外,proxy_cache_key指令定义的键通常会包含嵌入的变量,例如默认的键$scheme$proxy_host$request_uri包含了三个变量,如果它包含$query_string变量,那么攻击者可以通过发送随机的query_string值来耗尽缓存,因此,如果没有特别原因,不要在该键中使用$query_string变量。

阻塞请求 

配置Nginx和Nginx Plus阻塞以下类型的请求:

以某个特定URL为目标的请求

User-Agent头中的值不在正常客户端范围之内的请求

Referer头中的值能够与攻击关联起来的请求

其他头中存在能够与攻击关联在一起的值的请求

例如,通过下面的配置阻塞以/foo.php为目标的攻击:

location /foo.php {

    deny all;

}

或者通过下面的配置阻塞已识别出的User-Agent头的值是foo或者bar的DDoS攻击:

location / {

    if ($http_user_agent ~* foo|bar) {

        return 403;

    }

    ...

}

限制对后端服务器的连接数 

通常Nginx和Nginx Plus实例能够处理比后端服务器多得多的连接数,因此可以通过Nginx Plus限制到每一个后端服务器的连接数。例如,通过下面的配置限制Nginx Plus和每一台后端服务器之间建立的连接数不多于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;

}

另外,Rick Nelson还提到了如何处理基于范围的攻击如何处理高负载的问题,以及如何使用Nginx Plus Status模块发现异常的流量模式,定位DDoS攻击。

感谢魏星对本文的审校。

目录
相关文章
|
15天前
|
存储 人工智能 安全
DDoS攻击激增,分享高效可靠的DDoS防御方案
DDoS攻击激增,分享高效可靠的DDoS防御方案
21 0
|
2月前
|
监控 安全 网络安全
深度解析:DDoS攻击与先进防御策略
DDoS 介绍 DDoS(分布式拒绝服务)攻击是一种恶意网络活动,旨在通过同时向目标系统发送大量请求或流量,使其无法正常运行或提供服务。攻击者通常利用网络上的多个计算机和设备,形成一个"僵尸网络"或"僵尸军团",并协调这些设备以集中地向目标发动攻击。 DDoS 攻击理论 目标系统(Target System):DDoS攻击的目标是一个网络服务、网站、服务器或应用程序,攻击旨在使其无法正常运行,从而造成服务中断。 攻击者(Attackers):攻击者是发起DDoS攻击的个人、组织或恶意软件的开发者。他们试图通过制造大量的流量来超过目标系统的处理能力。
61 0
|
2月前
|
云安全 负载均衡 监控
遇到攻击怎么办,有什么办法解决网络层和应用层的DDoS攻击
解决网络层和应用层的DDoS攻击,应对网络安全的挑战,保护数字化信息时代的网络安全提供有效的安全解决方案。
|
3月前
|
云安全 负载均衡 安全
掌握抗DDoS攻击,守护网络服务无懈可击!
抗DDoS攻击是一种防御措施,旨在保护网络服务免受分布式拒绝服务(DDoS)攻击的影响。DDoS攻击是一种常见的网络攻击,通过发送大量无用的请求来耗尽网络资源,从而使得合法用户无法访问受攻击的网络服务。
37 0
|
3月前
|
网络安全
|
4月前
|
网络安全
关于最近很火的”DDOS”攻击
什么叫DDOS攻击? DDoS攻击,全称Distributed Denial of Service Attack,即分布式拒绝服务攻击,是指处于不同位置的多个攻击者同时向一个或数个目标发动攻击,或者一个攻击者控制了位于不同位置的多台机器并利用这些机器对受害者同时实施攻击。 DDoS攻击利用分布式网络来发起大量的请求,导致目标服务器或网络资源的过载,从而使其无法正常处理请求,使目标系统瘫痪,无法正常提供服务。攻击者通常会利用多个计算机或设备的协同攻击来进行DDoS攻击,这些计算机或设备被称为“僵尸机器”。
|
4月前
|
缓存 监控 安全
Django防止DDOS攻击的措施
Django防止DDOS攻击的措施
|
5月前
|
网络协议 网络安全
什么是 DDos 攻击?
什么是 DDos 攻击?
|
6月前
|
监控 网络安全
DDOS攻击成本高昂,与防御成本紧密相连110.42.2.1
DDOS攻击成本高昂,与防御成本紧密相连110.42.2.1
|
6月前
|
监控 网络协议 安全
DoS和DDoS攻击
DoS和DDoS攻击
954 0

相关产品

  • 云迁移中心