Introducing Advanced Rate Limiting

依然仅仅依赖于 IP 防火墙?是时候做出改变了。

虽然 IP 地址依然可能是使网络正常运行的核心技术之一,但其在安全方面的价值早已不复存在。IP 极少是静态的;如今,移动运营商使用电信级网络地址转换(CGNAT)在数以千计的设备或用户之间共享同一 IP 地址。机器人会使用来自不同 IP 的低请求量发动分布式攻击,以避免被限流。此外,很多国家/地区将 IP 地址视为个人数据,如果能为目前依赖于 IP 地址来运行的安全元素找到替代品,那么将会是隐私保护的一大进步。受这一趋势影响的一个产品就是速率限制。

速率限制旨在阻止请求导致服务器负荷过重。它依赖于规则。速率限制规则由一个过滤器(通常是一个路径、例如/login)和一段时间内每个用户允许的最大请求数来定义。当这个阈值被超过时,同一用户在一段时间内的后续请求将触发一个操作(通常是阻止)。传统的限流解决方案将相同 IP 的请求集中在一起,因为它们遵循“来自相同 IP 的请求来自相同用户”的逻辑。然而,我们听到客户反映,使用基于 IP 的速率限制来保护流量效果欠佳,对验证 API 而言尤其如此。

我们隆重推出高级速率限制,这是限流技术的一个飞跃。这种技术允许根据 HTTP 请求的几乎任何特征来计数请求,无论 IP 地址是什么。速率限制是针对暴力破解、内容爬取或针对性 DDoS 攻击的优秀防御手段。这些攻击的后果包括敏感数据泄露、帐户接管或后端资源耗尽。对于每个请求都会在服务器源上触发昂贵计算的 API 而言,控制请求的速率尤为重要。

限流技术的变革性创新

高级速率限制现已成为 Web 应用程序防火墙(WAF)的一部分。它与 Firewall Rules 集成,允许基于特征而非 IP 来计数请求。

通过高级速率限制限制,您能:

  1. 使用所有 HTTP 请求特征来定义规则过滤器,例如 URI、方法、标头、cookie 和正文字段。使用 Bot Management 计划的客户也能利用机器人分数动态字段。您也能使用 HTTP 请求的两个特征来触发速率限制:状态码和响应标头。
  2. 选择基于如下特征来计数请求:IP、国家、标头、cookie,AS 编号(ASN)、请求参数值或 JSON 正文字段值。您可以单独或组合使用这些字段,将匹配相关值的请求归类在一起。它也能将阈值设为源服务器能处理的最大复杂程度,而非您希望允许的最大请求数。
  3. 将它应用于您的所有流量。作为 Enterprise 用户,速率限制可以针对您全部流量的一部分购买。通过高级速率限制,您可以在您所有的流量上使用该产品,无需担忧上限。最后,高级速率限制对整个 Cloudflare 网络可用,包括在中国。

旨在与您的应用程序集成

在本节中,我们讨论使用高级速率限制来保护 web 或 API 流量的几个常见用例。您可以组合和匹配所有这些配置,以便更好地满足安全性和应用程序的需求。所有这些用例都可以通过仪表板、API 和 Terraform 实现。

用例 —— 使用更精细的规则保护 web 流量

灵活的过滤器。 您现在能够使用 HTTP 的所有字段来编写速率限制规则。例如,您可以为具有特定标头(例如用户代理)来触发一条规则,或限制共享同一 ASN 的机器人流量。

With Advanced Rate Limiting you get access to all HTTP request fields available in the rule builder.

独立的缓解表达式。 您现在能将缓解表达式和计数表达式分开。如此一来,您可以定义在阈值达到时阻止用户访问网站的哪一个部分,以及请求(和响应)需要满足什么条件来增加计数。例如,您可以计数对您 /login 端点发出的请求,然后阻止同一用户对整个站点的访问。当您要在计数表达式中包含响应字段时,这是特别有用的,例如仅计数返回特定响应码的请求,但阻止更大部分的流量。

With Advanced Rate Limiting you can count on a path and block across your whole website.

使用动态字段。 客户现在能将速率限制和检测已知漏洞的规则(例如 WAF 机器学习分数) 结合起来使用。例如,您可以在标记为 SQLi 的多个连续请求到达您的站点后阻止访问。另一个用例是,仅对可能来自机器人的请求触发某一条规则(通过使用规则过滤器中的机器人分数),或在多个使用被盗凭据的登录尝试发生后(link)触发某一条规则。您也可以将 JA3 指纹用作计数依据,从而利用我们的机器人机器学习算法来归类来自同一指纹的机器人。

With Advanced Rate Limiting you can use dynamic fields in the rule filter.

用例 —— 将速率限制与应用程序集成来保护 API

基于会话 ID 来计数请求。 API 流量往往经过验证,会话可以通过 cookie、标头(例如 x-api-key)或查询值来跟踪。高级速率限制允许您定义包含该 ID 的请求 ,并跟踪请求相对同一会话的数量,而无论 IP 地址是什么。对于抓取敏感数据(如产品价格或航班乘客数据)的分布式机器人攻击而言,这是一个有效的防御手段。

You can group requests based on cookie, header, query and other characteristics.

根据请求正文内容触发规则。 规则过滤器允许访问原始正文和 JSON 解析后的正文。您可以使用使用规则过滤器中的函数 lookup_json_field() ,计数正文 JSON 字段具备特定值的请求。这对于 GraphQL API 可能非常有用,其中不同的调用(变体)可通过相同的端点执行,但在请求正文中指定不同的操作。

You can trigger rules based on request body content.

基于复杂性的速率限制(即将推出测试版)。 一些 API 调用的服务比其他要复杂得多,因此计算请求的数量并不能真正反映实际的服务成本。GraphQL API 就是一个例子:每个调用的复杂性可能会相差巨大,取决于服务器需要进行多少处理才能服务该请求。您的源服务器可以估计每个请求的复杂性并随响应一起返回,速率限制可根据源服务器提供的复杂性估计累加计数。然后您可以在规则中设定一个复杂性阈值,在超过时会触发一个操作,例如阻止。

提供方式

高级速率限制现已通过新的 Advanced 计划向 Enterprise 客户正式提供。如下为每个计划包含内容的更多详情。请联系您的 Cloudflare 帐户团队或 Customer Success 经理(CSM)以了解详情。如果您的是 Pro 或 Biz 客户,您将无法使用高级速率限制,但我们计划也将为 Pro 和 Biz 计划提供一些优势。

Enterprise Core Enterprise Advanced
过滤器中的可用请求字段 选择的标准字段:
URL
Method
标头
Source IP
所有标准字段
正文字段
帐户接管字段
动态字段(包括机器人分数*)
计数过滤器中的可用响应字段 响应代码
响应标头
响应代码
响应标头
计数特征 IP IP
使用 NAT 的 IP 感知
ASN
国家/地区
标头
Cookie
查询
JA3*
复杂性
最大取样期间 10 分钟 1 小时

*需要 Bot Management 计划

速率限制后续展望

未来几个月内,我们将收集客户反馈,以决定应在高级速率限制中包括的更多功能。我们已经有一些想法正在进行探索,包括自动分析您的流量,并为您的规则推荐阈值。