封锁客户端请求
页面规则的下拉列表中提供了多种分类整理好的动作。其中有一类是"CC 攻击防御动作",该类别中的动作用于控制请求。本文将介绍如何对请求进行拦截,即封锁请求:
封锁请求
的主要原理是设置一个时间窗口,观察该时间窗口内的请求处理速率是否超过阈值。当连续指定个数的时间窗口的请求处理速率都超过阈值时,在随后的指定时间内,系统将执行指定的封锁动作。
可通过以下几个参数进行控制:
- 关键字:用于对请求进行区分、分类。默认为终端的 IP 地址,可通过下拉菜单更改为 URI、URI 参数等,详见关键字说明。可选择一个或多个关键字。若选择 URI 参数或 Cookie,还需额外指定一个相应的 Argument 字段。
- 调节于:低于该速率的请求不会受到任何限制;大于该速率但小于
拒绝于
的请求将被延迟执行。 - 拒绝于:大于该速率的请求将执行
拒绝动作
。 调节于 和 拒绝于 这两个参数的默认单位都是请求每秒,也可选择请求每分钟。 如果将它们两个的值设置为相同,超过设置的请求将直接被拒绝,没有延迟来做缓冲。 - 时间窗口:观察时间窗口的大小。
- 封锁阈值:观察时间窗口连续出现的个数。
- 封锁时间:指定的拦截时间。超过该时间后,客户端将解封,封锁阈值 会重新开始计数。
- 拒绝动作:指定在达到
拒绝阈值
或封锁阈值
后执行的动作。详见拒绝动作说明
可选关键字包括:
- 客户端 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 代码,验证非机器人操作。
- 标记为拒绝:仅将请求标记为拒绝,继续执行后续规则。此动作于 24.9.1-7 中首次引入。