nginx防止DDOS攻击配置

防御DDOS是一个系统工程,攻击花样多,防御的成本高瓶颈多,防御起来即被动又无奈。DDOS的 特点是分布式,针对带宽和服务攻击,也就是四层流量攻击和七层应用攻击,相应的防御瓶颈四层在带宽,七层的多在架构的吞吐量。对于七层的应用攻击,我们还 是可以做一些配置来防御的,例如前端是Nginx,主要使用nginx的http_limit_conn和http_limit_req模块来防御。 ngx_http_limit_conn_module 可以限制单个IP的连接数,ngx_http_limit_req_module 可以限制单个IP每秒请求数,通过限制连接数和请求数能相对有效的防御CC攻击。下面是配置方法:

一. 限制每秒请求数

ngx_http_limit_req_module模块通过漏桶原理来限制单位时间内的请求数,一旦单位时间内请求数超过限制,就会返回503错误。配置需要在两个地方设置:

  • nginx.conf的http段内定义触发条件,可以有多个条件
  • 在location内定义达到触发条件时nginx所要执行的动作

例如:

http {     limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s; //触发条件,所有访问ip 限制每秒10个请求     ...     server {         ...         location  ~ \.php$ {             limit_req zone=one burst=5 nodelay;   //执行的动作,通过zone名字对应                }            }      } 

参数说明:

$binary_remote_addr  二进制远程地址 zone=one:10m    定义zone名字叫one,并为这个zone分配10M内存,用来存储会话(二进制远程地址),1m内存可以保存16000会话 rate=10r/s;     限制频率为每秒10个请求 burst=5         允许超过频率限制的请求数不多于5个,假设1、2、3、4秒请求为每秒9个,那么第5秒内请求15个是允许的,反之,如果第一秒内请求15个,会将5个请求放到第二秒,第二秒内超过10的请求直接503,类似多秒内平均速率限制。 nodelay         超过的请求不被延迟处理,设置后15个请求在1秒内处理。 

二.限制IP连接数

ngx_http_limit_conn_module的配置方法和参数与http_limit_req模块很像,参数少,要简单很多

http {     limit_conn_zone $binary_remote_addr zone=addr:10m; //触发条件     ...     server {         ...         location /download/ {             limit_conn addr 1;    // 限制同一时间内1个连接,超出的连接返回503                 }            }      }

三.白名单设置

http_limit_conn 和http_limit_req模块限制了单ip单位时间内的并发和请求数,但是如果Nginx前面有lvs或者haproxy之类的负载均衡或者反向代 理,nginx获取的都是来自负载均衡的连接或请求,这时不应该限制负载均衡的连接和请求,就需要geo和map模块设置白名单:

geo $whiteiplist { default 1; 10.11.15.161 0; } map $whiteiplist $limit { 1 $binary_remote_addr; 0 ""; } limit_req_zone $limit zone=one:10m rate=10r/s; limit_conn_zone $limit zone=addr:10m;

geo模块定义了一个默认值是1的变量whiteiplist,当在ip在白名单中,变量whiteiplist的值为0,反之为1
如果在白名单中--> whiteiplist=0 --> $limit="" --> 不会存储到10m的会话状态(one或者addr)中 --> 不受限制
反之,不在白名单中 --> whiteiplist=1 --> $limit=二进制远程地址 -->存储进10m的会话状态中 --> 受到限制

四.测试

使用ab命令来模拟CC攻击,http_limit_conn 和http_limit_req模块要分开测试,同时注意http_limit_conn模块只统计正在被处理的请求(这些请求的头信息已被完全读入)所 在的连接。如果请求已经处理完,连接没有被关闭时,是不会被统计的。这时用netstat看到连接数可以超过限定的数量,不会被阻止。

ab -n 请求数 -c 并发 http://10.11.15.174/i.php

如果被阻止前台会返回503,同时在nginx的error_log中会看到如下错误日志:
被限制连接数:

2015/01/28 14:20:26 [error] 4107#0: *65525 limiting connections by zone "addr", client: 10.11.15.161, server: , request: "GET /i.php?=PHPE9568F35-D428-11d2-A769-00AA001ACF42 HTTP/1.1", host: "10.11.15.174", referrer: "http://10.11.15.174/i.php"

被限制请求数:

2015/01/28 14:18:59 [error] 4095#0: *65240 limiting requests, excess: 5.772 by zone "one", client: 10.11.15.161, server: , request: "GET /i.php?=PHPE9568F34-D428-11d2-A769-00AA001ACF42 HTTP/1.1", host: "10.11.15.174", referrer: "http://10.11.15.174/i.php"

五.其它一些防CC的方法

1.Nginx模块 ModSecurity、http_guard、ngx_lua_waf

  • ModSecurity 应用层WAF,功能强大,能防御的攻击多,配置复杂
  • ngx_lua_waf 基于ngx_lua的web应用防火墙,使用简单,高性能和轻量级
  • http_guard 基于openresty

2.软件+Iptables

  • fail2ban 通过分析日志来判断是否使用iptables拦截
  • DDoS Deflate 通过netstat判断ip连接数,并使用iptables屏蔽

开头说过抗DDOS是一个系统工程,通过优化系统和软件配置,只能防御小规模的CC攻击,对于大规模攻击、四层流量攻击、混合攻击来说,基本上系统和应用软件没挂,带宽就打满了。下面是我在工作中使用过的防御DDOS的方式:

  1. 高防服务器和带流量清洗的ISP 通常是美韩的服务器,部分ISP骨干供应商有流量清洗服务,例如香港的PCCW。通常可以防御10G左右的小型攻击
  2. 流量清洗服务 例如:akamai(prolexic),nexusguard 我们最大受到过80G流量的攻击,成功被清洗,但是费用非常贵
  3. CDN 例如:蓝讯 网宿 cloudflare 等,CDN针对DDOS的分布式特点,将流量引流分散,同时对网站又有加速作用,效果好,成本相对低。

总结一下:发动攻击易,防御难。七层好防,四层难防;小型能防,大型烧钱

参考文章:
http://nginx.org/en/docs/http/ngx_http_limit_req_module.html
http://www.nginx.cn/446.html
http://www.ttlsa.com/nginx/nginx-limited-connection-number-ngx_http_limit_conn_module-module/

时间: 2024-11-06 18:58:16

nginx防止DDOS攻击配置的相关文章

转:nginx防DDOS攻击的简单配置

文章来自于: 近期由于工作需要,做了些防DDOS攻击的研究,发现nginx本身就有这方面的模块ngx_http_limit_req_module和ngx_http_limit_conn_module. 一.基本介绍 1.ngx_http_limit_req_module 配置格式及说明: 设置一个缓存区保存不同key的状态,这里的状态是指当前的过量请求数.而key是由variable指定的,是一个非空的变量,我们这里使用$binary_remote_addr,表示源IP为key值. limit_

nginx 防DDOS攻击设置

nginx 上有两个限制连接的模块一个是 limit_zone 另一个是 limie_req_zone,两个都可以限制连接,但具体有什么不同呢?下面是 nginx 官网上给的解释limit_req_zoneLimit frequency of connections from a client.This module allows you to limit the number of requests for a given session, or as a special case, with

DDos攻击解决办法

(1).DDos概念 分布式拒绝服务攻击(英文意思是Distributed Denial of Service,简称DDoS)是指处于不同位置的多个攻击者同时向一个或数个目标发动攻击,或者一个攻击者控制了位于不同位置的多台机器并利用这些机器对受害者同时实施攻击.由于攻击的发出点是分布在不同地方的,这类攻击称为分布式拒绝服务攻击,其中的攻击者可以有多个. 防御DDOS是一个系统工程,攻击花样多,防御的成本高瓶颈多,防御起来即被动又无奈.DDOS的 特点是分布式,针对带宽和服务攻击,也就是四层流量攻

nginx通过配置防止DDoS攻击

什么是DDoS攻击 DDoS攻击是Distributed Denial of Service的缩写,翻译成中文就是分布式拒绝服务.即不法黑客组织通过控制服务器等资源,发动对包括国家骨干网络.重要网络设施.政企或个人网站在内的互联网上任一目标的攻击,致使目标服务器断网,最终停止提供服务. 举个栗子,我开了一家店生意很好,隔壁邻居看不下去了叫他的七大姑八大姨每天都到我的店里来占着位置却不买东西,这样我的生意自然就不行了.也就是攻击者利用“肉鸡”对目标网站在较短的时间内发起大量请求,大规模消耗目标网站

使用Nginx、Nginx Plus抵御DDOS攻击

原创 2015-10-16 陈洋 运维帮 DDOS是一种通过大流量的请求对目标进行轰炸式访问,导致提供服务的服务器资源耗尽进而无法继续提供服务的攻击手段. 一般情况下,攻击者通过大量请求与连接使服务器处于饱和状态,以至于无法接受新的请求或变得很慢. 应用层DDOS攻击的特征 应用层(七层/HTTP层)DDOS攻击通常由木马程序发起,其可以通过设计更好的利用目标系统的脆弱点.例如,对于无法处理大量并发请求的系统,仅仅通过建立大量的连接,并周期性的发出少量数据包来保持会话就可以耗尽系统的资源,使其无

配置 Haproxy 防止 DDOS 攻击

作为 load balancer, Happroxy 常常作为服务器的前端,向外界用户提供服务的入口,如果能在入口处处理安全相关问题,将极大简化后端的设计.事实上,Haproxy 不仅仅是一款开源出色的 load balancer(四层和七层),而且在安全上也相当出色.它配合内核 IP/TCP 协议栈,能够较好的抵抗 DOS, DDOS 攻击,还能通过限制单个 IP 的连接数和请求速率等,防止用户的恶意行为. Haproxy 配置参数多的一塌糊涂,因而功能丰富,灵活多样,本文抛砖引玉,更多的安全

配置 Haproxy 防范 DDOS 攻击

作为 load balancer, Happroxy 常常作为服务器的前端,向外界用户提供服务的入口,如果能在入口处处理安全相关问题,将极大简化后端的设计.事实上,Haproxy 不仅仅是一款开源出色的 load balancer(四层和七层),而且在安全上也相当出色.它配合内核 IP/TCP 协议栈,能够较好的抵抗 DOS, DDOS 攻击,还能通过限制单个 IP 的连接数和请求速率等,防止用户的恶意行为. TCP syn flood attacks 通过向服务器发送大量的 TCP syn 分

利用nginx 日志处理ddos攻击

#防止ddos攻击,将此脚本放置到定时任务中. #!/bin/bash log='/usr/local/nginx/logs/nginx.log' #日志绝对路径 DATE=`date -d '1 minutes ago' "+%d/%b/%Y:%H:%M"`  #显示出日志格式的时间,方便匹配,%b简短#格式时间,-d 显示设定的时间. tmp=`date "+%s%N"`  #秒要精确化 grep "$DATE" $log|awk '{pri

Linux iptables防火墙详解 + 配置抗DDOS攻击策略实战

inux iptables防火墙详解 + 配置抗DDOS攻击策略实战 Linux 内核中很早就实现了网络防火墙功能,在不同的Linux内核版本中,使用了不同的软件实现防火墙功能.在2.0内核中,防火墙操作工具叫:ipfwadm在2.2内核中,防火墙操作工具叫:ipchains在2.4以后的内核,防火墙操作工具叫:iptables ipfwadm 和 ipchains 比较老,已成历史版本,本章主要介绍Iptables 一.iptable 操作命令参数详解 -A  APPEND,追加一条规则(放到