如何允许已被 AWS WAF Bot Control 托管规则组阻止的机器人发出的请求?

上次更新日期:2022 年 6 月 28 日

我想允许已被 AWS WAF Bot Control 规则组阻止的机器人发出的请求。如何允许合法机器人发出的请求?

简短描述

要允许被 AWS WAF Bot Control 规则组阻止的机器人发出的请求,请执行以下操作:

  1. 通过查询 AWS WAF 日志来识别阻止 AWS WAF 日志发出的请求的 Bot Control 规则。
  2. 将阻止请求的 Bot Control 规则设置为计数
  3. 创建自定义规则以匹配排除规则的标签,并阻止所有匹配请求,要允许的机器人除外。
  4. 验证机器人流量是否被允许。

Bot Control 托管规则组使用来自 AWS WAF 的 IP 地址验证机器人。如果您验证了通过代理或 CDN 路由的机器人,而该机器人在转发请求时未保留客户端 IP 地址,则必须明确允许该机器人。

解决方法

识别阻止请求的 Bot Control 规则

分析 AWS WAF 日志,以确定阻止所需机器人发出的请求的 Bot Control 规则。

1.    要使用 Amazon Athena 分析 AWS WAF 日志,请使用分区投影在 Athena 中为 AWS WAF 日志创建一个表。有关说明,请参阅使用分区投影在 Athena 中为 AWS WAF 日志创建表

2.    运行以下 Athena 查询,查找被 Bot Control 规则组阻止的请求的详细信息:

注意:waf_logs 替换为您的表名。时间间隔 `time > now() - interval '3' day` 可以替换为您指定的时间间隔。
WITH waf_data AS
    (SELECT from_unixtime(waf.timestamp / 1000) as time,
    waf.terminatingRuleId,
    waf.action,
    waf.httprequest.clientip as clientip,
    waf.httprequest.requestid as requestid,
    waf.httprequest.country as country,
    rulegroup.terminatingrule.ruleid as matchedRule,
labels as Labels,
         map_agg(LOWER(f.name),
         f.value) AS kv
    FROM waf_logs waf,
    UNNEST(waf.httprequest.headers)
AS t(f), UNNEST(waf.rulegrouplist) AS t(rulegroup)
    WHERE rulegroup.terminatingrule.ruleid IS NOT NULL
    GROUP BY 1, 2, 3, 4, 5, 6, 7,8)
SELECT waf_data.time,
       waf_data.action,
       waf_data.terminatingRuleId,
       waf_data.matchedRule,
       waf_data.kv['user-agent'] as UserAgent,
waf_data.clientip,
       waf_data.country,
       waf_data.Labels
FROM waf_data
Where terminatingRuleId='AWS-AWSManagedRulesBotControlRuleSet' and time > now() - interval '3' day
ORDER BY time
DESC

有关筛选指定时间范围内的记录的 Amazon Athena 查询示例,请参阅 AWS WAF 日志的查询示例

3.    (可选)要进一步缩小搜索范围,请在 Where 子句中使用 AND 运算符在 UserAgent 上添加其他筛选条件。有关 WAF 日志中字段的描述,请参阅日志字段。例如,您可以添加筛选条件 kv['user-agent'] like 'Postman%',以缩小搜索范围。

4.    检查 matchedRule 列以确定阻止请求的规则。
注意:
有关 Bot Control 规则的更多信息,请参阅 AWS WAF Bot Control 规则组

将阻止请求的 Bot Control 规则设置为计数

编辑 Bot Control 规则组,将阻止请求的规则设置为计数。要将规则设置为计数,请参阅在规则组中将规则操作设置为计数。这允许规则将其标签应用于匹配请求,并允许未被阻止的机器人。

创建自定义规则以匹配排除规则的标签,并阻止所有匹配请求,要允许的机器人除外

根据阻止请求的规则标签,向 Web ACL 添加标签匹配规则。标签匹配规则必须位于 Bot Control 托管规则组之后。有关 Bot Control 托管规则组标签的信息,请参阅 AWS WAF Bot Control 规则组

如果带有类别标签的规则阻止了请求

配置您的自定义规则以允许特定的被阻止的机器人
重要提示:
将规则配置中的机器人类别和机器人名称标签替换为 Athena 查询结果中的机器人类别和机器人名称标签。

对于所有其他规则标签

创建自定义规则,为被阻止的用户代理创建例外
重要提示:将规则配置中 SearchString 字段中的机器人信号标签和 UserAgent 值,替换为机器人信号标签和标签中的 UserAgent 值,以及 Athena 查询结果的 UserAgent 列。

验证机器人流量是否被允许

再次检查 AWS WAF 日志以验证该机器人现在是否被允许。如果该机器人仍被阻止,请重复上述过程以确定阻止请求的其他规则。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?