限制请求速率
限制请求速率动作基于漏桶算法控制请求处理速度。低于调节阈值的请求正常处理;速率进入调节区间后,请求会被延迟;达到拒绝阈值后,系统执行指定的拒绝动作。 平滑突发流量,避免短时间内的大量请求压垮上游服务。 限制爬虫、接口轮询、批量查询等持续高频访问。 按客户端、URI 或业务标识分别保护高成本接口。
CC(Challenge Collapsar)攻击通常通过持续发送大量 HTTP 或 HTTPS 请求,占用应用服务器的连接数、计算资源或上游服务能力,使正常用户的请求变慢或失败。与单纯消耗网络带宽的流量型攻击不同,CC 攻击往往针对登录、搜索、动态查询等需要较多计算资源的接口,单个请求看似正常,因此需要结合请求特征和访问频率进行识别与处置。
OpenResty Edge 提供从请求控制到网络层封禁的多层防护能力。您可以通过页面规则限定规则的生效条件,按客户端 IP 地址、URI、Cookie 等关键字统计请求,并在达到阈值后延迟、验证、拒绝或封禁异常流量。
请求层动作适合保护 HTTP 和 HTTPS 接口,也是应对 CC 攻击的主要手段。
网络层动作会在操作系统层面丢弃来源 IP 的数据包,影响范围大于单个 HTTP 请求。应先确认来源 IP 可信,避免封禁共享出口、代理或 NAT 后方的正常用户。
以下能力不属于典型的 HTTP CC 请求识别,但可以保护 TLS 握手资源或控制响应带宽。
| 功能 | 控制对象 | 触发方式 | 处置方式 | 典型场景 |
|---|---|---|---|---|
| 限制请求速率 | HTTP/HTTPS 请求 | 请求速率达到调节或拒绝阈值 | 延迟或执行拒绝动作 | 平滑突发流量、保护高频接口 |
| 限制请求数 | HTTP/HTTPS 请求 | 固定时间窗口内的请求数超过阈值 | 执行拒绝动作 | 限制登录、验证码、API 调用次数 |
| 延迟请求 | 匹配页面规则的请求 | 请求满足规则条件 | 延迟指定时间后继续处理 | 降低自动化尝试和低速攻击效率 |
| 封锁请求 | HTTP/HTTPS 请求 | 连续多个时间窗口达到速率条件 | 封锁指定时间 | 处置持续高频访问的客户端 |
| 封禁来源 IP | 来源 IP 的所有数据包 | 请求满足规则条件 | 操作系统层丢包 | 快速隔离已确认的攻击来源 |
| 封禁 IP 列表 | 列表中的来源 IP | 来源 IP 命中预定义列表 | 操作系统层丢包 | 批量接入黑名单或威胁情报 |
| 限制 SSL 握手速率 | TLS 握手 | 客户端 IP 的握手速率达到阈值 | 调节或拒绝 | 缓解异常 TLS 握手消耗 |
| 限制响应数据速率 | HTTP/HTTPS 响应 | 请求满足规则条件 | 限制响应传输速率 | 控制下载或大响应的带宽占用 |
页面规则的条件决定哪些请求进入防护策略。建议优先保护登录、搜索、下单、动态 API 等资源消耗较高或容易被自动化调用的 URI,而不是一开始就对整个应用使用相同阈值。
关键字决定请求如何分组和计数。常见选项包括客户端 IP 地址、URI、URI 参数、Cookie、指定请求头,以及 X-Forwarded-For 中的第一个或最后一个 IP 地址。组合多个关键字可以形成更细粒度的统计维度,例如按“客户端 IP 地址 + URI”分别限制每个客户端对不同接口的访问。
使用 X-Forwarded-For 作为关键字前,应确保请求只会经过可信代理,并由可信代理覆盖或清理客户端传入的同名请求头。否则,攻击者可能伪造该请求头绕过限流或导致误封。
速率类动作根据单位时间内的请求速率进行调节或拒绝;计数类动作统计固定时间窗口内的请求总数。阈值应基于正常业务流量的峰值、接口成本和可接受的突发量设置,并在观察实际效果后逐步调整。
达到拒绝条件后,可以关闭连接、返回错误页、要求完成验证码或 JavaScript 挑战、标记请求为拒绝,或者在支持的动作中封禁 IP 地址。对可能包含正常用户的流量,优先考虑验证码等可恢复的验证方式;对已确认的恶意来源,再使用连接关闭或 IP 封禁。
限制 SSL 握手速率需要在应用的 SSL 配置页面中启用,具体步骤请参见限制 SSL 握手速率。
启用防护规则后,建议同时启用 CC 攻击日志,记录规则触发情况并形成“检测、处置、观察、调优”的闭环。
在 Edge Admin 的 全局配置 > 日志 中开启 启用 CC 日志,并根据攻击流量规模配置日志限速、统计过期时间、共享内存、缓冲区和刷入时间间隔。日志限速可以避免高频攻击期间为每个请求写入日志,降低日志系统本身的开销。
配置发布后,可以在 应用 > CC 日志 中查看触发记录,并结合客户端标识、URI、处置结果和触发频率判断阈值是否合理。详细配置和测试步骤请参见 CC 攻击日志。
限流和限速状态默认按应用隔离,不会跨应用共享。例如,同一客户端触发了应用 A 的请求速率限制后,仍可正常访问未触发限制的应用 B。这一点与直接在共享 NGINX 配置中使用全局限流区域的行为不同。
操作系统层的 IP 封禁会丢弃该来源 IP 的所有数据包,使用前应结合实际网络拓扑评估影响。
限制请求速率动作基于漏桶算法控制请求处理速度。低于调节阈值的请求正常处理;速率进入调节区间后,请求会被延迟;达到拒绝阈值后,系统执行指定的拒绝动作。 平滑突发流量,避免短时间内的大量请求压垮上游服务。 限制爬虫、接口轮询、批量查询等持续高频访问。 按客户端、URI 或业务标识分别保护高成本接口。
限制请求数动作统计每个关键字在固定时间窗口内的请求总数。请求数超过拒绝阈值后,OpenResty Edge 对该关键字的后续请求执行指定的拒绝动作;进入新的时间窗口后,计数器重新计数。 限制登录尝试、验证码发送或密码重置等敏感操作的调用次数。 对 API 配额或周期内允许的请求总数进行控制。
延迟请求动作为满足页面规则条件的请求增加固定等待时间,然后再继续处理请求。它不会自行判断请求速率,因此应通过页面规则条件精确限定需要延迟的流量。 降低暴力破解、批量探测或自动化采集的执行效率。 对可疑流量进行温和调节,避免直接拒绝可能造成的误伤。 在不立即暴露拦截策略的情况下,增加攻击者的时间成本。
封锁请求动作持续观察请求处理速率。当同一关键字的请求速率连续多个时间窗口达到封锁条件时,系统在指定时间内对该关键字执行拒绝动作。封锁时间结束后,系统解除封锁并重新开始观察。 客户端持续高频访问,短时请求速率限制不足以阻止其反复重试。 希望区分偶发突发与持续异常,只封锁连续触发阈值的请求分组。
限制响应数据速率动作用于控制匹配请求的响应传输速度,避免单个下载、大文件响应或持续连接过度占用出口带宽。该动作控制的是返回给客户端的数据速率,不会限制客户端发送请求的频率,因此它属于 CC 防护的扩展流量保护能力。 限制下载接口或大文件响应的带宽占用。
限制 SSL 握手速率用于控制单个客户端 IP 地址发起 TLS 握手的频率,减少异常握手对网关 CPU 和连接资源的消耗。该功能属于 CC 防护的扩展连接保护能力。 同一客户端 IP 地址反复新建 TLS 连接。 异常客户端不复用连接,持续消耗 TLS 握手资源。
封禁来源 IP 动作会在操作系统层面封禁当前请求的来源 IP 一段时间。在封禁期间,来自该 IP 的所有数据包都会被丢弃,而不只是拒绝当前应用的 HTTP 请求。 已通过页面规则明确识别出攻击来源,需要快速隔离。 同一来源 IP 持续攻击多个 URI 或消耗不同协议的连接资源。
封禁 IP 列表动作检查请求的来源 IP 是否存在于指定的 IP 列表中。命中列表后,系统在操作系统层面封禁该来源 IP;封禁期间,来自该 IP 的所有数据包都会被丢弃。 维护已确认的恶意 IP 黑名单。 批量封禁扫描器、攻击节点或其他可疑来源。 将经过审核的第三方威胁情报 IP 导入统一列表。
限制请求并发数 用于限制指定 Key 空间中的并发请求数:并发超过调整阈值时进行整形,超过拒绝阈值时拒绝请求。 打开目标 HTTP 应用的 页面规则。 新建或编辑规则,并添加 限制请求并发数。 添加一个或多个 Key 组,例如客户端 IP、URI、Cookie 或请求头。 设置 调节于 和 拒绝于。