博客被 DDoS —— 复盘、分析和应对
你没听错。确实是我这个小破站被打了。
众所周知,我的博客是个部署在 Vercel 上面的静态网站,只有评论区和 DL 是动态的。
网站火了
故事要从一月三号开始(刚刚新年没几天就给我整了波大的)
两眼一抹黑
第一波攻击发生的时间是 1/3 下午 14 点左右。请求数量达到了惊人的 3M 个。
其实我一开始并不知道这件事,直到下午 5 点的时候瞄了眼 Vercel 面板才发现不对劲。怎么 100GB 流量用了 70G,1M 请求烧了 80%???
然后我就打开防火墙看看到底发生了什么——

吓得我一激灵,期末周也不管了把高数书扔了,直接开始分析到底发生了什么。
面板后台就不放了,毕竟有些东西比较敏感(其实是没给 Vercel 打钱,没保存历史记录)。我一顿分析,发现攻击者的路径是我的头像:
/img/SamHou.png
好好好,刷流量来了,找了个比较大的文件。
初步应对
我承认这点是我的失策——图片本来应该放在对象存储(图床),然后套一层 CF / Edgeone / ESA 来防护的,我却为了速度和省事直接放在了 Vercel 项目里面,和网站 html 文本放在了一起,这无疑提高了单次攻击消耗的资源价值。
所以还能咋办,删了,扔到对象存储里面。

还有一点,我之前对爬虫都是很宽容的,Bot 全部选择 Log 而不是 JS 质询或拦截。结果导致上面有 400K 次请求,刷流量的机器人没被拦截,烧掉了宝贵的流量。现在直接切换成拦截
一波未平,一波又起
就在我洗洗睡了之后,攻击又开始了。
晚上 11 点左右,就在我躺在床上安详地刷手机的时候,攻击又开始了。

这次几乎全部请求被拦截或质询,攻击者攻击的内容仍然是那个图片文件,但是我删了,所以请求状态码都是 4XX,看来我的防护措施是起了一点效果的。
但是很不幸的是,没有被成功识别为 DDoS 的,但成功拦截的 Bot 在 Vercel 里面也是计费的,因此,Vercel 免费额度彻底用完了:

咱也不知道 Vercel 什么时候会停机……
迁移
既然我们都受到这么大量的攻击了,那么 Vercel 已经不再适合作为博客托管平台了。CF 在国内访问速度太慢,排除。因此,我只能给迁移到 Edgeone Pages。虽然速度稍微慢一点,但至少访问在合理范围内不限量,还能挡一点 DDoS。
最后,我还是得说,祝所有 DDoS 的家伙早日被请喝茶,送一副银手镯。






