配置Nginx服务器防止Flood攻击的方法
测试
我会简单的告诉你如何配置Nginx的限制请求模块并且它是如何保护你的网站,防止你被攻击与DDOS或是其他基于HTTP的拒绝服务攻击。
这个测试中,我将样本页在保存在Blitz.io(现在是免费服务)命名为about.html,用于测试limit_req指令.
首先,我在Blitz上使用下面的指令,用来发起1075个并发请求并且持续一分钟,响应超时设置为2分钟,区域为加州,同时设置了除掉状态200以外的其他状态全部为异常状态,甚至是503都被认为是没有成功.
-p 1-1075:60 --status 200 -T 2000 -r california http://kbeezie.com/about.html
还不算坏,对不对? 但如果这是一个php文档. 很可能有用户会造成PHP进程的502/504状态,让服务器一直崩溃或无响应. 尤其是你使用了没有任何保护的VPS或者其他廉价服务器,故障率会更高。(原文广告,此处屏蔽)
当然你可以使用缓存或其他工具来提高服务器性能与响应能力, 就比如你使用WordPress你肯定要使用wordpress caching plugin. da For those type of people we can use the limit request module.
在Nginx中我们创建一个区域http { },我叫他blitz设置每秒5次请求, 最大容纳数据量为10MB.我使用$binary_remote_addr当作session变量 让你自己比$remote_addr的正常访客可以访问大于10MB的空间.
然周在服务器中定义上这些规则:
limit_req zone=blitz nodelay;
}
然后重新载入Nginx配置,看一下效果:
你会发现现在大于只有285人可以访问到服务器,每秒请求数为4.75 ,没有超过我们设置的5次每秒,检查日志你会发现没有访问到的请求都是HTTP 503,访问到的都是HTTP 200.
使用这样的设置对于想限制地区访问是很有帮助的,它也可以应用在所有的php请求上.
PHP 应用请求限制
如果你想限制所有的PHP应用限制,你可以这样做:
limit_req zone=flood;
include php_params.conf;
fastcgi_pass unix:/tmp/php5-fpm.sock;
}
它可以帮你玩意些设置项像加速或减速,以应对突发或无延时需求. 配置项详情,猛击这里: HttpLimitReqModule.
注:
你可能注意到上面的图表测试了1075个用户请求,这里有个误导,因为所有的访问请求都来自与位于加州的同一个IP(50.18.0.223).
我很难实现一个真实的高流量网络或者DDOS (分布式拒绝服务攻击).这也就是为什么我们访问成功的用户的数量跟IP不是很大. 服务器负载也会影响测试用户的访问数或者地区. 使用免费版本你可以最多并发访问到的用户数是50个. 当然你可以花每天$49美刀让1000个用户访问你的网站.
如果你有足够的内存跟带宽,用单一IP地址测试是很容易的. 用这个工具就可以实现: 高并发量, ab, openload等等. 只不过是在终端界面,没有UI而已.
当然你要自己测试, 记住要使用status flag,因为Blitz会在5秒左右后响应访问请求.
更好的替换方案
这里不会深入讲解更多细节, 如果你认真的想阻止攻击你服务器的DDOS或multi-service attack,还有其他很棒的软件工具像 iptables (linux), pf (packet filter for BSD) , 或者你的服务器提供硬件的话,你可以使用你的硬件防火墙 . 上述的限制模块只会阻止通过HTTP请求过来的洪水攻击,它不会阻止ping包洪水攻击或者其他的漏洞,对于这些情况你可以关闭不需要的服务和不需要的端口,以防止别人的突破.
举个例子,我的服务器对外网公开的端口只有HTTP/HTTPS和SSH. 像MySQL这些服务之绑定本地连接. 也可以将一些通用服务设置成不常用的端口上,这样就不会被嗅探器(iptables/pf会对这种情况有帮助).
相关文章
详解nginx同一端口监听多个域名和同时监听http与https
这篇文章主要介绍了详解nginx同一端口监听多个域名和同时监听http与https的相关资料,需要的朋友可以参考下...2017-07-06- 这篇文章主要介绍了Nginx根据不同浏览器语言配置页面跳转的方法,包括一个简体繁体的基本判断方法及实际根据中英文跳转的例子,需要的朋友可以参考下...2016-05-22
- 周一今天给大家分享shell脚本多实例部署nginx的详细教程,文章通过实例代码脚本给大家详细介绍,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧...2021-10-26
- 这篇文章主要介绍了Nginx中配置过滤爬虫的User-Agent的简单方法,文中罗列了一些常用搜索引擎的爬虫名称以免造成不必要的过滤,需要的朋友可以参考下...2016-01-27
- 这篇文章主要介绍了Nginx访问日志及错误日志参数说明,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-14
- 这篇文章主要介绍了Linux环境下nginx搭建简易图片服务器,需要的朋友可以参考下...2016-01-27
- 这篇文章主要介绍了nginx配置引发的403问题解决办法的相关资料,需要的朋友可以参考下...2017-07-06
- 这篇文章主要介绍了使用nginx方式实现http转换为https的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-09-06
Nginx反向代理proxy_cache_path directive is not allowed错误解决方法
这篇文章主要介绍了Nginx反向代理proxy_cache_path directive is not allowed错误解决方法,需要的朋友可以参考下...2016-01-27nginx+apache+mysql+php+memcached+squid搭建集群web环境
当前,LAMP开发模式是WEB开发的首选,如何搭建一个高效、可靠、稳定的WEB服务器一直是个热门主题,本文就是这个主题的一次尝试。...2016-01-27- Nginx日志主要分为两种:访问日志和错误日志。访问日志主要记录客户端访问Nginx的每一个请求,格式可以自定义。下面这篇文章主要给大家介绍了Nginx自定义访问日志的配置方式,需要的朋友可以参考学习,下面来一起看看吧。...2017-07-06
- 这篇文章主要介绍了nginx使用IPV6的相关配置项介绍,首先查看编译参数是否编译了IPV6模块,然后介绍了监听IPV6的配置语法,需要的朋友可以参考下...2016-01-27
解决使用了nginx获取IP地址都是127.0.0.1 的问题
这篇文章主要介绍了解决使用了nginx获取IP地址都是127.0.0.1 的问题,获取i工具的完整代码文中给大家提到,具体实例代码跟随小编一起看看吧...2021-09-18- 本篇文章主要介绍了nginx修改上传文件大小限制的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧。 ...2017-01-22
- 这篇文章主要介绍了Debian7编译安装nginx简明教程,本文直接给出操作命令和步骤,需要的朋友可以参考下...2016-01-27
- 这篇文章主要介绍了隐藏Nginx或Apache以及PHP的版本号的方法,主要用来防止针对性的漏洞攻击,需要的朋友可以参考下...2016-01-05
- 这篇文章主要介绍了Nginx DNS resolver配置实例,本文讲解在proxy_pass 和 upstream server 通信的时候需要手动指定 resolver,本文就给出了配置实例,需要的朋友可以参考下...2016-01-27
- 这篇文章主要介绍了关于Nginx中if语句的判断条件与多条件判断的相关资料,文中给出了详细的示例代码,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。...2017-07-06
- 偶这里是针对的WIN平台,现在的站长大部分都用WIN2003,相信没几个站长用低版本儿的操作系统的!...2016-01-27
详解Nginx服务器中配置Sysguard模块预防高负载的方案
这篇文章主要介绍了详解Nginx服务器中配置Sysguard模块预防高负载的方案,该模块由阿里巴巴的团队开发,能够设置负载阀值,比较强大,需要的朋友可以参考下...2016-02-02