话说,从7月18日8点开始,收到百度CDN的通知,说博客受到了热心黑帽同学发来的CC攻击😂。作为一个普通博客,还真是让人受宠若惊。虽说百度云CDN整体用起来马马虎虎,但被攻击有短信通知,依然还是要感谢百度云加速的😂。
鉴于要正常上班,虽然觉得有趣,但是也没啥时间好好收拾,随手翻了下日志,发现是利用搜索会查询数据库,伪造随机字母来发出批量搜索请求,从而给MySQL施压,达到给整个服务器施压的目的(是的,我这互联网乞丐的博客当然是单机的啦)。
最初的攻击
本文简要描述,部分细节和系统架构不做赘述。攻击的原理基本上是下图这样,攻击请求从右侧顺势而下,逐步造成问题,从左侧依次影响整个服务器:
应对攻击的第一方案
讲道理,没被攻击过的嘛,所以碰到问题后,最初切入姿势比较歪,直接给博客的index.php里加入判定搜索的直接重定向,MySQL压力是下来了,压力变成了下面这样:
应对攻击的第二方案
呐,留意到了吧,虽然MySQL压力下来了,但是请求依然到了后端,后端服务能承载的压力是有限的,超载依然存在,虽然博客恢复了,但时不时还是会因为超载而不响应,用户看到的就是空白。
那么能不能把压力继续前置呢?比如挪到Web服务上?查了下Stack Overflow,恩,调整下配置,把压力前置,判定是搜索干脆不发给后端程序,流程图变成了下面这样:
攻击持续
问题呢,到这里就解决了大部分了。到此为止,攻击除了会占满带宽外,并不会造成服务器CPU过载。至此,正常用户就已经可以访问页面了。
但是搜索功能依然无法使用,因为服务器无法区分搜索是用户的还是攻击者发出的,所以截止文章发布前,博客搜索功能依然处于不可用状态。昨晚21点攻击停止片刻后,攻击调整为随机tag和搜索并行~
看了下百度云加速后台,昨天一天218万访问量,打了14.74G的网络流量,使用IP 近7000个。😂
7月19日中午发现,攻击继续了~好吧~但是,没啥影响了0 0博客目前除了搜索以外其他都是可以正常工作的。
特别鸣谢和留言
非常感谢热心的黑帽同学让我见识了一次攻击,希望你能把技术用到正道上,黑帽终归不如白帽来的踏实,无论你是刚入行的脚本小子还是想靠黑帽赚钱,这条路终非正途,随着国内安全问题越来越被重视,还是希望走偏的你,能找机会洗白走上正路,过上你想要的生活,不为生活所迫用技术做这些无聊的事情。
毕竟,可以安安心心的每夜睡个安稳觉的,大多是善良的人~
事件以及问题的解决本身还是很有趣的。感谢部分访客同学邮件告诉我博客无法访问的事情,写这篇文章只是希望大家把这事儿当成个丰富知识的趣闻看看便可。
工作比较忙,后面如果有空,并且攻击的同学锲而不舍的一直保持攻击的话,可能要考虑一个优雅的姿势过滤掉脚本伪造的搜索,并让博客的搜索恢复正常,且行且看先。
这样一个世界,我们会看到黑暗,会被伤害,我们也曾黑暗,也曾伤害他人。但为什么要坚持传递善意?只为安歇之时一晚内心的安宁罢了。愿有光有暗,诸君顺意。
事后的思考
针对本次个攻击后续变换手法随机Tag来说,这个查询本身压力并不高。如果说调优判定逻辑的话,可以枚举出全部有效Tag,直接将非法Tag也像搜索一样过滤掉即可。
本次攻击,直接造成了近两日下载收益损失大概十几元的样子,可以算是“巨款”了,总体来说给我和访客还是带来了不少麻烦的。但作为有趣的你来我往的攻防来说,很明显防御侧能做的事情还有不少。生活总是这样的有趣~
鉴于攻击的同学玩儿不出什么新花样了,虽然攻击持续着,但是,事情已经从有趣变成了无聊。
后续
7月20日,仅下午17:00-20:30 标签攻击累计220W次请求,但未能对博客造成任何影响。自20:39起,攻击停止~
作为后续调整,博客服务器自写了自动过滤逻辑,可以自动将攻击请求重定向到127.0.0.1。至此为止,个人认为,攻击者应该已经掀不起什么大风大浪了~
7月22日 7点24分开始,攻击再次发起,哈哈哈哈哈,好无聊啊~
如您从本文得到了有价值的信息或帮助,请考虑扫描文末二维码捐赠和鼓励。
如本文对您有用,捐赠和留言 将是对我最好的支持~(捐赠可转为站内积分)
如愿意,请向朋友推荐本站,谢谢。
尊重他人劳动成果。转载请务必附上原文链接,我将感激不尽。