CC 攻击防护
CC(Challenge Collapsar)攻击通常通过持续发送大量 HTTP 或 HTTPS 请求,占用应用服务器的连接数、计算资源或上游服务能力,使正常用户的请求变慢或失败。与单纯消耗网络带宽的流量型攻击不同,CC 攻击往往针对登录、搜索、动态查询等需要较多计算资源的接口,单个请求看似正常,因此需要结合请求特征和访问频率进行识别与处置。
OpenResty Edge 提供从请求控制到网络层封禁的多层防护能力。您可以通过页面规则限定规则的生效条件,按客户端 IP 地址、URI、Cookie 等关键字统计请求,并在达到阈值后延迟、验证、拒绝或封禁异常流量。
防护能力
请求层防护
请求层动作适合保护 HTTP 和 HTTPS 接口,也是应对 CC 攻击的主要手段。
- 限制请求速率:基于漏桶算法平滑请求速率,对突发请求先调节、再拒绝。
- 限制请求数:统计固定时间窗口内的请求数,超过阈值后执行拒绝动作。
- 延迟请求:为匹配规则的请求增加固定延迟,降低自动化客户端的请求效率。
- 封锁请求:持续观察请求速率,在连续多个时间窗口达到条件后封锁请求一段时间。
网络层封禁
网络层动作会在操作系统层面丢弃来源 IP 的数据包,影响范围大于单个 HTTP 请求。应先确认来源 IP 可信,避免封禁共享出口、代理或 NAT 后方的正常用户。
扩展流量保护
以下能力不属于典型的 HTTP CC 请求识别,但可以保护 TLS 握手资源或控制响应带宽。
- 限制 SSL 握手速率:按客户端 IP 地址限制 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 封禁。
配置流程
- 在 Edge Admin 中进入目标应用的 页面规则 页面。
- 新建规则,并根据 URI、客户端信息或请求特征设置生效条件。
- 在 动作 中选择相应的 CC 攻击防护动作。
- 设置关键字、阈值、时间窗口和拒绝动作等参数。
- 创建规则并发布应用配置。
- 使用受控测试流量验证正常请求、达到阈值和解除限制后的行为。
限制 SSL 握手速率需要在应用的 SSL 配置页面中启用,具体步骤请参见限制 SSL 握手速率。
配置 CC 攻击日志
启用防护规则后,建议同时启用 CC 攻击日志,记录规则触发情况并形成“检测、处置、观察、调优”的闭环。
在 Edge Admin 的 全局配置 > 日志 中开启 启用 CC 日志,并根据攻击流量规模配置日志限速、统计过期时间、共享内存、缓冲区和刷入时间间隔。日志限速可以避免高频攻击期间为每个请求写入日志,降低日志系统本身的开销。
配置发布后,可以在 应用 > CC 日志 中查看触发记录,并结合客户端标识、URI、处置结果和触发频率判断阈值是否合理。详细配置和测试步骤请参见 CC 攻击日志。
作用范围
限流和限速状态默认按应用隔离,不会跨应用共享。例如,同一客户端触发了应用 A 的请求速率限制后,仍可正常访问未触发限制的应用 B。这一点与直接在共享 NGINX 配置中使用全局限流区域的行为不同。
操作系统层的 IP 封禁会丢弃该来源 IP 的所有数据包,使用前应结合实际网络拓扑评估影响。
调优建议
- 先建立基线:根据监控和访问日志了解正常时段与业务高峰的请求速率,再设置初始阈值。
- 缩小规则范围:优先针对高成本 URI、异常地区或明确的自动化特征配置规则,减少对正常流量的影响。
- 选择稳定的关键字:共享出口较多时,不要只依赖客户端 IP 地址;可以结合 URI、Cookie 或其他可信标识细分请求。
- 逐步增强处置:先观察或使用延迟、验证码等方式,再根据攻击持续时间和误报情况升级为拒绝或封禁。
- 组合多层策略:使用请求速率限制吸收短时突发,使用封锁请求处置持续异常,最后对已确认的攻击来源进行网络层封禁。
- 结合 CC 日志调优:定期检查规则触发来源、受影响 URI 和处置结果,识别阈值过严、规则范围过宽或攻击特征变化。
- 验证恢复行为:除验证触发效果外,还要确认时间窗口结束或封锁过期后,正常请求能够恢复。