7月7日我收到一封阿里云的邮件,提示 CDN 流量包余量不足。当时正忙着其他事情,以为只是正常消耗,因此并没有在意。7月8日再次收到阿里云邮件,提示账户欠费,服务器已经停止公网访问。
此时我才意识到出现问题了,而且第一反应就是遭到了攻击。
登录阿里云控制台,发现账户余额已经是负数。阿里云 针对后付费服务给每个用户设定了不同的额度,所幸我的额度不高,因此达到额度之后就直接停止服务了,没有造成一夜之间债台高筑的后果。
![CDN被刷流量时的峰值带宽](https://image.idcbuy.net/wp-content/uploads/2024/07/20240725143913863.png?x-oss-process=style/blog)
![CDN被刷流量时的总流量](https://image.idcbuy.net/wp-content/uploads/2024/07/20240725143953425.png?x-oss-process=style/blog)
会导致账户快速欠费的一般就是 CDN,而我一开始收到提示的产品也是 CDN。进入 CDN 控制台,赫然发现阿里云对于恶意刷流量的提示,说明不止是我遇到了这个问题:
【风险提醒】近期阿里云CDN团队收到部分客户反馈域名在 无安全防护配置 的情况下,遭受大量非正常业务的访问请求,最终产生高额账单。关于如何安全使用CDN,建议您检查域名配置,并关注相关风险和应对方案,详细说明可以参考: 高额账单风险警示。
![阿里云CDN对盗刷导致高额账单的警告提示](https://image.idcbuy.net/wp-content/uploads/2024/07/20240709140957678.png?x-oss-process=style/blog)
事实也证明近期确实国内众多使用 CDN 的网站都遭到了攻击,在论坛和网站上都有人分享自己的遭遇:
- 关于本站CDN遭到山西联通 IP 刷流量的说明 | Toms Project 官方博客 (projectoms.com)
- 山西联通刷 CDN 的来新 IP 了 – V2EX
- [更新] 山西/江苏/安徽联通疑似PCDN刷量网段 建议站长及时拉黑这些IP段 – 蓝点网 (landiannews.com)
- 记一次 CDN 流量攻击事件 | 太傅博客 (taifua.com)
据分析,无差别盗刷 CDN 是为了用大量下载平衡 PCDN 的上传,避免被运营商检测到。
盗刷导致的高额账单能否减免?
既然阿里云知道有人在恶意刷流量,那么这部分费用是否可以得到减免呢?
很抱歉,在《高额账单风险警示》中,阿里云始终传递这个信息:因恶意攻击或流量盗刷产生的高额账单无法免除/退款。
![阿里云CDN《高额账单风险警示》](https://image.idcbuy.net/wp-content/uploads/2024/07/20240709141724691.png?x-oss-process=style/blog)
如果账户已经欠费停机,要恢复服务只有充值支付账单这一条路,否则连 CDN 的设置页都进不去。我在网上看到有人因 CDN 被盗刷,产生了高额账单,最后直接放弃阿里云账户,也就是说放弃了阿里云的所有服务。
补救措施
虽然我的账单欠费不算多,但我没有立刻充值上线,因为不能确定攻击是否还在继续,一旦上线却没有配置好防护规则的话,很可能又要欠费停机。
所以我做了两个准备工作:
- 联系客户确认有哪些防护手段,找到对应的设置教程;
- 下载离线日志,筛选出请求量最大的域名、文件,以及访客IP、UA等信息,以便后续设置黑名单。
做完准备后,我才充值补齐欠款,将 CDN 重新上线,然后开始设置。
措施一:设置访问控制
访问控制中的 URL 鉴权比较复杂,因此我只做了 Referer 防盗链、IP黑名单、User-Agent 黑名单。
Referer 防盗链:访问资源时,正常的请求头会携带来源信息,目标服务器就可以知道访客是从哪个域名来的。一般图片之类的静态文件只会从自己的站点引用,因此可以在此将需要引用资源的域名添加到白名单。设置之后,从其他域名跳转、引用,或者直接访问资源 URL 就会被 CDN 拒绝。
![CDN设置Referer 防盗链](https://image.idcbuy.net/wp-content/uploads/2024/07/20240725142831789.png?x-oss-process=style/blog)
IP黑名单:本次攻击已经引起众多站长和云服务厂商的注意,例如,多吉云发布 公告 不定时更新他们检测到的攻击者 IP 网段。我们可以添加到 IP 黑名单,禁止这些网段访问。虽然会影响到部分正常访客,但此时更重要的是保护自己。
![CDN设置IP黑名单](https://image.idcbuy.net/wp-content/uploads/2024/07/20240725145843346.png?x-oss-process=style/blog)
User-Agent 黑名单:正常发出的请求会携带客户端信息,在日志中可以看到大量空 UA 的请求,因此可以将空 UA 加入黑名单,禁止这类请求的访问。如果日志中看到其他非正常浏览器的 UA,也可以一并加入黑名单中。
![CDN设置 User-Agent 黑名单](https://image.idcbuy.net/wp-content/uploads/2024/07/20240725150453318.png?x-oss-process=style/blog)
措施二:设置带宽限制
攻击者的 IP 可以改变,Referer 和 User-Agent 信息可以伪造,因此还需要辅以带宽限制来减少损失。
带宽限制有两方面:封顶带宽和单请求带宽。
封顶带宽是指一个时间段内统计到的 CDN 域名收到的总的请求带宽;单请求带宽是指请求某一个资源时最多给多少速率。
为什么这两个都要设置好呢?
因为攻击者可能拥有不同IP的众多设备,他可以让这些设备同时发起访问。设置好单请求带宽可以有效减少流量消耗,降低损失;设置好封顶带宽,则可以在流量超出阈值的时候直接将 CDN 下线,避免进一步的损失。
如果 CDN 主要用于加速图片、CSS、JS 等小文件,可以将单请求带宽设小一些,例如 150KB/s,这样既可以保证每张图片的顺利加载,又可以避免被盗刷者消耗大量流量。封顶带宽则需要根据之前的统计来进行设置,尽可能避免设置过高而导致失去防护效果,也不能设置太低,CDN 频繁下线会影响访客的正常体验。
补救措施的结果
经过以上设置,产生了三个结果:
第一个是好的,流量明显下降,没有再出现一晚上刷完流量包的情况。
第二个结果不太理想。由于设置了单请求带宽限制,每次访问的速率能够得到控制,但是攻击者短时间内发起多个请求,轻易就达到了总的封顶带宽,导致 CDN 报警下线,只能手动重新启用。频繁下线影响了正常访客的使用。
第三个结果可以说没有达到我们控制成本的目的。虽然我们设置了访问控制选项,也设置了带宽限制,但是这些行为都是请求到达后才生效的。而攻击者并没有坚持要拿到资源,而且也没有打算将 CDN 流量耗光,所以即使攻击返回的状态码都是 4XX,他也没有停止请求。这就导致 CDN 的免费请求额度早早被消耗光了,攻击产生的无效请求则继续导致账户扣费。
![CDN被盗刷流量时产生的 4XX 状态码](https://image.idcbuy.net/wp-content/uploads/2024/07/20240725162147240-798x252.png?x-oss-process=style/blog)
很恶心,但是没有办法,只能寻找其他方案。
使用 WAF 拦截 CC 攻击
如果要早早将攻击者的非法请求拦截,需要使用频次控制,就是在某个 IP 达到频次阈值时自动拒绝它的访问。
以前可以联系客服开通阿里云 CDN 的频次控制功能,但这次我当我联系客服时,对方表示现在已经无法开通了,如果需要频次控制功能,需要将 CDN 升级到 DCDN(全站加速)。
DCDN 增加了一些安全功能,附加的功能当然不是免费的,成本比 CDN 更高。但是相比被攻击者盗刷流量和请求数导致的高额账单,这部分成本是值得的。
阿里云提供了快捷的升级渠道,在 CDN – 域名管理 下,点击对应域名右侧的菜单,选择升级到全站加速。阿里云会检测配置是否符合要求,符合的话即可点击按钮进行部署和升级。证书、配置都会同步过去,升级过程不需要额外的操作。
升级完成之后我们需要进一步设置:
第一个是关闭动态加速(可选)。
DCDN 主打全站加速,如果只需要用到静态资源加速,那么默认开启的动态加速就可以关闭,避免额外费用。
![阿里云 DCDN 关闭动态加速](https://image.idcbuy.net/wp-content/uploads/2024/07/20240725163721708-798x99.png?x-oss-process=style/blog)
第二个是创建自定义防护策略。
DCDN 默认的 Web基础防护 策略是免费的,但它没有防 CC 攻击的作用,我们需要手动创建策略来拦截攻击。
关于升级 DCDN、开启 WAF、创建自定义策略、防 CC 配置,阿里云客服提供了相应的教程,可以参考教程操作:
- 将域名升级为dcdn,参考文档:https://help.aliyun.com/zh/cdn/user-guide/upgrade-from-alibaba-cloud-cdn-to-dcdn-for-a-domain-name?spm=a2c4g.11174283.0.i3
- 开通dcdn waf功能,参考文档:https://help.aliyun.com/zh/dcdn/user-guide/getting-started-with-waf?spm=a2c4g.11186623.0.0.3b651cf2CSwCfr
- 配置防cc攻击策略,参考文档:https://help.aliyun.com/zh/dcdn/user-guide/prevent-http-flood-attacks?spm=a2c4g.11186623.0.0.3a948be3T6e3v1
![DCDN 拦截攻击请求](https://image.idcbuy.net/wp-content/uploads/2024/07/20240725175447682-798x225.png?x-oss-process=style/blog)
第三个是开启IP黑名单。
自定义策略可以有效检测攻击行为,但是它需要一定的时间收集信息来进行判断,在命中规则前的请求依然会产生费用。
有没有办法尽可能在第一时间就拦截攻击呢?
有的。上文说到,CDN 服务商多吉云不断在其 公告 中更新攻击者的 IP 网段,我们可以直接添加到 IP 黑名单中。因为这些是经过验证的攻击者常用 IP 网段,因此添加到 IP 黑名单后,即使是第一次攻击请求,只要在黑名单中的 IP 段中就可以被拦截掉。
![DCDN 规则命中情况](https://image.idcbuy.net/wp-content/uploads/2024/07/20240725182855786.png?x-oss-process=style/blog)
正如前面说的,DCDN 的安全防护属于附加功能。WAF 按 SeCU 计费,被拦截后的请求是不会计费的,因此总体计算下来,成本比攻击耗费的流量和请求更便宜,所以建议升级到 DCDN 并使用 WAF 拦截攻击。
近期的 CDN 盗刷事件搞得小站长们怨声载道,逮着没钱没技术实力的草根欺负,真TM不是人啊。本来国内还有热情建站写博客的个人就很少,如此一来恐怕又有许多人要放弃了。
虽说平均到每一个被攻击的人头上的损失可能不算很大,但是这种无差别攻击、造成的损失总量不小的人,难道可以逍遥法外吗?希望这种人能够早早被绳之以法,以解心头之恨。
另外真的不能把人想得太善良,该做的防护措施都要仔细做好,不要给苍蝇留下能叮的缝,这是对自己负责。
最近怎么不更新了呀,博客满满的干货
工作家庭事物缠身,没有太多空闲呀……我们用的似乎是相同WP主题哈哈