DDOS 是一种通过大流量的请求对目标进行轰炸式访问,导致提供服务的服务器资源耗尽进而无法继续提供服务的攻击手段。这篇文章主要介绍了使用Nginx、Nginx Plus抵御DDOS攻击的方法,感兴趣的小伙伴们可以参考一下
DDOS 是一种通过大流量的请求对目标进行轰炸式访问,导致提供服务的服务器资源耗尽进而无法继续提供服务的攻击手段。
一般情况下,攻击者通过大量请求与连接使服务器处于饱和状态,以至于无法接受新的请求或变得很慢。
一、应用层DDOS攻击的特征
应用层(七层/HTTP层)DDOS 攻击通常由木马程序发起,其可以通过设计更好的利用目标系统的脆弱点。例如,对于无法处理大量并发请求的系统,仅仅通过建立大量的连接,并周期性的发出少量数据包来保持会话就可以耗尽系统的资源,使其无法接受新的连接请求达到 DDOS 的目的。其他还有采用发送大量连接请求发送大数据包的请求进行攻击的形式。因为攻击是由木马程序发起,攻击者可以在很短时间内快速建立大量的连接,并发出大量的请求。
以下是一些DDOS的特证,我们可以据此特征来抵抗 DDOS(包括但不限于):
攻击经常来源于一些相对固定的 IP 或 IP 段,每个 IP 都有远大于真实用户的连接数和请求数。(备注:这并不表明这种请求都是代表着 DDOS 攻击。在很多使用NAT的网络架构中,很多的客户端使用网关的 IP 地址访问公网资源。但是,即便如此,这样的请求数和连接数也会远少于 DDOS 攻击。) 因为攻击是由木马发出且目的是使服务器超负荷,请求的频率会远远超过正常人的请求。 User-Agent 通常是一个非标准的值 Referer 有时是一个容易联想到攻击的值
二、使用Nginx、Nginx Plus抵抗DDOS攻击
结合上面提到的 DDOS 攻击的特征,Nginx、Nginx Plus有很多的特性可以用来有效的防御 DDOS 攻击,可以从调整入口访问流量和控制反向代理到后端服务器的流量两个方面来达到抵御 DDOS 攻击的目的。
限制请求速度
设置 Nginx、Nginx Plus 的连接请求在一个真实用户请求的合理范围内。比如,如果你觉得一个正常用户每两秒可以请求一次登录页面,你就可以设置 Nginx 每两秒钟接收一个客户端 IP 的请求(大约等同于每分钟30个请求)。
limit_req_zonebinaryremoteaddrzone=one:10mrate=30r/m;server...location/login.htmllimitreqzone=one;...‘limitreqzone‘命令设置了一个叫one的共享内存区来存储请求状态的特定键值,在上面的例子中是客户端IP(binary_remote_addr zone=one:10m rate=30r/m; server { ... location /login.html { limit_req zone=one; ... } }`limit_req_zone` 命令设置了一个叫 one 的共享内存区来存储请求状态的特定键值,在上面的例子中是客户端 IP(binaryremotea 婴儿起名http://www.bbqmw.net/qm_yeqmddrzone=one:10mrate=30r/m;server...location/login.htmllimitreqzone=one;...‘limitreqzone‘命令设置了一个叫one的共享内存区来存储请求状态的特定键值,在上面的例子中是客户端IP(binary_remote_addr)。location 块中的limit_req通过引用 one 共享内存区来实现限制访问 /login.html 的目的。
限制连接数量
设置 Nginx、Nginx Plus 的连接数在一个真实用户请求的合理范围内。比如,你可以设置每个客户端 IP 连接 /store 不可以超过10个。
limit_conn_zone $binary_remote_addr zone=addr:10m; server { … location /store/ { limit_conn addr 10; … } }
limit_conn_zone命令设置了一个叫 addr 的共享内存区来存储特定键值的状态,在上面的例子中是客户端 IP( $binary_remote_addr)。location 块中limit_conn通过引用 addr 共享内存区来限制到 /store/ 的最大连接数为10。
关闭慢连接
有一些 DDOS 攻击,比如 Slowlris,是通过建立大量的连接并周期性的发送一些数据包保持会话来达到攻击目的,这种周期通常会低于正常的请求。这种情况我们可以通过关闭慢连接来抵御攻击。