2023年5月4日,有人 DOS 攻击我

跑了我不到 40 块钱的流量

辛亏有上次被 Clash 的 Allow LAN 利用的经验,没充太多钱(那次损失了近 200 元)

后来发现是 free-chat 的 node 进程在跑流量,一结束就好了

但还是没法分出来恶意流量,直到我导出了腾讯云 CDN 的日志(下面截取头 10 行):

可以看到因为它每次访问都带了一个 queryString 所以缓存都 miss 了,这就是缓存击穿,所以流量全回源了


后来我紧急把 CDN 里的 queryString 调成了忽略全部(毕竟我这个应用确实没有用到 query String 的 url)

这样就能命中缓存了,但是还不够完美,因为:

  1. CDN 还是被跑了很多流量给攻击者,虽然 CDN 的流量更便宜,但钱还是钱

  2. 想骂一下攻击者

我想起了之前不是有个作为热备源站,实则在停机更新时显示公告信息的网站的服务嘛,就给它改了改:

但这个应用主要还是用来做静态文件服务的,前面也有很多 caching 的代码,和反攻击的代码放在一起就不太好。于是我又改写了之前用来重定向 index.chat.bnu120.spaceic.free-chat.asia 的 Sanic 服务,让它拥有了一样的功能,顺便了解了一下 Sanic 的生态(真的贫)

还给它加了层压缩(可惜好像 Sanic 生态中没有好用的 brotli 压缩的库),实测能节省一半的带宽🤩

请求数没怎么减少(没截图)但流量和带宽大幅下降,算是搞定啦 ~

本文开头的图就是这个 Sanic 应用的输出