前言

Nginx是一款轻量级的Web服务器,由俄罗斯的程序设计师Igor Sysoev所开发,最初供俄国大型的入口网站及搜寻引Rambler使用。 其特点是占有内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网站服务器中表现较好。
防御DDOS是一个系统工程,攻击花样多,防御的成本高瓶颈多,防御起来即被动又无奈。DDOS的 特点是分布式,针对带宽和服务攻击,也就是四层流量攻击和七层应用攻击,相应的防御瓶颈四层在带宽,七层的多在架构的吞吐量。对于七层的应用攻击,我们还 是可以做一些配置来防御的,例如前端是Nginx,主要使用nginx的http_limit_conn和http_limit_req模块来防御。 ngx_http_limit_conn_module 可以限制单个IP的连接数,ngx_http_limit_req_module 可以限制单个IP每秒请求数,通过限制连接数和请求数能相对有效的防御CC攻击。
下面这篇文章主要给大家介绍了关于Nginx防御DDOS攻击的配置方法,分享出来供打击参考学习,下面来一起看看详细的介绍:
下面是配置方法:
一. 限制每秒请求数
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
2.软件+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/
# nginx
# 防止ddos攻击
# ddos
# 攻击防御
# nginx配置防止ddos
# Nginx中CC攻击与DDoS防御的高级策略指南
# Nginx解决Http慢攻击(Slow HTTP Attack)的方法
# 配置Nginx实现简单防御cc攻击
# Nginx防止流量攻击的配置详解
# Nginx服务器抵御CC攻击的相关配置讲解
# 配置Nginx服务器防止Flood攻击的方法
# nginx配置防止慢速攻击的实现
# 连接数
# 时间内
# 四层
# 七层
# 是一个
# 负载均衡
# 这篇文章
# 俄国
# 都是
# 就会
# 好了
# 特点是
# 多个
# 已被
# 又有
# 说过
# 俄罗斯
# 不受
# 较好
# 给大家
相关文章:
如何快速配置高效服务器建站软件?
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
如何快速使用云服务器搭建个人网站?
MySQL查询结果复制到新表的方法(更新、插入)
网站代码制作软件有哪些,如何生成自己网站的代码?
如何在Golang中处理模块冲突_解决依赖版本不兼容问题
如何在企业微信快速生成手机电脑官网?
b2c电商网站制作流程,b2c水平综合的电商平台?
广州商城建站系统开发成本与周期如何控制?
临沂网站制作公司有哪些,临沂第四中学官网?
如何在新浪SAE免费搭建个人博客?
如何选择高效稳定的ISP建站解决方案?
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
Python lxml的etree和ElementTree有什么区别
如何通过智能用户系统一键生成高效建站方案?
红河网站制作公司,红河事业单位身份证如何上传?
制作销售网站教学视频,销售网站有哪些?
如何快速查询网址的建站时间与历史轨迹?
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
建站主机系统SEO优化与智能配置核心关键词操作指南
单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?
php json中文编码为null的解决办法
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
如何安全更换建站之星模板并保留数据?
深圳网站制作案例,网页的相关名词有哪些?
青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?
定制建站流程步骤详解:一站式方案设计与开发指南
如何用景安虚拟主机手机版绑定域名建站?
如何用PHP工具快速搭建高效网站?
视频网站app制作软件,有什么好的视频聊天网站或者软件?
建站之星CMS建站配置指南:模板选择与SEO优化技巧
如何选择适配移动端的WAP自助建站平台?
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
网站制作服务平台,有什么网站可以发布本地服务信息?
建站之星导航如何优化提升用户体验?
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
建站之星手机一键生成:多端自适应+小程序开发快速建站指南
电商网站制作价格怎么算,网上拍卖流程以及规则?
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
建站之家VIP精选网站模板与SEO优化教程整合指南
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
Python文件管理规范_工程实践说明【指导】
建站主机无法访问?如何排查域名与服务器问题
建站之星24小时客服电话如何获取?
如何在云指建站中生成FTP站点?
如何在IIS7中新建站点?详细步骤解析
黑客入侵网站服务器的常见手法有哪些?
如何在阿里云部署织梦网站?
广东企业建站网站优化与SEO营销核心策略指南
*请认真填写需求信息,我们会在24小时内与您取得联系。