动了谁的蛋糕(二)
本文最后更新于 2025年11月4日 下午
继上次盗刷我生活博客网站的流量后,攻击者愈发猖獗,之后连续四次对我的技术博客展开了攻击,有必要总结一下。
*注:下列所有服务均为阿里云提供。
病灶所在——OSS
对于静态资源的访问,各产品的特点如下:
| 产品 | 是否可以自行中断服务 | 是否可以限制流量 | 是否可以封禁 IP | 是否可以设置报警 |
|---|---|---|---|---|
| 云服务器 ECS | ✅ | ✅ | ✅ | ✅ |
| 内容分发网络 CDN | ✅ | ✅ | ✅ | ✅ |
| 对象存储服务 OSS | ❌ | ❌ | ❌ | ✅ |
对于防盗刷来说,上述功能的重要性由高到低依次为:可以自行中断服务 可以限制流量 可以封禁 IP 可以设置报警。其中 ECS 可以进行任意的自定义,所以理论上所有的功能都能实现,就不予讨论,这里只分析 CDN 和 OSS。
如上表所示,OSS 基本路边一条,可以被狠狠地攻击。唯一的优势就是可以套上 CDN,从而获得 CDN 的种种功能。
寻找庇护——CDN
给 OSS 接上 CDN 的服务逻辑如 下图 所示:

共两个数据请求逻辑:
- OSS 与 CDN。CDN 向 OSS 发起请求的流量被称为 CDN 回源到 OSS 的流量,这一部分不计费。OSS 响应 CDN 的流量被称为 OSS 流出到 CDN 的流量,这一部分产生 费用,为 0.15 元/GB;
- CDN 与客户端。客户端向 CDN 发起请求的流量上图没标出来,为用户自己的上行流量,和服务端无关。CDN 响应客户端的流量被称为 CDN 资源下发的流量,费用 按梯度收费,内陆为 0.24 元/GB,其他地区费用较高。
由于 CDN 支持「可以自行中断服务、可以限制流量、可以封禁 IP」这三个 OSS 不支持的功能,那么给 OSS 套上 CDN 并且将 OSS 的权限从公共读调到私有后,就约等于给 OSS 也赋予了 CDN 的这三个功能,完美的解决方案!唯一的缺点就是 CDN 不能用学生优惠券抵扣了……
安插眼线——SLS
由于封禁 IP 并不是自动的,需要自行分析日志然后手动配置 IP 黑名单,所以就有必要获得这些服务的访问日志。阿里云提供了简单日志服务 (Simple Log Service, SLS)。为了统一管理日志,我就给涉及到公网访问的 ECS 和 CDN 都配置 SLS 了。
SLS 的优点在于监控阿里云的产品比较方便,缺点在于需要收费,但是我目前的服务规模并不算大,所以基本等于免费。
找出幕后黑手——复盘日志
截至目前,攻击者一共发动了五次攻击。
第一次,大约在 9 月 22 日,攻击者对我的生活博客 blog.dwj601.cn 发起了攻击。数据当时还放在 OSS 上,然后刷了大概 15GB 的流量。考虑到生活博客内容不多,我的解决方案是把数据放到云服务器上,然后封禁对应的 IP 网段,并且给 OSS 接入了 SLS 以进行更全面地监控。详情见《动了谁的蛋糕》系列第一篇。
第二次,大约在 10 月 15 日,攻击者对我的技术博客 wiki.dwj601.cn 发起了攻击。数据当时也放在 OSS 上,短时间内访问了近六万次。我之所以将其判定为恶意攻击,是因为我的技术博客一共就 30MB 左右,其中一个页面最大,大约有 3MB,攻击者就逮着这个页面疯狂访问,这一定是故意的了。如下图所示:

对于这次攻击,我的对策是将技术博客套一层 CDN 并且接入 SLS(注意,套上 CDN 的 OSS 就没必要单独接入 SLS 了,直接给 CDN 接入 SLS 即可)。因为技术博客的流量相较于生活博客要大得多,基于 OSS 再套 CDN 便于我后期业务的扩展(好像也不叫业务,因为都是用爱发电哈哈)。
此后攻击者又屁颠屁颠地攻击了三次,由于我设置了短时流量峰值,短时间内 CDN 的流量超过峰值后就会自动停掉服务,所以后面我的损失就可以被规划在 0.5 元一次了,并且还可以根据日志定位攻击者的 IP 从而精准地封禁。OSS 套上 CDN 后,攻击者的三次攻击行为如下图所示:

由于日志最近新接入,数据不太全,加上我误删除了一些日志,所以第二次攻击的信息就没法复盘了。好在 CDN 提供了离线的完整日志,可以利用它分析从 10 月 16 日开始的三次攻击。
经过简单的脚本撰写,成功找出了违规的 IP,根据 IP 查询工具的结果,所有的 IP 均来自江苏盐城,和第二次的攻击来源一致,初步推断为同一人作案。
我的最终方案是利用阿里云 CDN 的 IP 黑名单功能封禁对应的 IP 网段。
总结
说实在话,最近的网站攻击让我学到了很多东西(比如日志分析方法、阿里云的各种云服务哈哈),也极大地完善了网络架构来确保未来的损失最小化(比如私有化 OSS 并套上 CDN)。希望《动了谁的蛋糕》系列到此为止,不要再有下文了 :<