DDOS是一种通过大流量的请求对目标进行轰炸式访问,导致提供服务的服务器资源耗尽进而无法继续提供服务的攻击手段。
一般情况下,攻击者通过大量请求与连接使服务器处于饱和状态,以至于无法接受新的请求或变得很慢。
应用层(七层/HTTP层)DDOS攻击通常由木马程序发起,其可以通过设计更好的利用目标系统的脆弱点。例如,对于无法处理大量并发请求的系统,仅仅通过建立大量的连接,并周期性的发出少量数据包来保持会话就可以耗尽系统的资源,使其无法接受新的连接请求达到DDOS的目的。其他还有采用发送大量连接请求发送大数据包的请求进行攻击的形式,因为攻击是由木马程序发起,攻击者可以在很短时间内快速建立大量的连接,并发出大量的请求。
以下是一些DDOS的特证,我们可以据此特征来抵抗DDOS(包括但不限于):
-
<李>攻击经常来源于一些相对固定的IP或IP段,每个IP都有远大于真实用户的连接数和请求数。(备注:这并不表明这种请求都是代表着DDOS攻击。在很多使用NAT的网络架构中,很多的客户端使用网关的IP地址访问公网资源。但是,即便如此,这样的请求数和连接数也会远少于DDOS攻击)。李>
<李>因为攻击是由木马发出且目的是使服务器超负荷,请求的频率会远远超过正常人的请求。李>
<李>用户代理通常是一个非标准的值李>
<李>推荐人有时是一个容易联想到攻击的值李>
结合上面提到的DDOS攻击的特征,Nginx, Nginx +有很多的特性可以用来有效的防御DDOS攻击,可以从调整入口访问流量和控制反向代理到后端服务器的流量两个方面来达到抵御DDOS攻击的目的。
<强> 1。限制请求速度强>
设置Nginx, Nginx +的连接请求在一个真实用户请求的合理范围内,比如,如果你觉得一个正常用户每两秒可以请求一次登录页面,你就可以设置Nginx每两秒钟接收一个客户端IP的请求(大约等同于每分钟30个请求)。
limit_req_zone binary_remote_addr带美元=1:10米率=30 r/m; 服务器{ … 位置/登录。html { limit_req区=1; … } }
“limit_req_zone”命令设置了一个叫> limit_conn_zone $ binary_remote_addr区=addr: 10米; 服务器{ … 位置/商店/{ limit_conn addr 10; … } }
“limit_conn_zone”命令设置了一个叫addr的共享内存区来存储特定键值的状态,在上面的例子中是客户端IP (binary_remote_addr美元).location块中“limit_conn”通过引用addr共享内存区来限制到/商店/的最大连接数为10 .
<强> 3。关闭慢连接强>
有一些DDOS攻击,比如Slowlris,是通过建立大量的连接并周期性的发送一些数据包保持会话来达到攻击目的,这种周期通常会低于正常的请求。这种情况我们可以通过关闭慢连接来抵御攻击。
“client_body_timeout”命令用来定义读取客户端请求的超时时间,“client_header_timeout”命令用来定于读取客户端请求头的超时时间。这两个参数的默认值都是60年代,我们可以通过下面的命令将他们设置为5 s:
服务器{ client_body_timeout 5 s; client_header_timeout 5 s; … } >之前<强> 4。设置IP黑名单强>
如果确定攻击来源于某些IP地址,我们可以将其加入黑名单,Nginx就不会再接受他们的请求。比如,你已经确定攻击来自于从123.123.123.1到123.123.123.16的一段IP地址,你可以这样设置:
位置/{ 否认123.123.123.0/28; … }或者你确定攻击来源于123.123.123.3,123.123.123.5,123.123.123.7几个IP,可以这样设置:
位置/{ 否认123.123.123.3; 否认123.123.123.5; 否认123.123.123.7; … } >之前<强> 5。设置IP白名单强>
如果你的网站仅允许特定的IP或IP段访问,你可以结合使用允许和拒绝命令来限制仅允许你指定的IP地址访问你的网站。如下,你可以设置仅允许192.168.1.0段的内网用户访问:
使用Nginx, Nginx +抵御DDOS攻击的方法