记录阿里云OSS第一次受到流量攻击

自今年3月起静态博客开始托管在阿里云的OSS对象存储上,香港节点无需ICP备案而且速度尚可,从大陆访问比GitHub PagesCloudflare稳定很多。主站因为备案要求不能放在大陆,字体、图片之类的资源文件不使用自定义域名则无此限制,所以为提升国内访问速度都被托管在阿里云杭州节点的OSS上。

OSS的流量费用并不廉价,为规避可能的账单风险提前用云监控设置过访问规则,当每分钟流量超过200MB时触发报警,自动调用函数计算关闭OSS对外服务。我这样的小站点,监控用量、临时关站是应对低成本流量攻击最适合的策略。

报警

昨天中午突然收到阿里云的报警短信:

Aliyun warning sms

意识到预想中的情况发生了,拿出手机打开博客果然无法访问,倒是长舒一口气,看来提前配置的监控策略已经成功关闭OSS对外服务。

解析

去阿里云控制台翻看日志,发现在12:19~12:25的6分钟内对同一个字体文件有62万次请求:

Aliyun most requested resource

主要来自4个北美/德国的IP地址:

Aliyun top client ip

橘红色代表成功请求,绿色代表失败请求,可以看到在一个时间点后失败陡增,即OSS开始关闭对外服务:

Aliyun request timeline

结合阿里云提供的访问数据整理出以分钟为单位的时间线:

时间 成功请求数 失败请求数 公网流出流量
12:19~12:20 89 0 5.3MB
12:20~12:21 4700 0 2.2GB
12:21~12:22 36455 0 17.0GB
12:22~12:23 46944 7 21.8GB
12:23~12:24 27255 339730 12.7GB
12:24~12:25 2 172155 0.4MB
12:25~12:25 4 2 0MB

从表格看,12:2012:21公网流出流量超出阈值,但直到12:2312:24才出现大量失败请求,与短信显示的报警时间12:23:19吻合。查询触发的函数计算日志,是在12:23:26执行关闭OSS对外服务。

显然,报警时间晚了2分钟。我在云监控中设置的粒度单位是分钟,应该在12:2112:22触发报警才对,事实证明被寄予厚望的云监控也并非实时,耸肩。

总结起来,源自国外多个IP的攻击持续5分钟,前3分钟畅通无阻,共62万次请求,其中11万次成功,消耗53GB流量和对应的25元账单。这种家庭网络就能轻易发起的流量攻击对普通博主的成本伤害是挺大的,商业带宽并不廉价,接入网络需要谨慎配置监控策略,小心成为“一晚上被盗刷一套房”的都市传说主角。

arrow_upward