配置Bot管理高级自定义规则

接入Bot管理后,您可以自定义访问控制规则和频率控制规则,防御符合规则的请求,高级自定义规则增加了更丰富的匹配条件,如Client ID、JA3/JA4指纹、Web/App SDK采集信息等。同时支持基于条件的去重统计能力。本文介绍如何创建Bot自定义规则模板并添加自定义规则。

背景信息

自定义规则分为以下类型:

自定义规则

说明

访问控制规则

根据客户端IP、请求URL及常见的请求头字段定义请求特征匹配条件,对命中匹配条件的请求执行相应处置。例如,您可以使用自定义规则拦截访问指定Client ID的请求、对包含指定的网页端UMID、AppUMID等内容的请求进行校验等。

频率控制规则

在访问控制匹配条件的基础上,定义访问频率检测条件,对访问频率异常的统计对象执行相应处置。例如,如果同一个IP或会话在短时间内频繁命中匹配条件,您可以通过启用频率控制,在一段时间内拦截该IP或会话的请求。

步骤一:创建自定义规则模板

  1. 登录Web应用防火墙3.0控制台。在顶部菜单栏,选择WAF实例的资源组和地域(中国内地非中国内地

  2. 模板,单击新建模板,在新建模板-高级自定义规则面板中完成以下配置,单击确定

    配置项

    说明

    模板名称

    为该模板设置一个名称。

    长度为1~255个字符,支持中文和大小写英文字母,可包含数字、半角句号(.)、下划线(_)和短划线(-)。

    规则配置

    您可以单击新建规则,为当前模板新建自定义规则;或者忽略该设置,在创建规则模板后,再为模板新建规则。

    生效对象

    从已添加的配置防护对象和防护对象组中,选择要应用该模板的配置防护对象和防护对象组。

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

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

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

  • 为该模板新建规则

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

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

步骤二:创建自定义规则

只有添加防护规则后,自定义规则模板才具有防护作用。在新建规则对话框,完成以下配置,单击确定

如果您已在步骤一添加了防护规则,可跳过该步骤。

配置项

说明

规则名称

为该规则设置一个名称。

支持中文和大小写英文字母,可包含数字、半角句号(.)、下划线(_)和短划线(-)。

匹配条件

设置该规则要匹配的请求特征。

单击新增条件,添加一个条件。一个规则中最多可以添加10个条件。如果定义了多个条件,则只有当多个条件同时满足时,才算命中规则。

每个条件由匹配字段逻辑符匹配内容组成。配置示例如下:

  • 示例1:匹配字段URI逻辑符包含匹配内容/login.php,表示当被请求的路径包含/login.php时,则请求命中该规则。

  • 示例2:匹配字段IP逻辑符属于匹配内容192.1X.XX.XX,表示当发起连接的客户端IP192.1.XX.XX时,则请求命中该规则。

防护类型

默认访问控制,单击频率控制开启频率控制。

频率控制表示如果来自同一统计对象(IP、会话等)的请求频繁地命中规则,则在一段时间内,对该统计对象的所有访问执行相应处置,启用频率控制后,您需要设置频率控制参数。

  • 频率检测条件

    统计时长(秒)内,一个统计对象命中规则的次数超过阈值(次),则对该对象进行黑名单处置。

    • 统计对象

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

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

      • 自定义header:表示统计包含指定Header的请求的频率。例如,对于自定义的header标识符Referer,在指定的统计时间段内,计算每个不同Referer值的请求出现次数。

      • 自定义参数:自定义参数匹配URL中的关键字,表示统计包含指定参数的请求的频率。

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

      • Session:WAF默认会在响应中插入acw_tc来识别和统计不同的客户端访问,统计相同acw_tc发起请求的频率。

      • Body参数:请求Body中的参数,表示统计包含指定Body参数的请求的频率。

      • APPUMID:表示统计同一个App端发起请求的频率。

      • 账号:表示统计同一个账号发起请求的频率。

      • 网页端UMID:表示统计同一个网页端发起请求的频率。

    • 统计时长(秒)

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

    • 阈值(次)

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

  • 响应码检测条件

    获得响应码的响应数量或比例超过设置的数量比例(%)时,则对该对象进行黑名单处置。

    • 响应码

      选择是否在频率检测的基础上,启用响应码检测,即防护对象既要满足频率检测条件,还要满足特定的响应码特征,才会触发黑名单处置。启用响应码检测时,需设置要统计的响应码。

    • 数量

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

      说明

      数量比例(%)二选一。

    • 比例(%)

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

      说明

      数量比例(%)二选一。

  • 去重统计

    去重统计后的对象如果命中统计规则,则对该对象进行黑名单处置。单击新增条件,添加一个条件。一个规则中最多可以添加5个条件。如果定义了多个条件,则只有当多个条件同时满足时,才算命中规则。

    每个条件由匹配字段逻辑符匹配内容组成。配置示例如下:

    匹配字段URI逻辑符等于数量5,表示访问匹配条件中设置的URI去重后的次数等于5,则请求命中该规则。

  • 黑名单处置条件

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

    • 黑名单生效范围

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

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

      • 作用于整个防护对象:表示处置受限制对象的所有请求。

    • 黑名单超时时间

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

处置动作

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

    说明

    WAF默认使用统一的拦截响应页面,您可以通过自定义响应功能,自定义拦截响应页面。更多信息,请参见设置自定义响应规则配置拦截响应页面

  • 观察:表示不拦截命中规则的请求,只通过日志记录请求命中了规则。您可以通过WAF日志,查询命中当前规则的请求,分析规则的防护效果(例如,是否有误拦截等)。

    观察模式方便您试运行首次配置的规则,待确认规则没有产生误拦截后,再将规则设置为其他处置动作模式。

  • JS验证:表示WAF向客户端返回一段正常浏览器可以自动执行的JavaScript代码。如果客户端正常执行了JavaScript代码,则WAF在一段时间(默认30分钟)内放行该客户端的所有请求(不需要重复验证),否则拦截请求。

  • 滑块:表示WAF向客户端返回滑动验证页面。如果客户端成功执行滑动验证,则WAF在一段时间(默认30分钟)内放行该客户端的所有请求(不需要重复验证),否则拦截请求。

  • 严格滑块:表示WAF向客户端返回滑动验证页面。如果客户端成功执行滑动验证,则WAF放行本次请求,否则拦截请求。严格滑块验证模式下,客户端的每次请求都需要验证。

  • 回源标记:表示客户可以自定义Header名称及内容(规则类型、规则ID、网页端UMID),WAF不会直接处理,而是会通过新增Header的方式将命中信息返回给源站,客户可以与后端风控系统结合做业务侧处理。

规则分类

对自定义规则进行分类后,相应的命中流量将在流量分析页面的恶意Bot和疑似Bot走势图中得到统计。

  • 疑似BOT:存在部分爬虫表征,但缺乏直接证据(如攻击痕迹或明确意图),需进一步验证其意图。

  • 恶意BOT:以非法目的为主导,通过自动化手段对目标系统或网络发起攻击、窃取数据或执行恶意操作的自动化程序。

高级设置

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

    开启规则灰度后,您还需要设置灰度维度灰度比例。灰度维度包括:IP自定义Header自定义参数自定义CookieSessionAPPUMID网页端UMID

    说明

    灰度规则是基于您设置的维度进行灰度,而不是对请求按比例随机生效规则。例如,若您选择IP维度进行灰度规则,那么触发该灰度规则的IP请求就都会命中该防护规则。

  • 生效模式

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

    • 按时间段生效:为防止更新的防护规则在活动前被攻击者识别和破解,通常选择在活动开始时生效新规则。您可以将具体某一时区的一段时间设置为防护规则的生效时间。

    • 按周期生效:适用于周期性活动,需在活动期间启用更严格的防护规则,其他时间则使用较宽松的规则;或在低流量时段下发新规则以验证其效果和误报风险。您可以将具体某一时区的每一天的一段时间设置为防护规则的生效时间。

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

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

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

  • 编辑删除规则。

匹配字段说明

匹配字段

说明

支持的逻辑符

URI

请求的统一资源标识符URI(Uniform Resource Identifier),表示被请求的资源的路径。一般来说,URI=URI Path + Query String

对应匹配内容以/开头,不包含域名,例如,/login.php

  • 包含、不包含

  • 等于、不等于

  • 长度小于、长度等于、长度大于

  • 等于多值之一、不等于任一值

  • 包含多值之一、不包含任一值

  • 正则不匹配、正则匹配

  • 前缀匹配、后缀匹配

IP

请求的来源IP,即发起请求的客户端的IP地址。

匹配内容填写要求如下:

  • 支持使用IPv4地址(例如,1.XX.XX.1)、IPv6地址(例如,2001:db8:ffff:ffff:ffff:ffff:ffff:ffff)。

  • 支持使用IP网段格式(例如,1.XX.XX.1/16)。

  • 每输入一个IP地址,按回车进行确认。

  • 最多支持设置100IP地址。

不属于、属于

Referer

请求的来源网址,即该请求从哪个页面跳转产生。

  • 包含、不包含

  • 等于、不等于

  • 长度小于、长度等于、长度大于

  • 等于多值之一、不等于任一值

  • 包含多值之一、不包含任一值

  • 正则不匹配、正则匹配

  • 前缀匹配、后缀匹配

  • 内容为空

  • 存在、不存在

User-Agent

发起请求的客户端的浏览器标识、渲染引擎标识和版本信息等浏览器相关信息。

  • 包含、不包含

  • 等于、不等于

  • 长度小于、长度等于、长度大于

  • 等于多值之一、不等于任一值

  • 包含多值之一、不包含任一值

  • 正则不匹配、正则匹配

  • 前缀匹配、后缀匹配

  • 内容为空

  • 存在、不存在

Query String

请求中的查询字符串,具体指URL中问号(?)后面的部分。

  • 包含、不包含

  • 等于、不等于

  • 长度小于、长度等于、长度大于

  • 等于多值之一、不等于任一值

  • 包含多值之一、不包含任一值

  • 正则不匹配、正则匹配

  • 存在、不存在

Cookie

请求中的Cookie信息。

  • 包含、不包含

  • 等于、不等于

  • 长度小于、长度等于、长度大于

  • 等于多值之一、不等于任一值

  • 包含多值之一、不包含任一值

  • 正则不匹配、正则匹配

  • 存在、不存在

  • 内容为空

Content-Type

请求指定的响应HTTP内容类型,即多用途互联网邮件扩展类型MIME(Multipurpose Internet Mail Extensions)类型信息。

  • 包含、不包含

  • 等于、不等于

  • 长度小于、长度等于、长度大于

  • 等于多值之一、不等于任一值

  • 包含多值之一、不包含任一值

  • 正则不匹配、正则匹配

Content-Length

请求内容所包含的字节数。取值范围:0~2147483648。

等于、值小于、值大于

X-Forwarded-For

请求的客户端真实IP。X-Forwarded-For(XFF)用来识别通过HTTP代理或负载均衡方式转发的请求的客户端最原始的IP地址的HTTP请求头字段,只有通过HTTP代理或者负载均衡服务器转发的请求才会包含该项。

  • 包含、不包含

  • 等于、不等于

  • 长度小于、长度等于、长度大于

  • 等于多值之一、不等于任一值

  • 包含多值之一、不包含任一值

  • 正则不匹配、正则匹配

  • 不存在

Body

请求的内容信息。

  • 包含

  • 不存在

  • 等于

  • 正则匹配

  • 前缀匹配、后缀匹配

Http-Method

请求的方法,包括GET、POST、DELETE、PUT、OPTIONS、CONNECT、HEAD、TRACE、PATCH。

  • 不等于、等于

  • 等于多值之一、不等于任一值

Header

请求的头部信息。支持自定义的头部字段。

  • 包含、不包含

  • 等于、不等于

  • 长度小于、长度等于、长度大于

  • 等于多值之一、不等于任一值

  • 包含多值之一、不包含任一值

  • 正则不匹配、正则匹配

  • 存在、不存在

URI Path

请求的URI路径。

  • 包含、不包含

  • 等于、不等于

  • 长度小于、长度等于、长度大于

  • 等于多值之一、不等于任一值

  • 包含多值之一、不包含任一值

  • 正则不匹配、正则匹配

  • 前缀匹配、后缀匹配

Query String Parameter

请求参数的参数名。请求参数指请求的URL中问号(?)后面的部分。例如,www.aliyundoc.com/request_path?param1=a&param2=b中,param1param2都是请求参数。

说明

Query String Parameter的自定义Parameter大小写敏感。

  • 包含、不包含

  • 等于、不等于

  • 长度小于、长度等于、长度大于

  • 等于多值之一、不等于任一值

  • 包含多值之一、不包含任一值

  • 正则不匹配、正则匹配

  • 前缀匹配、后缀匹配

  • 存在、不存在

  • 内容为空

Client-ID

客户端(如浏览器或应用程序)标识,通过User Agent信息和流量指纹等特征来识别HTTP请求来源于哪种客户端。

  • 包含、不包含

  • 等于、不等于

  • 等于多值之一

Server-Port

服务器端口。

  • 不等于、等于

  • 等于多值之一、不等于任一值

File Extension

被请求文件的扩展名,例如,.png.php

  • 包含、不包含

  • 等于、不等于

  • 长度小于、长度等于、长度大于

  • 等于多值之一、不等于任一值

  • 包含多值之一、不包含任一值

  • 正则不匹配、正则匹配

  • 前缀匹配、后缀匹配

  • 存在、不存在

  • 内容为空

Filename

请求路径末尾的文件名。例如,在/abc/index.php中,index.php表示文件名。

  • 包含、不包含

  • 等于、不等于

  • 长度小于、长度等于、长度大于

  • 等于多值之一、不等于任一值

  • 包含多值之一、不包含任一值

  • 正则不匹配、正则匹配

  • 前缀匹配、后缀匹配

  • 存在、不存在

  • 内容为空

Host

被请求的域名。

  • 包含、不包含

  • 等于、不等于

  • 长度小于、长度等于、长度大于

  • 等于多值之一、不等于任一值

  • 包含多值之一、不包含任一值

  • 正则不匹配、正则匹配

  • 前缀匹配、后缀匹配

  • 存在、不存在

  • 内容为空

Cookie Name

Cookie的键名称。例如,在acw_tc:111这个Cookie中,acw_tcCookie的键名称。

说明

Cookie Name的自定义Cookie-Exact大小写敏感。

  • 包含、不包含

  • 等于、不等于

  • 长度小于、长度等于、长度大于

  • 等于多值之一、不等于任一值

  • 包含多值之一、不包含任一值

  • 正则不匹配、正则匹配

  • 前缀匹配、后缀匹配

  • 存在、不存在

  • 内容为空

Body Parameter

请求Body中的参数名称。例如,请求Body中包含以下JSON字符串a=1&b=2,那么ab就是参数名称。使用该字段时请确保匹配内容长度大于四个字符,否则流量无法被检测。

说明

Body Parameter的自定义Post-Arg大小写敏感。

  • 包含、不包含

  • 等于、不等于

  • 长度小于、长度等于、长度大于

  • 等于多值之一、不等于任一值

  • 包含多值之一、不包含任一值

  • 正则不匹配、正则匹配

  • 前缀匹配、后缀匹配

  • 存在、不存在

  • 内容为空

JA3 Fingerprint

通过将TLS握手过程中的关键参数(包括TLS版本、密码套件、压缩算法和TLS扩展等信息)进行MD5哈希处理,生成一个字符串用来表示客户端的TLS配置,该字符串即JA3指纹。

JA3指纹可以用于识别和区分不同类型的TLS客户端,例如Web浏览器、移动应用程序、恶意软件等。

  • 等于、不等于

  • 等于多值之一

JA4 Fingerprint

JA4指纹通过引入更多的上下文信息和算法,例如浏览器的版本、操作系统等,减少了JA3指纹可能导致的重复性问题。

JA4指纹能够更准确地鉴别出真实的用户与伪装者,降低误识率。

  • 等于、不等于

  • 等于多值之一

HTTP/2 Fingerprint

根据HTTP2客户端的原始指纹,利用MD5算法处理后生成的HTTP2.0指纹。用来分析和识别不同的客户端,实现更安全和高效的通信。

  • 等于、不等于

  • 等于多值之一

IDC

基于源IP归属数据识别流量来源,云服务器成本较低,黑灰产易利用进行攻击。

等于多值之一、不等于任一值

Web SDK

通过WebSDK采集到的探针信息,如网页端UMID、键盘/鼠标/触摸屏按下次数等,识别异常流量。

  • 等于

  • 值大于、值小于

App SDK

可基于App SDK采集的探针信息做精细化管控。

  • 包含、不包含

  • 等于、不等于

  • 长度小于、长度等于、长度大于

  • 等于多值之一、不等于任一值

  • 包含多值之一、不包含任一值

  • 正则匹配、正则不匹配

  • 前缀匹配、后缀匹配

  • 存在、不存在

  • 内容为空