Cloudflare WAF规则的免费替代--域名安全规则

  • 1233 字
  • 0 条评论

说明

Cloudflare的WAF提供了强大的Web应用防火墙功能,本文中所使用的域名安全规则仅能够替代部分功能。本文撰写的主要目的是目前能够检索到的关于Cloudflare的几乎所有流量管理需求的解决方法都是采用Cloudflare的WAF(御三家的模型也忽略了域名安全规则的存在),缺少对域名安全规则功能的有效 白嫖 挖掘。

前置准备与功能局限

由于本方法依赖于域名安全规则,因此需要有一个已经托管在Cloudflare的域名,使用Worker/Page部署后提供的默认域名如 your-subdomain.pages/workers.dev是无法使用的。

此外,域名安全规则的功能相较于Cloudflare的WAF存在一定的局限性,例如恶意行为检测、敏感数据保护以及邮件地址混淆等功能无法替代。但对于IP访问规则、速率限制、API保护等基础防护需求,域名安全规则仍然能够提供有效的支持。

功能位置

域名->概览->点击自己的域名->安全性->安全规则
在这里可以看到自定义规则,速率限制规则以及托管规则。这里主要介绍前两个规则的使用方法。

功能使用

自定义规则

如果对流量的管理需求仅仅是基于IP、请求头等等的常量信息进行控制,那么自定义规则就能够满足大部分需求。在自定义规则中,你几乎可以选择所有你能够在请求头中获取到的字段进行条件设置,从而实现对流量的精细化管理。以下介绍一下本站所维护的一个Huggingface镜像站的自定义规则配置示例。

自定义规则示例

由于此前网站允许所有非浏览器请求的访问,因此大量的爬虫请求极大的消耗的Cloudflare Worker的免费额度,导致服务无法稳定运行。因此,在这个配置中对非脚本的请求进行了限制,仅允许访问首页、robots.txt等必要资源。其他请求将在到达Worker前被拦截,从而有效减少了对Worker免费额度的消耗。

速率限制规则

速率限制规则用于限制单位时间内的请求次数,从而防止恶意请求对服务造成过大压力。以下是一个简单的速率限制规则配置示例:

速率限制规则示例

默认的速率限制配置页面是图形化的菜单栏,但该菜单栏相比于上面的自定义规则配置,缺少了非常多的功能,因此强烈建议改用编辑表达式的方式进行配置,具体修改方式如下。

改用编辑表达式

切换后即可得到和上面一样的输入框,但此时你可以直接编辑表达式,从而实现更为灵活的速率限制配置。

由于Cloudflare对免费账户仅允许配置一条速率限制规则,因此需要对速率限制规则尽可能的合并。如果某些接口彼此之间是完全独立的,则可以通过在表达式中使用OR操作符将它们合并到同一条规则中。如上图所示,将多个域名的速率限制规则合并为一条,此外还可以根据表达式的规则将速率限制扩展到特定的接口或请求头等。

说明文档

更多关于域名安全规则的使用说明可以参考Cloudflare官方文档:Rule expressions · Cloudflare Ruleset Engine docs。

常见问题

Cloudflare免费版没有WAF怎么设置IP访问限制和速率限制?

可以使用域名安全规则里的自定义规则和速率限制规则来替代部分WAF功能。前提是域名已托管在Cloudflare,不能用pages.dev或workers.dev默认域名。进入域名概览,点击自己的域名,选择安全性下的安全规则即可配置。自定义规则能基于IP、请求头等字段做访问控制,速率限制规则可限制单位时间请求次数。

Cloudflare自定义规则怎么拦截爬虫保护Worker免费额度?

在自定义规则里可以基于请求头字段设置条件。比如只允许访问首页、robots.txt等必要资源,对非脚本请求进行限制,其他请求会在到达Worker前被拦截,从而减少爬虫对Worker免费额度的消耗。文章里的Huggingface镜像站就是这么配置的。

Cloudflare免费账户只有一条速率限制规则怎么合并多个域名?

免费账户确实只能配置一条速率限制规则,所以需要把多个独立接口或域名合并到同一条规则里。可以在速率限制规则中改用编辑表达式方式,用OR操作符把多个条件连接起来,比如将多个域名的速率限制规则合并为一条,还可以扩展到特定接口或请求头。

Cloudflare域名安全规则在哪里设置?需要什么条件?

位置在Cloudflare域名概览里,点击自己的域名,进入安全性,再点击安全规则,就能看到自定义规则、速率限制规则和托管规则。前提是域名必须已经托管在Cloudflare,使用Worker或Page部署后提供的默认域名如your-subdomain.pages/workers.dev无法使用。

分享
分享提示信息