防御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的方式:
- 高防服务器和带流量清洗的ISP 通常是美韩的服务器,部分ISP骨干供应商有流量清洗服务,例如香港的PCCW。通常可以防御10G左右的小型攻击
- 流量清洗服务 例如:akamai(prolexic),nexusguard 我们最大受到过80G流量的攻击,成功被清洗,但是费用非常贵
- CDN 例如:蓝讯 网宿 cloudflare 等,CDN针对DDOS的分布式特点,将流量引流分散,同时对网站又有加速作用,效果好,成本相对低。
总结一下:发动攻击易,防御难。七层好防,四层难防;小型能防,大型烧钱
相关推荐
本文将详细介绍如何通过Nginx的配置来防御DDoS攻击。 首先,DDoS攻击分为四层流量攻击和七层应用攻击。四层攻击主要针对网络层的带宽,而七层攻击则针对应用程序的处理能力。Nginx作为应用服务器,主要关注七层防御...
Nginx,作为一个高效的反向代理和负载均衡器,可以通过多种策略来帮助抵挡DDoS攻击。 1. **分离主域名和图片域名** 分离主域名和图片域名可以有效分散流量,减轻服务器压力。单独的图片服务器可以减少读取Cookie...
ddos攻击:分布式拒绝服务攻击,就是利用大量肉鸡或伪造IP,发起大量的服务器请求,最后导致服务器瘫痪的攻击。 cc攻击:类似于ddos攻击,不过它的特点是主要是发起大量页面请求,所以流量不大,但是却能导致页面...
Nginx提供了以下几种策略来抵御DDoS攻击: 1. **IP黑名单**:通过`deny`指令阻止特定IP地址或IP段的访问。在`nginx.conf`或相应的server block中添加规则,例如: ```nginx deny 192.168.0.0/24; ``` 2. **...
**问题三:防止DDoS攻击** DDoS攻击是分布式拒绝服务攻击,通过大量源头同时发起攻击。防范措施包括: 1. **限制最大连接数**:设置Nginx的最大并发连接数,避免资源耗尽。 2. **缩短超时时间**:减少长时间未响应的...
通过proxy_pass指令指定后端服务器,proxy_set_header设置请求头,以及limit_conn和limit_rate限制连接数和带宽,防止DDoS攻击。 **4. Nginx的Rewrite规则** Nginx支持基于正则表达式的URL重写规则,通过`rewrite`...
6. **限速与限制连接**:Nginx可以通过`limit_conn`和`limit_req`模块来限制并发连接数和请求速率,防止DDoS攻击。例如: ``` limit_conn conn_limit_per_ip 10; limit_req zone=req_limit_per_ip burst=5 ...
3. **限制速率**:通过 `limit_rate` 和 `limit_conn` 防止 DDoS 攻击。 **监控与故障排查** 1. **使用 `nginx -t` 检查配置文件语法是否正确**。 2. **通过 `/status` 端点查看 Nginx 运行状态(需要配置 `...
1. IP限制:通过`allow`和`deny`指令控制特定IP或IP段的访问,防止DDoS攻击。 2. 防止目录遍历:禁用目录索引并限制对无效路径的访问,防止恶意用户获取系统信息。 3. 避免敏感文件暴露:隐藏`.htaccess`等敏感...
- **限速**:通过`limit_rate`限制客户端下载速度,防止DDoS攻击。 - **访问控制**:使用`allow`和`deny`控制IP访问权限。 - **Gzip压缩**:开启`gzip`压缩,减少网络传输数据量。 - **SSL/TLS**:配置HTTPS支持,...
根据给定的信息,本文将详细解释FreeBSD操作系统上部署Nginx、PHP、MySQL和Zend环境的方法,并介绍如何通过系统优化来防止DDoS攻击。同时,我们也会介绍一种简便的Ports安装方法。 ### 一、FreeBSD + Nginx + ...
- **安全设置**:使用 `limit_conn` 和 `limit_req` 模块限制并发连接和请求速率,防止 DDoS 攻击。 总结,Nginx 1.12.2 的安装和配置涉及到多个层面,从基础的系统环境准备到具体的负载均衡策略,每个环节都需要...
4. **限速限制**:通过 `limit_rate` 或 `limit_conn` 控制客户端的请求速率和连接数,防止 DDoS 攻击。 5. **错误页面**:自定义错误页面,提供更好的用户体验。 ### 四、监控与调试 - 使用 `nginx -t` 检查配置...
在当今数字化时代,网络安全威胁不断增加,包括但不限于DDoS攻击、SQL注入、XSS攻击等。这些威胁可能对网站造成严重的损害,如数据泄露、服务中断等。因此,合理地配置Nginx的安全策略可以有效地提高系统的安全性,...
8. **限速和限制连接**:`limit_rate`可以限制客户端下载速度,`limit_conn`和`limit_req`可以限制同一IP的连接数和请求速率,以防止DDoS攻击。 9. **SSL/TLS支持**:通过`ssl on`开启HTTPS,`ssl_certificate`和`...
CC 攻击(即 HTTP 请求泛洪)是一种第 7 层 DDoS 攻击。 ngx_lua_anticc 是 Nginx 基于的扩展。 有了它,您可以轻松地为您的 Web 服务器添加 CC 攻击保护。 下载 当前版本: 。 配置&&安装 1.准备你的nginx 要使用...
- 资源限制:通过限速、连接数控制等手段防止DDoS攻击,保护服务器资源。 - 错误处理:自定义错误页面,提高用户体验。 6. 扩展与模块 Nginx有丰富的第三方模块,如mod_security用于安全防护,lua模块实现动态...
在Linux环境下,防范CC(Challenge Collapsar)这种特定类型的DDoS攻击是一项重要的任务。CC攻击主要针对Web服务,通过模拟大量合法用户请求来耗尽服务器资源。 以下是一些在Linux系统下防止CC攻击的策略和工具: ...
- 可以通过配置限制访问,防止DDoS攻击: ```nginx limit_conn zone_name max_conns; limit_rate rate; deny all; ``` `limit_conn`限制连接数,`limit_rate`限制速率,`deny`阻止所有请求。 以上仅是Nginx...
- **限制IP访问**:通过`limit_req_zone`和`limit_req`指令限制某个IP的请求频率,防止DDoS攻击。 - **HTTPS配置**:使用SSL/TLS证书,启用HTTPS,确保数据传输的安全性。 - **缓存设置**:合理配置缓存策略,如`...