起因

今天是2021年11月的第一天,作为一个社畜,在凌晨看完EDG的比赛之后,便“早早”地睡了觉。上午十点左右,收到一条又拍云发来的短信,提示我的账户已经欠费。那一瞬间的想法是:卧槽?终于轮到我了?

又拍云短信提示欠费

我随即登陆了又拍云的控制台查看,果然被刷了。然而看到这条消息的时候,我内心的复杂程度远远不如中午回家之后。

处理

在确认CDN被刷流量之后,我第一时间登陆dnspod,暂停了对应域名的解析。考虑到对方可能会针对我使用的另一个CDN厂商下手,于是暂停了解析并且将主站解析到了vercel。

中午下班之后去食堂吃饭,菜已所剩无几,以前多少还有点汤水的,而今天相比之前更是恼火。在吃完了难吃的饭菜之后,准备回家,却下起了不算小的雨,于是淋雨回家,吹干头发。

当我真正坐在电脑前的那一刻,我是有一些不知所措的。虽然CDN欠费了要补交费用,以及启用替代方案,事情看起来如此之简单,但我还是沉默了很久。

我已经记不清楚当时在想什么了。是谁刷的?无聊的访客,恶意采集的站长,还是谁跟我开了个玩笑?我无从得知。一百多块钱对我来说不算很多,毕竟我每年一对一助学捐的都有这好多倍。可能让我有些不知所措的是,在这个月开头的一天,就遭遇如此多的坏消息,让人无语了属于是。

成年人的崩溃是从沉默开始的?

溯源

其实我对溯源是根本不抱希望的,无论是CC还是DDOS,但凡有点脑子的人都会用大量境外的肉鸡来实施,即便是国内的ip,我也无法做点什么。

但是我仍然打开了控制台,总得看看到底是哪个B这么无聊。总结一下,攻击的ip是境内的,攻击的客户端是python(万恶的python!),攻击时长从10月31日中午12点半之后开始,持续到今天上午停止解析域名为止,但是不清楚为何又拍云的统计是到中午12点。

被刷情况统计

算下来,总共刷了1TB多。刷流量的两个ip是同一个网段,一个是219.150.144.3,一个是219.150.144.5,另一个来自河南教育网的ip59.70.48.143因为只刷了一个多G,所以忽略不计。家庭宽带一般少有人办理两个同一运营商的,所以我猜测这仍不是攻击者的真实ip。但微步云情报显示该ip是专线ip,所以我还是查了一下ip的位置,如下图(值得一提的是,个人能查询到的ip精度实在有限,所以很大概率存在误差):

ip定位2

同一网段的两个ip大概在河南农业大学和郑州大学北校区附近,但无法说明攻击确实来自定位位置。

像我这么温文儒雅的人,到底会得罪谁呢?也许是我在CDN禁止了某些采集UA让人不爽了罢,也许在服务器做了个假的网站给恶意扫描让他们生气了罢,也许单纯就是有的人无聊了罢……我都无从知道。总而言之:我被刷CDN的流量了。Ade,我的又拍云!Ade,我的多吉云!

后续

出了问题就要解决。解决不了制造问题的人,那就想个办法让对方无法制造问题。于是我最终选择了此前考虑用但一直没用的云盾,因为云盾只限制带宽而不限制流量。奇安信的那个控制台我使用不来,并且CNAME解析会直接显示服务器ip是什么鬼,我果断放弃了。

零零碎碎处理此事,到下午三点左右我这渺小的博客终于算是恢复正常了。事情到此基本就告一段落了,但是值得我去思考的和各位引以为鉴的其实还有很多。

总结

造成此次被刷的原因很简单,我大意了。

在很早之前就听闻过一些博主被刷CDN流量,欠费几百甚至上千的。一方面我觉得自己博客非常渺小,不会被大佬盯上,另一方面我自己的安全意识没有到位。由于我是主站和静态资源分离的,绝大多数图片和js文件都单独用的对象存储,在仔细配置主站的CDN访问控制时,可能疏忽了对象存储的访问控制配置。

建议各位仔细检查一下自己的配置项,有没有配置防盗链(禁止referer为空可能出现问题,但是也是一个保障),有没有设置请求阈值,有没有配置ip黑名单,有没有开启CC防护等等。如果CDN服务商不支持某些配置,可以考虑一下不限流量限制带宽的CDN或者打不死但是速度可能不太理想的cloudflare。

事后我其实一点都不难过,甚至和碎月开玩笑说:“这个人一定是想要我更新博客,给我提供素材。”

谢谢你,用心良苦的陌生人。