Home
avatar

𝒙𝒊𝒂𝒐

我的网站被刷了 150G 流量——复盘与反思

起因

我的网站一直是挂在 netlify 的,主域名挂在 Cloudflare 上,有 WAF 和 Bot Fight Mode 防护,一直跑得挺安稳。

前段时间搞了个 bianrong.eu.org 的备用域名绑上去,想着多个入口也没什么坏处。当时图省事,把备用域名挂在另一个 CDN 平台上进行「尝鲜测试」,没开付费套餐,自然也就没有 WAF 和 Bot 防护。

结果就是这个「省事」捅了篓子。

事发经过

攻击是从 5 月 24 号开始的。

Netlify 陆续给我发了带宽超限告警:

时间告警内容
5/24 02
带宽使用达 50%
5/24 18
带宽使用达 75%
5/25 11
带宽使用达 100%
5/26 14
带宽使用达 125%
5/27 18
带宽使用达 150%

两天之内从 50% 干到 150%,净消耗约 150GB 流量。

消耗截图

奇怪的是,主域名一直稳如老狗,零异常。

排查

翻了一下 Netlify 的访问日志,发现所有异常流量都来自那个 bianrong.eu.org 备用域名。

攻击手法非常简单粗暴——脚本一直请求大文件,硬生生把带宽耗光。因为那个 CDN 平台没有 WAF、没有速率限制、没有 Bot 检测,攻击流量畅通无阻地到达了 Netlify 源站。

反观主域名,Cloudflare 的 Bot Fight Mode 直接把这类脚本请求拦截在边缘节点,根本到不了源站。

同时我发现,我同时绑了两个eu.org的备用域名,但只有一个遭到了攻击,另一个同样绑在那个免费的cdn平台上,没有遭到攻击,这让我很是疑惑。bianrong是我b站名的拼音,巧合的是,就在前几天,我这个b站账号下面的动态莫名其妙遭到了侮辱性的语言攻击,而我这个b站账号除了看视频并没有发表什么过多的评论。

经过我几天的思考,我觉得最有可能的是「对方认错人了」。可能对方与其他平台用户名叫「边绒」的用户发生冲突,恰好我在b站的名也是这个,于是他就认为这个是我,在那个评论区对我进行语言攻击,我当时也没管,举报完就消失了。后来他可能又发现了我这个域名,因为eu.org这个域名还是挺常见的,他可能认为是同一个人,于是发动了攻击。

虽然有些离谱,但是我实在想不出其他的可能了。

亏了没有

一开始还挺慌的——150% 超量,会不会扣钱? 查了 Netlify 的计费规则:带宽限额按计费周期重置,超量不结转、不累计到下月扣除。 而且那账号没绑支付方式,所以超额归超额,实际不会产生扣费。

6 月 1 日流量配额自动重置归零,恢复满血。

教训

  1. 不要在任何没有 WAF/Bot 防护的 CDN 上挂生产站点。 哪怕只是备用域名、测试入口,只要它能打到你的源站,就是一个风险面。
  2. Cloudflare 的免费版防护足够挡住绝大多数脚本攻击。 Bot Fight Mode + WAF 规则,对于这种粗暴刷流量攻击来说已经够用了。
  3. eu.org 域名本身就容易招攻击。 因为免费、注册门槛低、争议多,这类域名经常被攻击者盯上。如果要用,一定要放在有防护的 CDN 后面,并且对访问来源做限制。
  4. 监控告警要尽早设。 Netlify 从 50% 就开始发邮件了,如果我在 50% 的时候就注意到并处理,能少亏很多流量。
  5. 能省的钱不要省在安全上。 备用域名图便宜挂在无防护的 CDN 上,结果省下的那点功夫全搭进去排查和善后了。

最后

现在备用域名已经弃用,eu.org 相关解析全删了,攻击源 IP 也拉黑了。站点继续跑在 Cloudflare 后面,短期内不会再碰无防护的 CDN。

150G 流量换一个教训:无 WAF/Bot 防护的 CDN,别绑生产站点,一个入口都不行。

CC攻击 博客 Cloudflare CDN