配置Nginx服务器防止Flood攻击的方法

 更新时间:2015年06月26日 15:13:10   投稿:goldensun  
这篇文章主要介绍了配置Nginx服务器防止Flood攻击的方法,包括PHP的应用请求限制等降低负载的措施,需要的朋友可以参考下

 测试

我会简单的告诉你如何配置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

2015626145512077.jpg (800×678)

 还不算坏,对不对? 但如果这是一个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 $binary_remote_addr zone=blitz:10m rate=5r/s;

然周在服务器中定义上这些规则:

复制代码 代码如下:
location = /about.html {
 limit_req zone=blitz nodelay;
}


然后重新载入Nginx配置,看一下效果:

2015626145841837.jpg (800×678)

 你会发现现在大于只有285人可以访问到服务器,每秒请求数为4.75 ,没有超过我们设置的5次每秒,检查日志你会发现没有访问到的请求都是HTTP 503,访问到的都是HTTP 200.

使用这样的设置对于想限制地区访问是很有帮助的,它也可以应用在所有的php请求上.

PHP 应用请求限制

如果你想限制所有的PHP应用限制,你可以这样做:

复制代码 代码如下:
location ~ \.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服务器的Split Clients模块配置过程

    记录Nginx服务器的Split Clients模块配置过程

    这篇文章主要介绍了Nginx服务器的Split Clients模块的配置过程记录,ngx-http-split-clients模块用于切分客户端连接,需要的朋友可以参考下
    2016-01-01
  • nginx添加nginx-sticky-module模块步骤的实现

    nginx添加nginx-sticky-module模块步骤的实现

    nginx-sticky-module模块是nginx实现负载均衡的一种方案,和ip_hash负载均衡算法会有区别的,本文主要介绍了nginx添加nginx-sticky-module模块步骤的实现,感兴趣的可以了解一下
    2023-08-08
  • Nginx中的主要应用场景解读

    Nginx中的主要应用场景解读

    这篇文章主要介绍了Nginx中的主要应用场景解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • Nginx上传文件大小的简单修改方法

    Nginx上传文件大小的简单修改方法

    这篇文章主要给大家介绍了关于Nginx上传文件大小的简单修改方法,文中通过示例代码介绍的非常详细,对大家学习或者使用Nginx具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04
  • Nginx安装后/etc/nginx/conf.d下没有default.conf的解决

    Nginx安装后/etc/nginx/conf.d下没有default.conf的解决

    nginx.conf是nginx默认加载的配置文件 通过nginx -V可以看nginx默认配置文件路径,本文主要介绍了Nginx安装后/etc/nginx/conf.d下没有default.conf的解决,感兴趣的可以了解一下
    2023-11-11
  • 详解nginx 代理多个服务器(多个server方式)

    详解nginx 代理多个服务器(多个server方式)

    本篇文章主要介绍了详解nginx 代理多个服务器(多个server方式),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • Nginx 日志轮转的实现示例

    Nginx 日志轮转的实现示例

    Nginx日志轮转是监控和调试Web服务器的重要工具,通过定期归档、压缩和清理日志文件,可以节省磁盘空间、提高性能并方便故障排查,下面就来介绍一下
    2024-12-12
  • Nginx搭建自己的CDN服务器的方法步骤

    Nginx搭建自己的CDN服务器的方法步骤

    本文主要介绍了Nginx搭建自己的CDN服务器的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-02-02
  • Linux环境下安装nginx教程

    Linux环境下安装nginx教程

    大家好,本篇文章主要讲的是Linux环境下安装nginx教程,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • Nginx 简介、安装与配置文件详解

    Nginx 简介、安装与配置文件详解

    Nginx是一款轻量级和高性能的 Web 服务器、反向代理服务器、电子邮件(IMAP/POP3/SMTP)代理服务器,是带有 BSD-like 协议的开源产品,这篇文章主要介绍了Nginx 简介、安装与配置文件详解,需要的朋友可以参考下
    2024-04-04

最新评论