自定义规则

当需精确防护特定攻击(如恶意调用、恶意请求、高频扫描)时,可使用自定义规则,通过灵活的匹配条件和规则动作,构建个性化防护策略。

关键概念

  • 自定义规则:Web核心防护中的防护模块之一。启用此模块前必须创建防护模板,系统支持创建多个防护模板。

  • 防护模板:防护模板是防护规则的集合,用于定义具体的规则内容和作用范围。其由以下三部分组成:模板类型、防护规则、生效对象。

    • 模板类型:防护模板创建时需指定类型,且创建后不可更改。模板类型分为以下两种:

      模板类型

      说明

      适用场景

      默认防护模板

      • 模板创建时,默认对所有防护对象和对象组生效,后续新增的对象也自动生效。

      • 支持手动将特定对象排除(设置为“未生效”)。

      • 在自定义规则模块下,仅能创建一个默认防护模板。

      部署通用的、需全局执行的防护规则。

      自定义防护模板

      必须手动指定其生效的防护对象或对象组。

      针对特定业务(如登录、支付接口)部署精细化的防护规则。

    • 防护规则:定义具体的检测逻辑和响应措施。一个防护模板可包含多条防护规则,每条规则由以下三部分组成:

      • 匹配条件:定义检测的请求特征(如请求路径、客户端 IP 地址等)。

      • 防护类型:支持两种检测维度,分别为访问控制频率控制

      • 规则动作:定义命中规则后的处置措施,规则动作的优先级从高到低依次为:拦截、严格滑块、滑块、JS 验证、观察。

        说明

        当一个请求同时命中同一防护模块中的多条规则,且这些规则的规则动作相同时,则最终匹配到的规则是随机生效的。

    • 生效对象:指定防护模板的应用目标。通过生效对象设置,将防护规则应用到指定的防护对象或防护对象组。一个防护对象或对象组可以关联多个防护模板。

      • 防护对象:每个接入 WAF 的域名或云产品实例,系统会为其自动创建一个防护对象。

      • 防护对象组:可将多个防护对象加入一个防护对象组,以便集中管理。

操作步骤

说明

执行以下步骤前,请确保已存在防护对象(已将Web业务接入WAF),若尚未将业务接入,请参见接入概述

登录Web应用防火墙3.0控制台。在顶部菜单栏,选择WAF实例的资源组和地域(中国内地非中国内地),在左侧导航栏,选择防护配置 > Web 核心防护

步骤一:配置防护模板类型

Web 核心防护页面下方自定义规则区域,单击新建模板。在新建模板 - 自定义规则面板,完成以下配置。

  • 模板名称:为该模板设置一个名称。

  • 是否设置为默认模板:自定义规则模块仅能设置一个默认模板,且仅能在新建模板时设置。

    • :无需设置生效对象,模板创建时,默认对所有防护对象和对象组生效,后续新增的对象也自动生效。支持手动将特定对象排除(设置为“未生效”)。

    • :需要设置生效对象,手动指定其生效的防护对象或对象组。

步骤二:在防护模板中添加防护规则

规则配置区域,单击新建规则,完成以下配置。

  • 规则名称:为该规则设置一个名称。

  • 匹配条件:设置该规则要匹配的请求特征。通过单击新增条件添加一个条件。每个条件由匹配字段逻辑符匹配内容组成。配置示例如下:

    说明

    若规则包含多个条件,则请求必须满足所有条件(逻辑与关系),才能命中该规则。关于匹配字段和逻辑符的详细说明,请参见匹配条件说明

    匹配字段

    逻辑符

    匹配内容

    说明

    URI Path

    包含

    /login.php

    当请求的路径包含/login.php时,则请求命中该规则。

    IP

    属于

    192.1.XX.XX

    当客户端IP192.1.XX.XX时,则请求命中该规则。

  • 防护类型:支持访问控制频率控制两种类型。

    • 访问控制:适用于对特定类型的请求执行精确管控的场景。

    • 频率控制:适用于基于访问频率的场景(如防刷、防暴力破解)。仅包年包月企业版、旗舰版和按量付费版支持此功能。

    访问控制

    配置访问控制规则,对符合特定条件的单次请求执行指定操作。

    频率控制

    配置频率控制规则,限制客户端的过度访问。

    • 频率检测条件:当单个统计对象在指定的统计时长(秒)内命中规则的次数超过设定的阈值(次)时,触发黑名单处置。

      配置项

      说明

      统计对象

      选择请求频率的统计对象。可选项:

      • IP:统计同一个IP发起请求的频率。

      • 自定义header:基于自定义请求头(如 Referer)的值进行分组,统计在指定时间段内,每组相同请求头值所对应的请求频率。

      • 自定义参数:统计URL中包含指定参数的请求频率。例如,若参数为user_id,WAF将统计具有相同user_id值的请求频率。

      • 自定义cookie:统计在指定时间段内,HTTP请求中包含特定Cookie的频率。例如,当自定义Cookie名称为 User 时,将统计在该时间段内每个 User 值的出现次数。

      • Session:WAF通过在响应中设置名为 acw_tcCookie来建立会话标识,并基于该Cookie的值统计客户端请求频率。

      • 账号:统计同一个账号发起请求的频率。需要在防护对象页面设置账号提取配置后,才能配置此项,详细信息,请参见账号提取配置

      统计时长(秒)

      设置统计周期。单位:秒。

      阈值(次)

      设置在统计时长(秒)内,允许统计对象命中匹配条件的最大次数。

    • 响应码检测条件:当响应码的响应数量比例(%)超过设置的阈值时,触发黑名单处置。启用响应码检测后,统计对象需同时满足频率检测条件和响应码特征条件,才会触发黑名单处置。

      配置项

      说明

      响应码

      设置需要统计的响应码。

      数量

      设置在统计时长内,允许指定的响应码在请求响应中出现的最大次数。

      比例(%)

      设置在统计时长内,允许指定的响应码在请求响应中的最大占比。

    • 黑名单处置条件:将命中上述检测条件的统计对象加入黑名单,在黑名单超时时间内,对来自该对象黑名单生效范围内的请求执行规则动作中定义的处置。

      配置项

      说明

      黑名单生效范围

      设置黑名单处置的生效范围。可选值:

      • 仅作用于当前规则的匹配条件:表示只处置满足当前规则匹配条件的请求。

      • 作用于整个防护对象:表示对该统计对象(如IP)发起的,访问当前防护对象的所有请求执行处置动作。

      黑名单超时时间

      设置黑名单处置的生效时长。单位:秒。取值范围:60~86400。

  • 规则动作:选择当请求命中该规则时,要执行的防护动作。

    配置项

    说明

    JS验证

    WAF向客户端返回一段JavaScript验证代码,标准浏览器将自动执行该代码。若客户端正常执行完成,则WAF在一段时间(默认30分钟)内放行该客户端的所有请求,否则拦截请求。

    拦截

    拦截命中规则的请求,并向发起请求的客户端返回拦截响应页面。

    说明

    WAF默认使用统一的拦截响应页面,也可以通过自定义响应功能,自定义拦截响应页面。

    观察

    不拦截命中规则的请求,仅通过日志记录请求命中的情况。在试运行规则时,可以先通过观察模式分析WAF日志,以确认未产生误拦截,再将其调整为其他规则动作。

    滑块

    WAF向客户端返回滑动验证页面。若客户端成功完成滑动验证,则WAF在一段时间(默认30分钟)内放行该客户端的所有请求,否则拦截请求。

    严格滑块

    WAF向客户端返回滑动验证页面。若客户端成功完成滑动验证,则放行该请求;否则拦截请求。在此模式下,客户端每次命中该规则的请求均需进行滑动验证。

    说明
    • 仅按量付费实例以及包年包月企业版和旗舰版实例支持滑块验证。

    • JS验证滑块验证仅适用于同步请求。对于XMLHttpRequest、Fetch方法等异步请求,必须注入Web SDK,否则无法正常运行。具体操作,请参见Bot管理JS校验和滑块验证功能。

    • 启用JS验证滑块后,客户端通过验证时,WAF将在响应头中通过Set-Cookie 设置名为acw_sc__v2(JS验证)或 acw_sc__v3(滑块验证)的 Cookie。客户端在后续请求中会在 Cookie 头中携带该标识。

  • 高级设置(可选):仅包年包月企业版、旗舰版和按量付费版支持如下高级功能。

    配置项

    说明

    规则灰度

    配置规则针对不同维度的对象的生效比例。

    开启规则灰度后,还需要设置维度灰度比例维度包括:IP自定义Header自定义参数自定义CookieSession

    说明

    规则灰度根据配置的维度生效,而非对请求按比例随机生效规则。例如,当维度IP灰度比例10%时,WAF将选择约10%的IP地址;被选中的IP地址,其所有请求均应用该规则,而非对所有请求按10%的比例随机应用。

    生效模式

    • 永久生效(默认):防护模板开启时,规则永久生效。

    • 按时间段生效:防护规则仅在指定的一段时间内生效。

    • 按周期生效:防护规则仅在指定的时间周期内生效。

步骤三:设置防护模板生效对象

生效对象区域,选择要应用于该模板的防护对象和防护对象组

模板的生效方式取决于在步骤一的配置:

  • 设置为默认防护模板:无需设置生效对象,模板创建时,默认对所有防护对象和对象组生效,后续新增的对象也自动生效。支持手动将特定对象排除(设置为“未生效”)。

  • 未设为默认防护模板:需要手动设置生效的防护对象和防护对象组。

说明

模板创建时与创建完成后,均支持手动调整防护对象或防护对象组生效状态。

防护规则配置示例

重要

以下配置示例仅供参考。在生产环境部署前,您必须根据实际业务流量和攻击特征进行调整。直接复制并应用以下示例可能导致正常业务中断或防护无效。

限制管理后台仅允许指定IP访问

拦截所有对 /wp-admin 路径的访问请求,仅允许来自管理员 IP 地址192.1.XX.XX 的请求通过。

  • 匹配条件

    • 匹配字段IP逻辑符不属于匹配内容为管理员的白名单IP192.1.XX.XX

    • 匹配字段URI逻辑符包含匹配内容为不希望被访问的网页路径/wp-admin

  • 防护类型访问控制

  • 规则动作拦截

屏蔽恶意爬虫和扫描器访问

拦截User-Agent(UA)字段中包含botHTTP请求。

说明

通过分析WAF日志,可识别异常流量的UA特征。部分恶意流量的UA字段包含botnmapsqlmap等特征字符串。

  • 匹配条件匹配字段User-Agent逻辑符包含匹配内容UA特征bot

  • 防护类型访问控制

  • 规则动作拦截

为网站页面启用人机验证

对除API接口以外的页面进行JS验证,此处以所有API接口URI均包含/api 字符串为例。

说明

针对静态页面,可以设置JS验证或滑块验证规则,以确保请求来源为可执行 JavaScript 的标准浏览器。此类验证仅适用于同步请求,不适用于XMLHttpRequest、Fetch方法等异步请求。

  • 匹配条件匹配字段URI逻辑符不包含匹配内容/api

  • 防护类型访问控制

  • 规则动作JS验证滑块

API接口限流

对除example.com/api/pay接口外的所有接口启用频率控制,此处以所有API接口URI均包含/api 字符串为例。

  • 匹配条件

    • 匹配字段URI逻辑符不等于匹配内容/api/pay

    • 匹配字段URI逻辑符包含匹配内容/api

  • 防护类型频率控制

  • 统计对象IP

  • 统计时长(秒):10。

  • 阈值(次):5。

  • 黑名单生效范围仅作用于当前规则的匹配条件

  • 黑名单超时时间:1800。

  • 规则动作拦截

应用于生产环境

为避免影响正常业务,请勿在生产环境直接创建并启用拦截动作的防护规则。建议遵循以下流程进行部署。

  1. 分析请求特征:使用WAF安全报表日志,识别正常业务请求与恶意攻击的特征(如 IP、User-Agent、Header、URI 等)。如需计划配置频率控制规则,还需确定正常业务的请求频率基线。

  2. 配置白名单:在创建自定义规则模板前,建议创建白名单规则,将可信IP加入白名单,防止可信请求被新规则误拦截。

  3. 灰度测试:自定义规则创建完成后,可以使用以下三种方式,在部署到生产环境前进行观察测试。

    • 将规则应用于非生产环境进行测试。

    • 规则动作设置为观察

    • 高级设置中开启规则灰度

  4. 分析测试结果:运行一段时间后,观察安全报表与日志,查看命中规则的请求是否存在误报。

  5. 应用至生产环境:确认误报率在可接受范围内后,将规则动作调整为目标动作,并应用于生产环境。

  6. 持续监控与优化:持续关注安全报表与日志,根据业务变化和实际防护效果,动态调整和优化规则。

相关操作

管理防护模板

新建的防护模板默认开启,可以在防护模板列表执行如下操作:

  • 查看模板关联的防护对象/组的数量。

  • 通过模板开关,开启或关闭模板。

  • 为该模板新建规则

  • 编辑删除复制防护模板。

  • 单击防护模板名称左侧的展开图标 图标,查看该防护模板包含的规则信息。

管理防护规则

新建的规则默认开启。可以在规则列表执行如下操作:

  • 查看规则ID规则条件等信息。

  • 通过状态开关,开启或关闭规则。

  • 编辑删除规则。

配额与限制

  • 仅按量付费实例、包年包月企业版和旗舰版实例支持滑块验证、频率控制高级设置功能。

  • 单个防护规则最多可添加5匹配条件

常见问题

为什么配置的规则不生效?

若配置的规则未按预期生效,请按以下顺序检查:

  • 模板开关:确认防护模板以及规则状态均为开启状态。image

  • 生效对象:确认防护模板的生效对象为已生效image

  • 规则配置:确认防护规则的配置,重点关注匹配条件的正确性,确保请求能够匹配。

  • 其他规则:确认是否配置了其他防护规则或防护模块,例如白名单规则会提前放行请求。

云产品接入方式下,多个域名解析指向了一个云产品实例,如何配置频率控制?

频率控制规则按照防护对象维度来限制同一统计对象的请求频率。若一个云产品实例包含多个域名的流量,则统计访问频率时将对所有域名的访问量进行汇总统计。若只需限制对某个域名的访问频率,可以选择以下两种方式之一进行配置:

  • 将域名添加为WAF的防护对象,并为该域名对象应用频率控制规则。更多信息,请参见配置防护对象和防护对象组

  • 在频率控制规则的匹配条件中,通过Host字段定义要限制访问频率的域名。

配置自定义规则匹配字段Body Parameter后为何不生效?

可能原因是填写的匹配内容长度过短,使用Body Parameter字段时请确保匹配内容长度>=5个字符,否则流量无法被检测。