CC 攻击防护

CC(Challenge Collapsar)攻击通常通过持续发送大量 HTTP 或 HTTPS 请求,占用应用服务器的连接数、计算资源或上游服务能力,使正常用户的请求变慢或失败。

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 和处置结果,识别阈值过严、规则范围过宽或攻击特征变化。
  • 验证恢复行为:除验证触发效果外,还要确认时间窗口结束或封锁过期后,正常请求能够恢复。

限制请求速率

限制请求速率动作基于漏桶算法控制请求处理速度。低于调节阈值的请求正常处理;速率进入调节区间后,请求会被延迟;达到拒绝阈值后,系统执行指定的拒绝动作。 平滑突发流量,避免短时间内的大量请求压垮上游服务。 限制爬虫、接口轮询、批量查询等持续高频访问。 按客户端、URI 或业务标识分别保护高成本接口。

限制请求数

限制请求数动作统计每个关键字在固定时间窗口内的请求总数。请求数超过拒绝阈值后,OpenResty Edge 对该关键字的后续请求执行指定的拒绝动作;进入新的时间窗口后,计数器重新计数。 限制登录尝试、验证码发送或密码重置等敏感操作的调用次数。 对 API 配额或周期内允许的请求总数进行控制。

延迟请求

延迟请求动作为满足页面规则条件的请求增加固定等待时间,然后再继续处理请求。它不会自行判断请求速率,因此应通过页面规则条件精确限定需要延迟的流量。 降低暴力破解、批量探测或自动化采集的执行效率。 对可疑流量进行温和调节,避免直接拒绝可能造成的误伤。 在不立即暴露拦截策略的情况下,增加攻击者的时间成本。

封锁请求

封锁请求动作持续观察请求处理速率。当同一关键字的请求速率连续多个时间窗口达到封锁条件时,系统在指定时间内对该关键字执行拒绝动作。封锁时间结束后,系统解除封锁并重新开始观察。 客户端持续高频访问,短时请求速率限制不足以阻止其反复重试。 希望区分偶发突发与持续异常,只封锁连续触发阈值的请求分组。

限制响应数据速率

限制响应数据速率动作用于控制匹配请求的响应传输速度,避免单个下载、大文件响应或持续连接过度占用出口带宽。该动作控制的是返回给客户端的数据速率,不会限制客户端发送请求的频率,因此它属于 CC 防护的扩展流量保护能力。 限制下载接口或大文件响应的带宽占用。

限制 SSL 握手速率

限制 SSL 握手速率用于控制单个客户端 IP 地址发起 TLS 握手的频率,减少异常握手对网关 CPU 和连接资源的消耗。该功能属于 CC 防护的扩展连接保护能力。 同一客户端 IP 地址反复新建 TLS 连接。 异常客户端不复用连接,持续消耗 TLS 握手资源。

封禁来源 IP

封禁来源 IP 动作会在操作系统层面封禁当前请求的来源 IP 一段时间。在封禁期间,来自该 IP 的所有数据包都会被丢弃,而不只是拒绝当前应用的 HTTP 请求。 已通过页面规则明确识别出攻击来源,需要快速隔离。 同一来源 IP 持续攻击多个 URI 或消耗不同协议的连接资源。

封禁 IP 列表

封禁 IP 列表动作检查请求的来源 IP 是否存在于指定的 IP 列表中。命中列表后,系统在操作系统层面封禁该来源 IP;封禁期间,来自该 IP 的所有数据包都会被丢弃。 维护已确认的恶意 IP 黑名单。 批量封禁扫描器、攻击节点或其他可疑来源。 将经过审核的第三方威胁情报 IP 导入统一列表。

限制请求并发数

限制请求并发数 用于限制指定 Key 空间中的并发请求数:并发超过调整阈值时进行整形,超过拒绝阈值时拒绝请求。 打开目标 HTTP 应用的 页面规则。 新建或编辑规则,并添加 限制请求并发数。 添加一个或多个 Key 组,例如客户端 IP、URI、Cookie 或请求头。 设置 调节于 和 拒绝于。