封锁客户端请求

页面规则的下拉列表中提供了多种分类整理好的动作。其中有一类是"CC 攻击防御动作",该类别中的动作用于控制请求。本文将介绍如何对请求进行拦截,即封锁请求

封锁请求的主要原理是设置一个时间窗口,观察该时间窗口内的请求处理速率是否超过阈值。当连续指定个数的时间窗口的请求处理速率都超过阈值时,在随后的指定时间内,系统将执行指定的封锁动作。

可通过以下几个参数进行控制:

  1. 关键字:用于对请求进行区分、分类。默认为终端的 IP 地址,可通过下拉菜单更改为 URI、URI 参数等,详见关键字说明。可选择一个或多个关键字。若选择 URI 参数或 Cookie,还需额外指定一个相应的 Argument 字段。
  2. 调节于:低于该速率的请求不会受到任何限制;大于该速率但小于 拒绝于 的请求将被延迟执行。
  3. 拒绝于:大于该速率的请求将执行 拒绝动作调节于拒绝于 这两个参数的默认单位都是请求每秒,也可选择请求每分钟。 如果将它们两个的值设置为相同,超过设置的请求将直接被拒绝,没有延迟来做缓冲。
  4. 时间窗口:观察时间窗口的大小。
  5. 封锁阈值:观察时间窗口连续出现的个数。
  6. 封锁时间:指定的拦截时间。超过该时间后,客户端将解封,封锁阈值 会重新开始计数。
  7. 拒绝动作:指定在达到拒绝阈值封锁阈值后执行的动作。详见拒绝动作说明

可选关键字包括:

  • 客户端 IP 地址,如:1.1.1.1
  • 请求的 URI,例如:/openresty
  • URI 查询参数,如 /openresty?arg1=val1 中的 arg1
  • 请求 Cookie,比如 cookie: c1=v1 中的键 c1
  • X-Forwarded-For 请求头中的第一个 IP 地址,如 X-Forwarded-For: 1.1.1.1, 1.1.1.2 中的 1.1.1.1
  • X-Forwarded-For 请求头中的最后一个 IP 地址,如 X-Forwarded-For: 1.1.1.1, 1.1.1.2 中的 1.1.1.2
  • 特定的 HTTP 请求头,例如 Host
  • 加密 Cookie:将根据 OpenResty Edge 生成的加密 Cookie 对请求进行控制。当客户请求没有携带加密 Cookie 时,会回退到不含加密 Cookie 的情况。因此,加密 Cookie 必须和其它关键字一起使用

在达到封锁条件后,系统可执行以下预设动作,默认为 返回错误页

  • 关闭请求连接:立即终止与客户端的连接,不再响应请求。
  • 返回错误页,默认为状态码 503:限速生效时向用户展示带有 503 状态码的错误页面,暗示服务器暂时无法处理请求。
  • 完成 hCaptcha 验证:要求用户通过 hCaptcha 挑战,以区分真人和机器行为。
  • 完成 OpenResty Edge Captcha 验证:使用 OpenResty Edge 的验证码系统验证用户身份。
  • 重定向验证:将请求重定向至验证页面,验证通过后方可继续访问。
  • JavaScript 挑战:要求用户浏览器执行 JavaScript 代码,验证非机器人操作。