Cloudflare Docs
Support
Support
Visit Support on GitHub
Set theme to dark (⇧+D)

配置 Cloudflare Rate Limiting

配置 Cloudflare Rate Limiting,以防止拒绝服务攻击、暴力登录以及其他滥用行为。

​​ 本文内容


​​ 概述

Cloudflare Rate Limiting 可自动识别针对特定 URL 或整个域的过高请求速率并加以缓解。请求速率是针对单个 Cloudflare 数据中心局部计算的。Rate Limiting 最常见的用途是 DDoS 保护、 暴力攻击保护,以及限制对论坛搜索、API 调用或涉及源服务器上数据库密集型操作的资源的访问。

一旦有个别 IPv4 地址或 IPv6 / 64 IP 范围超出规则阈值,就会通过 HTTP 429 响应阻止对源 Web 服务器的后续请求,该响应包括一个 Retry-After 标头,用来指示客户端何时可以恢复发送请求。


​​ 分析

分析 > 安全性下,查看速率限制分析。限速率限制分析使用实线来表示与模拟请求匹配的流量,并用虚线来描述实际被阻止的请求。只有 Enterprise 客户才能通过 Cloudflare Logs 查看由速率限制规则生成的日志。

对于阻止的请求,Cloudflare 会返回 HTTP 429 错误。有关每个位置已阻止请求的详细信息,Enterprise 客户可在分析仪表板(Analytics > 流量)中的状态代码下查看。


​​ 各计划的速率限制额度

允许的速率限制规则数量取决于域的计划:

计划规则数操作操作持续时间请求期间
免费1阻止1 分钟或 1 小时10 秒钟或 1 分钟
Pro10阻止、旧版 CAPTCHA、JS 质询、托管质询或记录1 分钟或 1 小时10 秒钟或 1 分钟
Business15阻止、旧版 CAPTCHA、JS 质询、托管质询或记录1 分钟、1 小时或 24 小时10 秒钟、1 分钟或 10 分钟
企业100阻止、旧版 CAPTCHA、JS 质询、托管质询或记录可以输入 10 秒到 86400 秒(24 小时)范围内的任何时间长度可以输入 10 秒到 3600 秒(1 小时)范围内的任何值。

Cloudflare Rate Limiting 支持多种级别的配置控制,具体取决于域的 Cloudflare 计划。下表列出了您可以根据自己的计划执行的操作:

| #

|

任务

|

适用于

1

|

配置基本速率限制规则

|

所有计划

| |

2

|

配置高级条件

|

Business 和 Enterprise 计划

| |

3

|

配置高级响应

|

Business 和 Enterprise 计划

| |

4

|

配置绕过选项

|

优势和特点

|


​​ 速率限制规则的组成部分

速率限制规则包含三个不同的组成部分。单击下面的组件可展详细信息:

传入请求基于以下几项进行匹配:

​​ 请求路径

示例:

请求路径不区分大小写。模式无法匹配查询字符串()或锚点()后的内容。星号(*)会匹配任何字符序列,包括空序列。示例:

  • *.example.com/*匹配 example.com 的任何子域上的任何路径
  • *example.com/example.html 匹配 example.com 上的 example.html 或 example.com 的任何子域
  • * 匹配您站点上的任何页面

example.com/path 的请求与 example.com/path/ 的并不相同。此规则的唯一例外是主页,example.com 匹配 example.com/

​​ 请求方案

HTTPHTTPS。如果未指定,则两者都匹配,规则将列出 _ALL_

​​ 请求方法

POSTGET。如果未指定,则所有方法都匹配,规则将列出 _ALL_

​​ (可选)源响应代码

例如,只有 HTTP 401 或 403 是从源 Web 服务器返回的,才会匹配速率限制规则。触发的规则如果匹配响应代码条件,将阻止来自该客户端的后续请求,且无论源响应代码是什么。

规则可以匹配来自同一客户端的所有请求的数量和时间段:

​​ 请求数量

最少指定两个请求。若要阻止单个请求,使路径不可用便可;例如,通过将源 Web 服务器配置为返回 403。

​​ 请求期间

一旦客户的请求在指定的持续时间内超过阈值,就会触发规则。

 

规则缓解包括:

​​ 缓解操作

速率限制操作取决于域的计划,如上方各计划的速率限制额度所述:

  • 阻止 - 超过阈值时,Cloudflare 发出 HTTP 429 错误。
  • 旧版 CAPTCHA - 访问者必须通过 CAPTCHA 质询。如果通过,则 Cloudflare 允许该请求。
  • JS 质询 - 访问者必须通过 Cloudflare Javascript 质询。如果通过,则 Cloudflare 允许该请求。
  • 记录 - 请求记录到 Cloudflare Logs 中。这有助于在应用至生产环境前测试规则。

​​ 禁令期限

如果超时设置为短于阈值,会导致 API 自动将超时增加到等于阈值。

如果没有指定 自定义错误页面Rate Limiting 访问者会收到默认的 HTML 页面。此外,Business 和 Enterprise 客户还可在规则本身中指定响应,具体参见下方的_任务 3:配置高级响应_。


​​ 识别速率限制阈值

要确定 Cloudflare Rate Limiting 的一般阈值,可将 24 小时未缓存网站请求数除以同一 24 小时期间的唯一访问者数。然后,除以一次访问的估计平均分钟数。最后,再乘以 4(或更大),以确定您的网站大致的每分钟阈值。值大于 4 没有关系,因为大多数攻击比典型的流量速率高出一个数量级。

要确定特定 URL 的 URL 速率限制,请使用针对该 URL 的 24 小时未缓存请求数和唯一访问者数。根据用户报告和您自己的监控来调整阈值。


​​ 任务 1:配置基本速率限制规则

单击可展开有关创建两种常见 Cloudflare Rate Limiting 规则的详细信息。

Rate Limiting 提供一个称为保护您的登录的一键式工具,它可以创建一条规则,在 5 分钟内发送超过 5 个 POST 请求时将客户端阻止 15 分钟。这足以阻止大多数的暴力登录。

  1. 登录您的 Cloudflare 帐户。
  2. 选择要保护的域。
  3. 前往安全性 > WAF > 速率限制规则
  4. 速率限制下,单击保护您的登录
  5. 在显示的保护您的登录对话框中,输入规则名称输入您的登录 URL
  6. 单击保存
  7. 规则名称将显示在您的速率限制规则列表中。

1. 登录 Cloudflare 仪表板。

2. 选择适当的域。

3. 转至安全性 > WAF > 速率限制规则

4. 单击创建速率限制规则。这会打开一个对话框,供您输入新规则的详细信息。

创建速率限制规则弹出对话框,其中包含了规则配置示例。如果某些 IP 地址在一小时内每分钟发送超过 150 个请求,该规则将阻止来自这些 IP 地址的请求。

5. 输入一个描述性强的规则名称

6. 对于如果流量匹配 URL,从下拉列表中选择一种 HTTP 方案以及一个 URL。

7. 在来自相同 IP 地址超过中,输入一个大于 1 的整数,以代表一个采样周期中的请求数。

8. 对于每一类请求,选择采样区间(计算请求数量的期间)。Enterprise 计划中的域可以手动输入 10 秒到 3600 秒(1 小时)范围内的任意时长。

9. 对于下拉菜单,选择一个您的计划可用的操作。请参阅上方_速率限制规则组成部分_的_规则缓解_小节。

10.如果您选择了_阻止_或_记录_,那么在匹配来自该访问者的流量中,请选择一旦触发了阈值时要应用该选项多久时间。Enterprise 计划中的域可以手动输入 10 秒到 86400 秒(24 小时)范围内的任意值。

11. 要激活您的新规则,请单击保存并部署

新规则将显示在速率限制规则列表中。

通常,在设置较低的阈值时:

  1. 保留现有的规则,并添加一条使用这个较低阈值的新规则。
  2. 新规则部署到位后,等待旧规则的操作持续时间过去,然后再删除旧规则。

设置较高的阈值时(可能会阻止合法客户端),请提高现有规的阈值。


​​ 任务 2:配置高级条件(仅 Business 和 Enterprise 计划)

高级条件选项配置哪些 HTTP方法、标头响应和源站响应代码与您的速率限制匹配。

要为新规则或现有规则配置高级条件,请执行以下步骤:

1. 展开高级条件

为速率限制规则配置“高级条件”时可用的字段。

2. 从方法下列菜单中选择一个值。默认值是 ANY,其匹配所有 HTTP 方法。

3. 按照 HTTP 响应标头筛选。点击添加标头响应字段,以包含您的源 Web 服务器返回的标头。

默认情况下会显示 CF-Cache-Status 标头,以便 Cloudflare 提供缓存的资源,而不是限制这些资源的速率。要想同时对缓存资源进行速率限制,请删除此标头,具体方法是点击 X 按钮,或启用也对缓存资产应用速率限制

如果 HTTP 响应标头下有多个标头,则会应用 AND 布尔值逻辑。要排除标头,请使用_不等于_选项。各个标头都不区分大小写。

4. 在源站响应代码下,输入要匹配的各个 HTTP 响应代码的数值。用逗号分隔两个或多个 HTTP 代码(例如:401, 403)。

5.(可选)根据您的计划,配置额外的速率限制功能。

6. 点击保存并部署


​​ 任务 3:配置高级响应(仅 Business 和 Enterprise 计划)

高级响应选项可用来配置 Cloudflare 在超过规则阈值时返回的信息格式。如果您希望返回静态纯文本或 JSON 内容,请使用高级响应

要配置纯文本或 JSON 响应:

1. 展开高级响应

为速率限制规则配置“高级响应”时可用的字段。

2. 选择除默认值以外的响应类型格式:自定义 JSON 或_自定义 TEXT_。

3. 输入您希望返回的纯文本或 JSON 响应。最大响应大小为 32 kB。

4.(可选)根据您的计划,配置额外的速率限制功能。

5. 点击保存并部署

​​ 使用自定义 HTML 页面或重定向

如果您希望显示一个自定义的 HTML 页面,请在仪表板中为 HTTP 429 错误(“请求次数过多”)配置一个自定义页面。当您在响应类型中选择“默认 Cloudflare 速率限制页面”(该字段的默认值)时,Cloudflare 将显示此页面。

您可以使用这种方法将限速的客户重定向到一个特定的 URL:

1. 在您的服务器上创建一个 HTML 页面,该页面将重定向到您希望显示的页面的最终 URL。在页面内容中包含一个 元刷新 Tag 标记,如下例所示:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Custom RL page</title>
<meta http-equiv="refresh" content="0; url='https://yourzonename/block'" />
</head>
<body> </body>
</html>

记下您所创建的页面的公共 URL。

2. 在 Cloudflare 仪表板中,导航到 帐户首页 > 配置 > 自定义页面

3. 在 429 错误下方单击自定义页面

4. 输入您在服务器上创建的页面的 URL(该页面包含元刷新 Tag 标记),然后单击发布

如果您希望返回纯文本或 JSON 内容,但响应大于 32 kB,请遵循同样的方法。在本例中,重定向 URL 将是您希望显示的纯文本或 JSON 资源的 URL。

注意:

  • 您的速率限制规则必须与您在自定义 HTML 页面中包含的、与 429 错误相关的重定向 URL 不一致。
  • 为了防止拒绝服务攻击,重定向页面应当仅包含 Cloudflare 缓存的资源。

​​ 任务 4:配置绕过选项(仅 Enterprise 计划)

绕过选项会创建一个允许列表或例外;这样,即使匹配了速率限制,也不会将任何操作应用于一组特定的 URL。通过以下步骤来配置绕过

1. 展开绕过

2. 在对以下 URL 绕过规则中,输入要从速率限制规则能够排除的 URL。一行输入一个 URL。保存规则时会自动删除 URL 中指定的 HTTP 或 HTTPS,规则会同时应用于 HTTP 和 HTTPS。

为速率限制规则配置两个要绕过的 URL(每行一个)。

3.(可选)根据您的计划,配置额外的速率限制功能。

4. 点击保存并部署


​​ 规则执行顺序

使用案例 1:如果请求与以下两个规则都匹配,

  • 规则 1:与 test.example.com 匹配
  • 规则 2:与 *.example.com* 匹配

  • 规则 1:与 *.example.com* 匹配
  • 规则 2:与 test.example.com 匹配

则始终先触发规则 2,因为规则 2 是后创建的。

使用案例 2:删除域名末尾的星号 (*) 后,规则执行将取决于哪个规则是最后创建的

  • 规则 1:与 test.example.com 匹配
  • 规则 2:与 *.example.com 匹配

如果请求与两个规则都匹配,则先触发上面的规则 2

  • 规则 1:与 *.example.com 匹配
  • 规则 2:与 test.example.com 匹配

如果请求与两个规则都匹配,则先触发上面的规则 2


​​ 相关资源