内容提要
文章介绍如何用 Cloudflare Worker 突破免费版仅 5 条安全规则的限制:Worker 位于 WAF 之后、缓存之前,检测请求路径,命中 .env、database.sql、备份压缩包等敏感文件即返回 403,并调用 API 将来源 IP 写入 IP Access Rules 长期拉黑,删除 Worker 后仍生效。使用前需准备 Zone ID 和 API 令牌,配置白名单、DRY_RUN 等变量并设置路由,文中还提供批量清除拉黑记录的 PowerShell 脚本。
延伸解读
Worker 与 WAF 的协作关系
文章指出 Worker 运行在 WAF 之后、缓存之前,这意味着请求会先经过 Cloudflare 自带的安全规则,再进入 Worker 进行二次判断。这种顺序让 Worker 能补充免费版仅 5 条规则的限制,但也会轻微增加请求耗时。作者因此没有引入数据库,只做简单路径匹配,以控制性能开销。
长期拉黑与免费额度限制
命中规则后,Worker 会调用 API 将来源 IP 写入 IP Access Rules,该黑名单不依赖 Worker,删除 Worker 后仍继续拦截。免费版 IP Access Rules 最多可拉黑 5 万条 IP,Worker 每天 10 万次请求且账号下所有 Worker 共享。超过请求数后 Worker 自动绕过,不影响网站访问,但意味着当天后续请求不再经过自定义检测。
安全配置中的防误伤设计
代码默认 DRY_RUN 为 true,只记录检测结果而不实际拉黑,便于先验证规则。同时支持 ALLOWLIST_IPS 白名单,并会检查 IP Access Rules 中是否已存在手动 whitelist 规则,若存在则跳过自动拉黑。这些设计降低了误封正常用户或覆盖人工白名单的风险,但需要用户主动将 DRY_RUN 设为 false 才会生效。
规则匹配的边界与注意事项
检测列表支持文件名任意目录匹配、含斜杠的精确路径匹配以及星号通配符,且不区分大小写。作者提醒,像 *.zip 或 *.sql 这类宽泛条目可能匹配到合法下载,建议从具体文件名和路径开始,再按需调整。此外,路径会进行最多两次解码并规范化斜杠,以应对编码探测,但规则本身是字面文本而非正则表达式。
Q&A
Cloudflare免费版安全规则只有5条,有什么办法可以扩展?
可以使用Cloudflare Worker来扩展安全规则。Worker运行在WAF之后、缓存之前,可以自定义检测逻辑,命中敏感文件路径时返回403并自动拉黑IP,从而突破免费版5条规则的限制。
如何用Cloudflare Worker自动拉黑扫描敏感文件的IP?
在Worker中配置敏感文件列表(如.env、database.sql、备份压缩包等),当请求路径匹配时返回403,并通过Cloudflare API将来源IP写入IP Access Rules黑名单,实现长期拉黑。需要准备Zone ID和API令牌,并设置相关变量。
Worker自动拉黑的IP在删除Worker后还会被拦截吗?
会。因为拉黑操作是通过API将IP写入IP Access Rules黑名单,该黑名单不依赖于Worker,所以即使后期删除Worker,黑名单中的IP仍会被继续拦截。
配置Worker自动拉黑需要准备哪些东西?
需要准备:1)Zone ID(在域名管理首页右下角获取);2)API令牌(创建时赋予防火墙服务编辑和读取权限,令牌只显示一次需保存)。然后在Worker中添加变量:ALLOWLIST_IPS(白名单IP)、CF_API_TOKEN、CF_ZONE_ID、DRY_RUN(测试时设为true,正式设为false)。
Worker免费版每天请求数有限制吗?超过会怎样?
Worker免费版每天有10万次请求限制,UTC 0点重置,账号下所有Worker共享。如果请求数超过10万次,会自动绕过Worker,不影响网站正常访问。建议在路由设置中开启“失败时自动打开”,避免请求耗尽后页面报错。
如何批量清除Worker自动拉黑的IP记录?
可以使用文章提供的PowerShell脚本,运行后输入Zone ID和API令牌,脚本会列出所有自动拉黑的IP及原因,输入“DELETE AUTO-BAN RULES”确认后即可批量删除这些拉黑规则。