华为云WAF CC攻击防护规则配置完全指南:从原理到实战
1. CC攻击:概念、原理与危害
CC(Challenge Collapsar)攻击是一种针对Web服务器或应用程序的应用层DDoS攻击手段。攻击者利用标准的GET、POST请求,大量访问那些涉及数据库操作或其他消耗系统资源的URI,不停地向目标服务器发送大量协议看似正常的数据包,最终造成服务器资源耗尽,无法响应正常用户的合法请求。
与传统的网络层DDoS攻击不同,CC攻击的请求报文在协议层面是完全合法的HTTP/HTTPS请求,这使得传统的防火墙和网络层防护设备难以有效识别和拦截。攻击者往往利用大量被控制的傀儡机(肉鸡)或者代理IP,以远超正常用户的请求频率持续对目标发起攻击。当客户发现网站处理速度下降、网络带宽占用过高时,很有可能已经遭受CC攻击,此时可查看Web服务器的访问日志或网络连接数量,如果访问日志或网络连接数量显著增加,则可确定已遭受CC攻击。
华为云WAF的CC攻击防护正是通过对满足限速条件的源端(IP、Cookie、Header、Referer)或目的端(策略、域名、URL)进行限速,来精准识别并有效缓解CC攻击。网站接入WAF后,CC攻击防护默认是不生效的。当网站突然遭遇大量异常流量攻击时,需要手动配置CC攻击防护规则来防御。
需要先登录华为云控制台,点击:华为云控制台,还没有账号,点击:注册并关联,已有账号点击:登录后关联
2. 配置CC防护规则的前置条件
在开始配置CC攻击防护规则之前,需要确保满足以下前置条件:
2.1 网站已接入WAF
这是配置任何WAF防护规则的基础前提。您需要先将防护网站成功接入到WAF中。华为云WAF支持三种接入模式:
- 云模式-CNAME接入:适用于华为云、非华为云或云下的Web业务。
- 云模式-ELB接入:适用于已使用华为云独享型ELB进行流量转发的网站。
- 独享模式:适用于对性能和隔离性有更高要求的大型企业网站。
不同接入方式对某些功能的支持有所不同。例如,全局计数功能仅云模式-CNAME接入支持,云模式-ELB接入不支持该功能。独享模式接入在部分区域可提交工单申请开通。
2.2 独享引擎版本要求
如果使用独享WAF模式,需要确保独享引擎已升级到最新版本。具体操作请参考华为云官方文档中关于升级独享引擎实例的指引。
2.3 账号权限准备
操作账号需要具备WAF的管理权限。华为云WAF提供了三种系统角色:
- WAF Administrator:Web应用防火墙服务的管理员权限,依赖Tenant Guest和Server Administrator角色。
- WAF FullAccess:Web应用防火墙服务的所有权限。
- WAF ReadOnlyAccess:Web应用防火墙的只读访问权限。
配置防护规则需要至少具备WAF Administrator或WAF FullAccess权限。
3. CC攻击防护规则配置完整流程
以下是配置CC攻击防护规则的完整操作步骤:
步骤一:登录Web应用防火墙控制台
登录华为云管理控制台,在控制台页面中选择“安全与合规” > “Web应用防火墙 WAF”,进入Web应用防火墙控制台。
步骤二:选择区域与项目
在控制台左上角单击区域选择图标,选择对应的区域或项目。如果已开通企业项目,可在左上角单击“按企业项目筛选”下拉框,选择所在的企业项目。
步骤三:进入防护策略配置页面
在左侧导航栏中,单击“防护策略”。在防护策略列表中,单击目标策略名称,进入目标策略的防护规则配置页面。您也可以在“网站设置”页面,单击目标域名“防护策略”列的“已开启防护项”后的数字,进入网站绑定的防护策略的规则配置页面。
步骤四:开启CC攻击防护
单击“CC攻击防护”配置框,确认已开启CC攻击防护。
步骤五:添加CC防护规则
在“CC攻击防护”规则配置列表左上方,单击“添加规则”。在“添加CC防护规则”面板中配置相关参数。
步骤六:验证规则生效
添加或修改防护规则后,规则生效需要等待几分钟。规则生效后,您可以在“防护事件”页面查询防护事件,查看防护效果。
4. CC防护规则核心参数详解
CC防护规则的配置涉及多个核心参数,理解这些参数的含义是精准配置防护规则的关键。
4.1 限速模式
限速模式决定了WAF如何区分和识别单个Web访问者:
- IP限速:根据源IP地址区分单个Web访问者。当WAF与访问者之间并无代理设备时,通过源IP来检测攻击行为较为精确。
- 用户限速:根据Cookie键值或者Header区分单个Web访问者。对于源IP无法精准获取的网站(例如存在header中未插入X-Forwarded-For字段的代理),建议使用该模式。
- 其他:根据Referer(自定义请求访问的来源)字段区分单个Web访问者。选择“其他”时,Referer对应的内容填写为包含域名的完整URL链接,仅支持前缀匹配和精准匹配的逻辑。
4.2 限速条件
限速条件用于配置防护规则要匹配的请求特征。请求一旦命中该特征,WAF则按照配置的规则处置该请求。至少需要配置一项条件,本条规则才能生效。配置多个条件时,需同时满足,本条规则才生效。单击“添加”增加新的条件,最多可添加30个条件。
条件字段包括:
- 路径(URL):匹配请求的URL路径。
- IP:匹配请求的源IP地址。
- Cookie:匹配请求中的Cookie字段,需要配置子字段。
- Header:匹配请求中的HTTP头部,需要配置子字段。
- Params:匹配请求中的参数,需要配置子字段。
子字段的长度不能超过2048字节,且只能由数字、字母、下划线和中划线组成。
4.3 限速频率与限速周期
限速频率是单个Web访问者在限速周期内可以正常访问的次数,如果超过该访问次数,WAF将根据配置的防护动作来处理。例如,限速频率设置为10次/60秒,防护动作设置为阻断,则表示60秒内只能有10次访问请求,一旦超过10次,WAF就直接阻断该Web访问者访问目标URL。
限速频率的取值范围为1~2147483647次,限速周期的取值范围为1~3600秒。
4.4 防护动作
当访问的请求频率超过限速频率时,WAF可执行以下防护动作:
- 阻断:直接拦截触发规则的请求,可设置阻断时间(lock_time),范围为0~65535秒。
- 人机验证:WAF允许触发规则的请求,但要求网站访问者完成验证码验证。
- 动态阻断:选择高级工作模式且防护动作为动态阻断时,除了配置限速频率外,还需要配置放行频率。
- 仅记录:仅记录触发规则的请求,不进行拦截。
4.5 放行频率(动态阻断专用)
放行频率是动态阻断模式下的特有参数。如果在一个限速周期内,访问的请求频率超过限速频率触发了拦截,那么在下一个限速周期内,拦截阈值将动态调整为放行频率。放行频率为0时,表示上个周期发生拦截后,下一个周期所有满足规则条件的请求都会被拦截。
放行频率和限速频率的限速周期一致,放行频率小于等于限速频率,且放行频率可为0。放行频率的取值范围为0~2147483647次。
4.6 全局计数
全局计数是云模式-CNAME接入支持的一个特殊功能。默认为每WAF节点单独计数,开启后本区域所有节点合并计数。配置时勾选“全局计数”即可。WAF针对单个Web访问者的访问次数的计数会分散到各个WAF节点上,开启全局计数后,所有节点的计数会聚合,使得限速更准确。
4.7 域名聚合统计
开启域名聚合统计后,泛域名对应的所有子域名的请求次数合并限速(不区分访问IP)。例如,配置的泛域名为*.a.com,会将所有子域名(b.a.com、c.a.com等)的请求一起聚合统计。
5. 标准模式与高级模式对比
CC防护规则支持两种工作模式:
- 标准模式(mode=0):只支持对域名的防护路径做限制。适用于简单的CC防护场景,仅基于URL路径进行频率限制。
- 高级模式(mode=1):支持对路径、IP、Cookie、Header、Params字段做限制。提供了更灵活的限速条件配置能力,适用于复杂的防护场景。目前华为云WAF控制台只支持创建高级CC规则防护模式。
高级模式下,conditions参数为必填,用于配置详细的限速条件。
6. 典型场景最佳实践配置
6.1 场景一:大流量高频CC攻击防护
在大规模CC攻击中,单台傀儡机发包的速率往往远超过正常用户的请求频率。针对这种场景,直接对请求源IP设置限速规则是最有效的办法。
配置建议:使用IP限速模式,配置一条CC规则,当一个IP在30秒内访问当前域名下任意路径的次数超过1000次,则封禁该IP的请求10个小时。该规则可以作为一般中小型站点的预防性配置。
参数配置示例:
- 限速模式:IP限速
- 限速条件:路径 - 前缀为 - /(匹配所有路径)
- 限速频率:1000次
- 限速周期:30秒
- 防护动作:阻断
- 阻断时间:36000秒(10小时)
6.2 场景二:登录接口防暴力破解与撞库
为了预防登录接口受到恶意高频撞库攻击的影响,可以针对登录路径配置更严格的限速规则。
配置建议:使用IP限速模式,配置路径为/login.php(使用前缀为逻辑符),限制单个IP在60秒内访问登录接口不超过10次。
参数配置示例:
- 限速模式:IP限速
- 限速条件:路径 - 前缀为 - /login.php
- 限速频率:10次
- 限速周期:60秒
- 防护动作:阻断
- 阻断时间:600秒(10分钟)
6.3 场景三:限制恶意抢购与下载
在电商抢购或资源下载场景中,恶意用户可能通过切换IP或终端进行高频请求。针对这种情况,基于业务Cookie或用户ID进行限速比基于IP限速更有效。
配置建议:使用用户限速模式,根据Cookie键值(如用户ID字段)区分单个Web访问者,基于路径配置CC限速。
参数配置示例:
- 限速模式:用户限速
- 用户标识:Cookie - user_id(业务中标识用户的Cookie字段名)
- 限速条件:路径 - 前缀为 - /order/create 或 /download
- 限速频率:根据业务正常峰值设置
- 限速周期:60秒
- 防护动作:人机验证或阻断
6.4 场景四:使用HWWAFSESID进行CC限速
WAF会在客户请求Cookie中插入HWWAFSESID(会话ID),该字段服务于WAF统计安全特性,CC防护规则中用于用户计数。可以通过该字段来配置CC限速。
配置建议:使用用户限速模式,用户标识选择Cookie - HWWAFSESID,基于路径配置限速。
7. 通过API管理CC防护规则
除了通过控制台配置CC防护规则外,华为云WAF还提供了丰富的API接口,支持通过编程方式管理CC防护规则,便于自动化运维和批量配置。
7.1 创建CC防护规则
创建CC防护规则的API接口为POST /v1/{project_id}/waf/policy/{policy_id}/cc。
请求参数说明:
- name:规则名称
- mode:防护模式,0为标准,1为高级
- conditions:限速条件列表,高级模式下必填
- action:防护动作
- tag_type:限速模式,ip/cookie/header/other/policy/domain/url
- tag_index:用户标识,限速模式为cookie或header时必填
- limit_num:限速频率,1~2147483647
- limit_period:限速周期,1~3600秒
- unlock_num:放行频率,动态阻断时必填,0~2147483647
- lock_time:阻断时间,0~65535秒
- region_aggregation:是否开启全局计数
- domain_aggregation:是否开启域名聚合统计
7.2 Python SDK调用示例
以下是一个使用Python SDK创建CC防护规则的完整示例代码:
import requests
import json
# 配置认证信息
project_id = "your_project_id"
policy_id = "your_policy_id"
iam_endpoint = "https://iam.cn-north-4.myhuaweicloud.com"
waf_endpoint = "https://waf.cn-north-4.myhuaweicloud.com"
username = "your_username"
password = "your_password"
domain_name = "your_domain_name"
# 获取IAM Token
def get_iam_token():
url = f"{iam_endpoint}/v3/auth/tokens"
payload = {
"auth": {
"identity": {
"methods": ["password"],
"password": {
"user": {
"name": username,
"password": password,
"domain": {"name": domain_name}
}
}
},
"scope": {
"project": {"name": "cn-north-4"}
}
}
}
response = requests.post(url, json=payload)
return response.headers.get("X-Subject-Token")
# 创建CC防护规则
def create_cc_rule(token):
url = f"{waf_endpoint}/v1/{project_id}/waf/policy/{policy_id}/cc"
headers = {
"X-Auth-Token": token,
"Content-Type": "application/json"
}
payload = {
"name": "api_cc_rule_ip_limit",
"mode": 1, # 高级模式
"tag_type": "ip", # IP限速
"limit_num": 100,
"limit_period": 60,
"lock_time": 600,
"region_aggregation": True,
"conditions": [
{
"category": "url",
"logic_operation": "prefix",
"contents": ["/api/"]
}
],
"action": {
"category": "block"
}
}
response = requests.post(url, headers=headers, json=payload)
return response.json()
# 主函数
if __name__ == "__main__":
token = get_iam_token()
result = create_cc_rule(token)
print(json.dumps(result, indent=2, ensure_ascii=False))
7.3 更新CC防护规则
更新CC防护规则的API接口为PUT /v1/{project_id}/waf/policy/{policy_id}/cc/{rule_id}。通过该接口可以修改规则的限速频率、防护动作等参数。
7.4 查询CC防护规则
查询CC防护规则列表的API接口为GET /v1/{project_id}/waf/policy/{policy_id}/cc。查询单个规则的API接口为GET /v1/{project_id}/waf/policy/{policy_id}/cc/{rule_id}。
7.5 批量添加CC防护规则
华为云WAF还支持一次将CC攻击防护规则添加到多个策略中,API接口为POST /v1/{project_id}/waf/rule/cc。
8. 配置注意事项与最佳实践建议
8.1 规则生效时间
添加或修改防护规则后,规则生效需要等待几分钟。在此期间,建议不要频繁修改规则配置,以免造成配置混乱。
8.2 引用表的使用
当逻辑关系选择“包含任意一个”、“不包含任意一个”、“等于任意一个”、“不等于任意一个”、“前缀为任意一个”、“前缀不为任意一个”、“后缀为任意一个”或者“后缀不为任意一个”时,需要选择引用表。引用表功能仅云模式专业版、企业版支持,云模式标准版不支持。
8.3 与CDN同时使用的注意事项
网站同时接入WAF和CDN时,如果防护动作配置为人机验证,建议防护规则的路径配置为动态页面。因为CDN会缓存静态页面,人机验证页面如果被缓存可能导致验证功能失效。
8.4 Method字段的限制
条件字段配置为Method时,内容不支持配置为TRACE和CONNECT,否则会导致解析报错。
8.5 Referer配置注意事项
选择Referer限速模式时,内容里不能含有连续的多条斜线的配置,如///admin,WAF引擎会将///转为/。
8.6 限速频率的设置原则
限速频率的设置需要结合业务实际情况。设置过低可能导致正常用户被误拦截,设置过高则无法有效防御CC攻击。建议先通过日志分析了解业务正常的请求频率分布,再据此设置合理的限速阈值。
9. 防护效果验证方法
配置完CC防护规则后,建议通过以下方法验证防护效果:
- 清理浏览器缓存,持续在限速周期内访问目标路径达到限速频率次数。
- 在超出限速频率的下一次访问时,正常情况下应返回自定义的拦截页面。
- 等待阻断时间结束后,刷新目标页面,页面应恢复正常访问。
- 返回Web应用防火墙控制界面,在左侧导航栏单击“防护事件”,查看域名防护详情和拦截记录。
10. 常见问题与解答
问题一:CC攻击防护规则配置后为什么不生效?
答:首先检查是否已开启CC攻击防护开关。其次,添加或修改防护规则后需要等待几分钟才能生效。另外,确认限速条件是否正确匹配了目标请求的特征。如果使用独享模式,还需确认独享引擎已升级到最新版本。
问题二:限速频率和放行频率有什么区别?
答:限速频率是单个Web访问者在限速周期内可以正常访问的次数上限。放行频率是动态阻断模式下的特有参数,当上一个周期触发拦截后,下一个周期的拦截阈值动态调整为放行频率。放行频率小于等于限速频率,且可为0。
问题三:IP限速和用户限速应该如何选择?
答:当WAF与访问者之间并无代理设备时,通过源IP来检测攻击行为较为精确,建议使用IP限速。对于源IP无法精准获取的网站(例如存在代理、CDN等情况),建议使用用户限速(基于Cookie或Header)。
问题四:CC防护规则可以配置多个条件吗?
答:可以。每条CC防护规则最多可添加30个条件。配置多个条件时,需要同时满足所有条件,规则才生效。
问题五:如何防止CC防护规则误拦截正常用户?
答:建议从以下几个方面优化:合理设置限速频率,基于业务正常流量分析确定阈值;对于重要业务接口,可选用人机验证而非直接阻断;配置全局白名单规则,将可信IP或用户加入白名单;开启全局计数功能,避免因WAF节点分散计数导致限速不准确。
问题六:CC攻击防护与DDoS高防有什么区别?
答:WAF的CC攻击防护主要针对应用层(七层)的HTTP/HTTPS Flood攻击。DDoS高防服务则主要针对四层及以下的流量攻击,如ACK Flood、UDP Flood等。两者可以结合使用,实现全方位的DDoS防护。


