CC 攻击防护

CC(Challenge Collapsar)攻击通常通过持续发送大量 HTTP 或 HTTPS 请求,占用应用服务器的连接数、计算资源或上游服务能力,使正常用户的请求变慢或失败。与单纯消耗网络带宽的流量型攻击不同,CC 攻击往往针对登录、搜索、动态查询等需要较多计算资源的接口,单个请求看似正常,因此需要结合请求特征和访问频率进行识别与处置。

OpenResty Edge 提供从请求控制到网络层封禁的多层防护能力。您可以通过页面规则限定规则的生效条件,按客户端 IP 地址、URI、Cookie 等关键字统计请求,并在达到阈值后延迟、验证、拒绝或封禁异常流量。

防护能力

请求层防护

请求层动作适合保护 HTTP 和 HTTPS 接口,也是应对 CC 攻击的主要手段。

  • 限制请求速率:基于漏桶算法平滑请求速率,对突发请求先调节、再拒绝。
  • 限制请求数:统计固定时间窗口内的请求数,超过阈值后执行拒绝动作。
  • 延迟请求:为匹配规则的请求增加固定延迟,降低自动化客户端的请求效率。
  • 封锁请求:持续观察请求速率,在连续多个时间窗口达到条件后封锁请求一段时间。

网络层封禁

网络层动作会在操作系统层面丢弃来源 IP 的数据包,影响范围大于单个 HTTP 请求。应先确认来源 IP 可信,避免封禁共享出口、代理或 NAT 后方的正常用户。

  • 封禁来源 IP:将当前请求的来源 IP 封禁一段时间。
  • 封禁 IP 列表:请求来源 IP 命中预定义列表时,在操作系统层面进行封禁。

扩展流量保护

以下能力不属于典型的 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 封禁。

配置流程

  1. 在 Edge Admin 中进入目标应用的 页面规则 页面。
  2. 新建规则,并根据 URI、客户端信息或请求特征设置生效条件。
  3. 动作 中选择相应的 CC 攻击防护动作。
  4. 设置关键字、阈值、时间窗口和拒绝动作等参数。
  5. 创建规则并发布应用配置。
  6. 使用受控测试流量验证正常请求、达到阈值和解除限制后的行为。

限制 SSL 握手速率需要在应用的 SSL 配置页面中启用,具体步骤请参见限制 SSL 握手速率

配置 CC 攻击日志

启用防护规则后,建议同时启用 CC 攻击日志,记录规则触发情况并形成“检测、处置、观察、调优”的闭环。

在 Edge Admin 的 全局配置 > 日志 中开启 启用 CC 日志,并根据攻击流量规模配置日志限速、统计过期时间、共享内存、缓冲区和刷入时间间隔。日志限速可以避免高频攻击期间为每个请求写入日志,降低日志系统本身的开销。

配置发布后,可以在 应用 > CC 日志 中查看触发记录,并结合客户端标识、URI、处置结果和触发频率判断阈值是否合理。详细配置和测试步骤请参见 CC 攻击日志

作用范围

限流和限速状态默认按应用隔离,不会跨应用共享。例如,同一客户端触发了应用 A 的请求速率限制后,仍可正常访问未触发限制的应用 B。这一点与直接在共享 NGINX 配置中使用全局限流区域的行为不同。

操作系统层的 IP 封禁会丢弃该来源 IP 的所有数据包,使用前应结合实际网络拓扑评估影响。

调优建议

  • 先建立基线:根据监控和访问日志了解正常时段与业务高峰的请求速率,再设置初始阈值。
  • 缩小规则范围:优先针对高成本 URI、异常地区或明确的自动化特征配置规则,减少对正常流量的影响。
  • 选择稳定的关键字:共享出口较多时,不要只依赖客户端 IP 地址;可以结合 URI、Cookie 或其他可信标识细分请求。
  • 逐步增强处置:先观察或使用延迟、验证码等方式,再根据攻击持续时间和误报情况升级为拒绝或封禁。
  • 组合多层策略:使用请求速率限制吸收短时突发,使用封锁请求处置持续异常,最后对已确认的攻击来源进行网络层封禁。
  • 结合 CC 日志调优:定期检查规则触发来源、受影响 URI 和处置结果,识别阈值过严、规则范围过宽或攻击特征变化。
  • 验证恢复行为:除验证触发效果外,还要确认时间窗口结束或封锁过期后,正常请求能够恢复。