包含nginxddos攻击的词条

hacker|
125

如何使用Nginx对抗DDoS攻击

nginx防止攻击,分流量攻击和cc攻击,如果是拒绝服务,只能判断然后限制一个ip,只访问几次 1. ngx_http_limit_conn_module 可以用来限制单个IP的连接数 2. ngx_http_limit_req_module 可以用来限制单个IP每秒请求数

如何通过配置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_zone $binary_remote_addr zone=one:10m rate=30r/m;

server {

...

location /login.html {

limit_req zone=one;

...

}

}`limit_req_zone`命令设置了一个叫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,是通过建立大量的连接并周期性的发送一些数据包保持会话来达到攻击目的,这种周期通常会低于正常的请求。这种情况我们可以通过关闭慢连接来抵御攻击。

`client_body_timeout`命令用来定义读取客户端请求的超时时间,`client_header_timeout`命令用来定于读取客户端请求头的超时时间。这两个参数的默认值都是60s,我们可以通过下面的命令将他们设置为5s:

server {

client_body_timeout 5s;

client_header_timeout 5s;

...

}

设置IP黑名单

如果确定攻击来源于某些IP地址,我们可以将其加入黑名单,Nginx就不会再接受他们的请求。比如,你已经确定攻击来自于从123.123.123.1到123.123.123.16的一段IP地址,你可以这样设置:

location / {

deny 123.123.123.0/28;

...

}

或者你确定攻击来源于123.123.123.3、123.123.123.5、123.123.123.7几个IP,可以这样设置:

location / {

deny 123.123.123.3;

deny 123.123.123.5;

deny 123.123.123.7;

...

}

设置IP白名单

如果你的网站仅允许特定的IP或IP段访问,你可以结合使用allow和deny命令来限制仅允许你指定的IP地址访问你的网站。如下,你可以设置仅允许192.168.1.0段的内网用户访问:

location / {

allow 192.168.1.0/24;

deny all;

...

}

deny命令会拒绝除了allow指定的IP段之外的所有其他IP的访问请求。

使用缓存进行流量削峰

通过打开Nginx的缓存功能并设置特定的缓存参数,可以削减来自攻击的流量,同时也可以减轻对后端服务器的请求压力。以下是一些有用的设置:

`proxy_cache_use_stale `的updating参数告诉Nginx什么时候该更新所缓存的对象。只需要到后端的一个更新请求,在缓存有效期间客户端对该对象的请求都无需访问后端服务器。当通过对一个文件的频繁请求来实施攻击时,缓存功能可极大的降低到后端服务器的请求。

`proxy_cache_key `命令定义的键值通常包含一些内嵌的变量(默认的键值$scheme$proxy_host$request_uri包含了三个变量)。如果键值包含`$query_string`变量,当攻击的请求字符串是随机的时候就会给Nginx代理过重的缓存负担,因此我们建议一般情况下不要包含`$query_string`变量。

屏蔽特的请求

可以设置Nginx、Nginx Plus屏蔽一些类型的请求:

针对特定URL的请求

针对不是常见的User-Agent的请求

针对Referer头中包含可以联想到攻击的值的请求

针对其他请求头中包含可以联想到攻击的值的请求

比如,如果你判定攻击是针对一个特定的URL:/foo.PHP,我们就可以屏蔽到这个页面的请求:

location /foo.php {

deny all;

}

或者你判定攻击请求的User-Agent中包含foo或bar,我们也可以屏蔽这些请求:

location / {

if ($http_user_agent ~* foo|bar) {

return 403;

}

...

}

http_name变量引用一个请求头,上述例子中是User-Agent头。可以针对其他的http头使用类似的方法来识别攻击。

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

一个Nginx、Nginx Plus实例可以处理比后端服务器多的多的并发请求。在Nginx Plus中,你可以限制到每一个后端服务器的连接数,比如可以设置Nginx Plus与website upstream中的每个后端服务器建立的连接数不得超过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;

}

`max_conns`参数可以针对每一个后端服务器设置Nginx Plus可以与之建立的最大连接数。`queue`命令设置了当每个后端服务器都达到最大连接数后的队列大小,`timeout`参数指定了请求在队列中的保留时间。

处理特定类型的攻击

有一种攻击是发送包含特别大的值的请求头,引起服务器端缓冲区溢出。Nginx、Nginx Plus针对这种攻击类型的防御,可以参考[Using NGINX and NGINX Plus to Protect Against CVE-2015-1635]()

优化Nginx性能

DDOS攻击通常会带来高的负载压力,可以通过一些调优参数,提高Nginx、Nginx Plus处理性能,硬抗DDOS攻击,详细参考:[Tuning NGINX for Performance]()

识别DDOS攻击

到目前为止,我们都是集中在如何是用Nginx、Nginx Plus来减轻DDOS攻击带来的影响。如何才能让Nginx、Nginx Plus帮助我们识别DDOS攻击呢?`Nginx Plus Status module`提供了到后端服务器流量的详细统计,可以用来识别异常的流量。Nginx Plus提供一个当前服务状态的仪表盘页面,同时也可以在自定义系统或其他第三方系统中通过API的方式获取这些统计信息,并根据历史趋势分析识别非正常的流量进而发出告警。

总结

Nginx和Nginx Plus可以作为抵御DDOS攻击的一个有力手段,而且Nginx Plus中提供了一些附加的特性来更好的抵御DDOS攻击并且当攻击发生时及时的识别到,另外,你还可以第三方安全防御来防DDOS,比如:知道创宇抗D保,既可以防DDOS,也能防CC,效果也不错

网站nginx配置限制单个IP访问频率,预防DDOS恶意攻击

对于网站来说,尤其是流量较大出名的网站,经常遇到攻击,如DDOS攻击等,虽然有些第三方,如Cloudflare可以挡,但对于动态网站PHP来说,只能挡一部分。这时候需要对于单个IP恶意攻击做出限流。nginx的两个模块可以限流。

nginx两个限流模块:

连接频率限制,ngx_http_limit_conn_module:官方文档:

请求频率限制,ngx_http_limit_req_module:官方文档:

网上理论很多,根据名字可知:

当然还是看不懂的话,通俗点讲(相对于时间比较):

比如秒杀,抢购,连接频率限制和请求频率限制应该配合使用 , 使用连接频率限制同一IP同时只能有3个连接, 再使用请求频率限制对于同一ip的请求,限制平均速率为5个请求/秒 , 这样比单独只使用一种限制要好很多。

比如只使用请求频率限制 , 可以精确地限制同一ip1秒只能发起5次的http请求 , 假如同一ip1秒内发起了100000次请求 , 虽然限制了只有5次成功响应 , 但是其他的99995次的请求TCP握手建立http连接是不是会消耗服务器资源? 所以还需要配合使用。

1、limit_req_zone,示例:

2、limit_conn_zone,示例:

3、搭配一起使用

1、ab命令

ab是apache自带的压力测试工具。一般不用额外安装,ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试。比如nginx、tomcat、IIS等。

测试命令

2、wrk命令

需自己安装,地址:

安装

测试命令:

还有其他压测工具,自行研究

如何让nginx服务器抵御DDOS攻击

服务器防御DDoS攻击的11种方法

1.确保所有服务器采用最新系统,并打上安全补丁。计算机紧急响应协调中心发现,几乎每个受到DDOS攻击的系统都没有及时打上补丁。

2.确保管理员对所有主机进行检查,而不仅针对关键主机。这是为了确保管理员知道每个主机系统在 运行什么?谁在使用主机?哪些人可以访问主机?不然,即使黑客侵犯了系统,也很难查明。

3.确保从服务器相应的目录或文件数据库中删除未使用的服务如FTP或NFS。Wu-Ftpd等守护程序存在一些已知的漏洞,黑客通过根攻击就能获得访问特权系统的权限,并能访问其他系统——甚至是受防火墙保护的系统。

4.确保运行在Unix上的所有服务都有TCP封装程序,限制对主机的访问权限。

5.禁止内部网通过Modem连接至PSTN系统。否则,黑客能通过电话线发现未受保护的主机,即刻就能访问极为机密的数据。

6.禁止使用网络访问程序如Telnet、Ftp、Rsh、Rlogin和Rcp,以基于PKI的访问程序如SSH取代。SSH不会在网上以明文格式传送口令,而Telnet和Rlogin则正好相反,黑客能搜寻到这些口令,从而立即访问网络上的重要服务器。此外,在Unix上应该将.rhost和hosts.equiv文件删除,因为不用猜口令,这些文件就会提供登录访问!

7.限制在防火墙外与网络文件共享。这会使黑客有机会截获系统文件,并以特洛伊木马替换它,文件传输功能无异将陷入瘫痪。

8.确保手头有一张最新的网络拓扑图。这张图应该详细标明TCP/IP地址、主机、路由器及其他网络设备,还应该包括网络边界、非军事区(DMZ)及网络的内部保密部分。

9.在防火墙上运行端口映射程序或端口扫描程序。大多数事件是由于防火墙配置不当造成的,使DoS/DDOS攻击成功率很高,所以定要认真检查特权端口和非特权端口。

10.检查所有网络设备和主机/服务器系统的日志。只要日志出现漏洞或时间出现变更,几乎可以肯定:相关的主机安全受到了危胁。

腾正-伟豪,望采纳

11.利用DDOS设备提供商的设备。

Nginx如何配置可以限制ddos攻击

你好,参考以下

1、在nginx.conf里的http{}里加上如下代码:

#ip limit

limit_conn_zone $binary_remote_addr zone=perip:10m;

2.在需要限制并发数和下载带宽的网站配置server{}里加上如下代码:

limit_conn perip 2;

limit_rate 100k;

补充说明下参数:

$binary_remote_addr是限制同一客户端ip地址;

limit_conn为限制并发连接数;

limit_rate为限制下载速度

0条大神的评论

发表评论