阿里云 ESA 自定义 WAF 规则拦截广东海量 IP 攻击,及流量特征分析

更新日期: 2025-11-21 阅读次数: 10 字数: 1126 分类: CDN

昨天早上四点半,服务器又被刷爆了,CPU 持续百分百。从 Nginx 日志看,毫无规律。早上被一堆报警短信吵醒,眼都睁不开图片就开始设置防火墙规则。我投降了,不得已上了阿里云 ESA(边缘安全加速 Edge Security Acceleration)。因为网站在国内,用 Cloudflare 影响国内用户体验,选择阿里云 ESA 也是无奈的选择。可以看到不到 30 万的请求,只有 1 万多的有效请求,这里面还有部分是我测试时放开了规则进来了部分垃圾流量。

阿里云 ESA 自定义 WAF 规则拦截广东海量 IP 攻击

靠临时的 ESA WAF (即 Web 应用防火墙)规则扛住了。虽然不太严谨,但是目前还能让我喘口气 。我只能通过 WAF 里新建自定义规则,判定是广东 IP 且请求路径是 / ,且没有 referer 就直接拦截。因为用阿里云的一个好处是,至少他们的 IP 库是相对准确的。而我自己从 Nginx 日志里拿到的 IP 去网上查,其实查出来的 IP 归属地不一定准确。我也通过阿里云 ESA 看出了一些攻击流量特征:

  • 特征1:都是广东 IP
  • 特征2:都是电信 IP
  • 特征3:请求方式及路径统一。都是先 http 请求,然后被我 301 到 https。都是访问网站域名的首页,例如 http://www.a.com 也不访问其他链接,但是会加载 js css 等静态文件。

这些刷流量的请求能绕过 ESA 的 JS 挑战。JS挑战:表示WAF向客户端返回一段正常浏览器可以自动执行的JavaScript代码。如果客户端正常执行了JavaScript代码,则WAF在一段时间(默认30分钟)内放行该客户端的所有请求(不需要重复验证),否则拦截请求。不能理解的是阿里云 ESA 的自定义规则只能设置 JS 挑战,拦截和观察。而不能设置滑块验证。因为 JS 挑战明显拦不住,为何不能提供一个滑块验证的功能呢?在 ESA 官方微信群里问了一下,客服让我提个工单,等工程师来回答图片。

我还有一个疑问:不知道是否有更好的自动识别的方式,因为理论上广东这些 IP 在阿里云的海量请求下应该能分析出特征。还是说我只能购买更高级的 ESA 套餐才能自动识别出来。

哎,昨天一冲动买了一年的基础版套餐,不过倒是很便宜 50 多,就是每个月只有 50G 的流量,这个流量明显是不够用的(平均下来一天不到2G)。但是升级套餐,就非常不划算。

我感觉这个海量广东 IP 恶意刷流量的问题,要是不能有效的防住。大部分小网站都得关站。目前用 ESA 的自定义规则也不靠谱,对方换个随机链接加伪造 referer 就能轻松绕过。然后我还得给 ESA 的流量付费,估计得被刷破产。参考前文:网站七牛 CDN 流量被刷,差点破产。不忙的时候还是提个工单问问专家吧。网上搜索 ESA 的技术文章,大部分都是软文,没几个认真讨论处理方案的。

关于作者 🌱

我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式