前段时间,本站遭遇了一次CC攻击,具体攻击的原因未知,攻击持续时间大概在1天左右,攻击器使用了大量IP对本站进行了CC攻击,使得本站一度过载出现无法访问的情况,通过一番努力,在攻击开始后一段时间以后成功封堵了攻击者,本文简要记述了当日的攻击和防御过程,谨以为戒。
首先给出本站的基本构架,本站采用asp.net mvc 1.0开发,基于sqlite数据库系统,部署在win2008+IIS7的系统上,本次攻击是典型的CC攻击,攻击者使用大量肉鸡发起大量无效http请求,而导致程序过载。
攻击大概在某天上午开始了,由于本站采用的sqlite为单文件数据库,在大并发情况下负载能力较低,对于一般blog程序自然是绰绰有余,但是在大量攻击的情况下,该数据库就无法充分利用系统资源了,在服务器cpu占用率在30%左右的时候,本站开始变得极为缓慢甚至出现程序执行错误,正常访问出现问题。
出现问题后,我进入服务器,发现流量达到5M左右,活动http连接在200以上,在此情况下,sqlite负载下的本程序显然已经无法正常服务,于是开始考虑应对方法。
对付CC攻击,一般采用防火墙封锁或者负载均衡的方式处理,负载均衡显然不太现实,因此,我们考虑采用防火墙系统封堵大量非法请求IP,win2008中自带了功能极为强大的防火墙系统,因此,我们使用它来封锁非法请求。
由于访问IP量巨大,因此,手动处理和辨别非法ip是不现实的,因此,我考虑使用程序分析攻击ip的方式,对iis日志访问记录进行详细分析,分析方法如下:
1.对当日的访问ip进行统计
2.攻击者的典型特征是短时间多次连接,通过该方式,筛选出大量可疑IP
3.对可疑IP进行分析,剔除搜索引擎蜘蛛IP
5.最后剩下的基本上就是攻击者IP
通过以上方法,我们可以在较高精确度的情况下找出攻击者IP,通过对本次攻击的日志分析,在封堵大量攻击者IP之前,找到嫌疑度很高的IP988个。
然后需要做的就是在防火墙封堵这些IP,规则采用入站规则,这样,防火墙封堵将获得很高的效率,经过试验发现,windows防火墙一条规则大概可以封堵600多个单一IP,因此,我创建了两条规则,通过脚本,将这些可疑度很高的ip全部加入拒绝ip列表,完成之后,服务器流量和cpu占用率马上下降到正常水平。
在攻击过程中,经常出现攻击者攻击一段时间,停止一段时间,因此,我采用系统通知的方式,在服务器负载或者流量突然很大的时候进行通知,这样就可以在第一时间得知攻击情况并进行封堵。
在一天以后,攻击停止,我解开了这两条规则,由于攻击者经常使用合法ip进行攻击,因此这些ip的用户也很可能访问本站,因此在攻击停止之后需要解开规则。
本次规则,共出现攻击ip998个,在封堵之前,攻击次数最多的ip202.108.xxx.xxx进行了1401此攻击连接,最少的攻击IP189.31.xxx.xxx进行了11次攻击连接,在攻击停止之后,再次对日志进行分析,共产生116494次攻击访问请求,同时将系统最高在线人数刷新到331人,考虑在攻击不久之后便封堵了大量攻击IP,因此本次攻击量还是比较大的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异