热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在nginx上处理一次小型的ddos事件

作者:Ayounginx的负载能力超强,一般小的ddos是无法击垮一台nginx代理的,所以用nginx来过滤掉一些小型的ddos是完全没有问题。早上同事负责的一台服务器当机,重起之后又挂掉,他检查过后发现是有一个链接的访问量很大。我去看了一下,因为这个项目不是公

作者:Ayou

nginx的负载能力超强,一般小的ddos是无法击垮一台nginx代理的,所以用nginx来过滤掉一些小型的ddos是完全没有问题。

早上同事负责的一台服务器当机,重起之后又挂掉,他检查过后发现是有一个链接的访问量很大。

我去看了一下,因为这个项目不是公司的项目,所以应用服务器是Windows+IIS,架构采用的是app_squid架构。因为那个访问量大的链接业务上必须加上no-cache头,所以全部透入后台应用服务器,应用服务器招架不住所以频频出问题。

我对IIS根本不熟,况且那台应用服务器已经基本没法正常服务,所以我就在cache上把受攻击的域名指向中层代理,中层代理再转发到应用服务器。这样架构变成了app_nginx_squid架构,然后我就好正常地开始分析。

整理思路,然后按部就班:

先打开日志,看看到底是怎么回事,看过之后发现确实是有一个链接访问量很大,用命令行统计一下,发现这个链接是正常的所有访问请求100倍之多。由上可知,确实就是这个链接访问量超大引起问题,但是这些访问量是不是正常的呢?从它的ip看,并不是同一个ip,这就比较难判断了,如果确实是真实流量,我把它毙掉,那就会有人要追杀我了。

具体原因的干脆先不查,我把它的no-cache头先干掉好了,这样至少不会死机。作为维护人员,那肯定先要想办法让网站正常服务,然后才能去找原因的。

proxy_hide_header Cache-Control;

嗯,这下这个链接就缓存到前端squid了,应用服务器不会死机了,不过这只是临时方法,不是长久之计,因为这样做影响了业务功能。

所以继续分析日志,多加了几项参数到日志中,这时看到这些大量的请求有一个共同点,那就是user-agent都是一样的,都是MSIE 5.01,而IE5并不是主流浏览器。这样看来,这些请求都是同一个客户端恶意发起的,不知道是用了什么垃圾软件。

找到了原因和特征,当然就可以配置把它干掉了,判断一下user-agent,如果是MSIE 5.01就把它丢到另外一个地方去就可以了,比如指向sudone.com,看看能不能抗得住?!

location = /v2/index.php {
include proxy.conf;
if ( $http_user_agent ~* MSIE 5.01 ) {
proxy_pass http://www.sudone.com;
#access_log /home/logs/1.log main;
}
proxy_pass http://iis.xxx.com;
}

最后开回Cache-Control,访问一下页面,嗯,这回一切正常,业务也没有被修改。


推荐阅读
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文讲述了作者通过点火测试男友的性格和承受能力,以考验婚姻问题。作者故意不安慰男友并再次点火,观察他的反应。这个行为是善意的玩人,旨在了解男友的性格和避免婚姻问题。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 深入解析Linux下的I/O多路转接epoll技术
    本文深入解析了Linux下的I/O多路转接epoll技术,介绍了select和poll函数的问题,以及epoll函数的设计和优点。同时讲解了epoll函数的使用方法,包括epoll_create和epoll_ctl两个系统调用。 ... [详细]
author-avatar
书友73892718
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有