如何允许被 AWS WAF 机器人控制功能规则组阻止的机器人发出的请求?
我想允许被 AWS WAF 机器人控制功能规则组阻止的合法机器人发出的请求。
解决方法
要允许被机器人控制功能规则组阻止的合法机器人的请求,请完成以下步骤。
注意:AWS WAF 机器人控制功能规则组使用 AWS WAF 的 IP 地址来验证机器人。一些经过验证的机器人通过代理或 CDN 进行路由,这些代理或 CDN 在转发请求时不保留客户端 IP 地址。如果您的机器人以这种方式路由,则您必须明确允许该机器人。
确定阻止您的 AWS WAF 日志请求的机器人控制功能规则
要确定阻止合法机器人请求的规则,请分析您的 AWS WAF 日志。使用 Amazon Athena 查询或 Amazon CloudWatch Log Insights。
使用 Athena 查询分析 AWS WAF 日志
完成以下步骤:
- 使用分区投影为 Athena 中的 AWS WAF 日志创建表。
- 要查找被屏蔽的请求的详细信息,请运行以下 Athena 查询:
**注意:**将 waf_logs 替换为您的表名,将 waf_data 替换为您的数据库名称,将 time > now() - interval '3' day 替换为您的时间范围,将 pingdom% 替换为您的机器人名称。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.kv['user-agent'] like 'pingdom%', 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
有关筛选指定时间范围内的记录的 Athena 查询示例,请参阅查询 AWS WAF 日志。 - 查看 matchedRule 列以确定阻止合法机器人请求的规则。以下为步骤 2 中 Athena 查询的输出示例:
#: 1
timestamp: 2024-04-10 15:11:18.000
Action**:** BLOCK
terminatingRuleId: AWS-AWSManagedRulesBotControlRuleSet
matchedRule: CategoryMonitoring
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/61.0.3163.100 Chrome/61.0.3163.100 Safari/537.36 PingdomPageSpeed/1.0 (pingbot/2.0; +http://www.pingdom.com/)
_col5: false
clientip: 192.0.2.0
country: US
labels: [{name=awswaf:managed:token:absent}, {name=awswaf:managed:aws:bot-control:bot:name:pingdom}, {name=awswaf:managed:aws:bot-control:bot:unverified}, {name=awswaf:managed:aws:bot-control:bot:category:monitoring},{name=awswaf:managed:captcha:absent}, {name=awswaf:managed:aws:bot-control:signal:non_browser_user_agent}]
**注意:**Athena 查询输出以表格形式显示。
使用 CloudWatch Log Insights 查询
完成以下步骤:
-
打开 CloudWatch 控制台。
-
在导航窗格中,选择 Logs(日志),然后选择 Log Insights。
-
在 Log Insights 下,打开下拉菜单 Selection criteria(选择条件),
-
选择一个或多个要查询的日志组,或选择 Browse log groups(浏览日志组)。
-
选择您的日志组。
-
(可选)为查询选择时间范围。
-
将以下查询粘贴到查询编辑器中。
fields @timestamp, @message | parse @message '{"name":"User-Agent","value":"*"}' as userAgent | filter @message like 'awswaf:managed:aws:bot-control' | parse @message '"labels":[*]' as Labels | parse @message '"httpRequest":{"clientIp":"*","country":"*"' as IP, Country | parse @message '"terminatingRule":{"ruleId":"*","action":"*"' as ruleID, action | filter action = "BLOCK" | display @timestamp, userAgent, IP, Country, ruleID, action, terminatingRuleId, Labels | sort by @timestamp DESC | limit 100 -
(可选)要查找来自特定 IP 地址的机器人,请在前面的查询中添加以下筛选条件:
| filter IP = '10.0.0.0/8'**注意:**将 10.0.0.0/8 替换为您的 IP 地址。
-
(可选)要查找具有特定用户代理值的机器人,请在前面的查询中添加以下筛选条件:
| filter userAgent like 'user-agent value'**注意:**将 user-agent value 替换为您的用户代理值。
-
要查看整条日志消息,请展开日志条目。
-
要找到阻止合法机器人请求的规则,请搜索 terminatingRuleId 和 ruleGroupList.x.terminatingRule.ruleId。这些字段的标签显示了请求被阻止的原因。在以下示例中,ruleGroupList.0.terminatingRule.ruleID 因为 CategoryMonitoring 而被屏蔽:
httpSourceName ALB labels.0.name awswaf:managed:token:absent labels.1.name awswaf:managed:aws:bot-control:bot:name:pingdom labels.2.name awswaf:managed:aws:bot-control:bot:unverified labels.3.name awswaf:managed:aws:bot-control:bot:category:monitoring labels.4.name awswaf:managed:captcha:absent ruleGroupList.0.customerConfig.0.name InspectionLevel ruleGroupList.0.customerConfig.0.value COMMON ruleGroupList.0.customerConfig.1.name EnableMachineLearning ruleGroupList.0.customerConfig.1.value null ruleGroupList.0.ruleGroupId AWS#AWSManagedRulesBotControlRuleSet ruleGroupList.0.terminatingRule.action BLOCK ruleGroupList.0.terminatingRule.ruleId CategoryMonitoring terminatingRuleId AWS-AWSManagedRulesBotControlRuleSet terminatingRuleType MANAGED_RULE_GROUP
一个请求可以附上多个标签。就这些说明而言,只有与块规则相关的请求才是相关的。
设置阻止计数请求的机器人控制功能规则
完成以下步骤:
- 打开 AWS WAF 控制台。
- 在导航窗格中,选择 AWS WAF。
- 选择 Resources & protection packs(资源和保护包)。
- 找到您的保护包,然后选择 Rules(规则)旁边的 View and edit(查看和编辑)。
- 在右侧窗格中,选择 AWSManagedRulesBotControlRuleSet 规则组。
- 在 Rule Overrides(规则覆盖)下,将阻塞规则的操作更改为 Count(计数)。
- 选择 Save Rule(保存规则)。
**注意:**AWS WAF 会验证符合规则的请求并为其添加标签,但不会阻止这些请求。
为除要允许的机器人之外的所有匹配请求创建自定义规则
要阻止非法请求,请创建与标签匹配的规则,以允许具有特定特征的请求并阻止其他请求。例如:
Name: name of the rule IF (Statement 1):the request contains the label AND NOT IF (Statement 2):the request contains the label(enter the bot label you want to allow) Then Action: Block
**注意:**如果封禁规则的标签为 awswaf:managed:aws:bot-control:bot:category,则机器人控制功能会在机器人名称上附加另一个标签。您可以使用此机器人名称标签来识别合法的机器人。否则,请使用 user-agent 标头来识别合法的机器人。
要创建此自定义规则,请完成以下步骤:
- 打开 AWS WAF 控制台。
- 在导航窗格中,选择 AWS WAF。
- 选择 Resources & protection packs(资源和保护包)。
- 找到您的保护包,然后选择 Rules(规则)旁边的 View and edit(查看和编辑)。
- 在右侧窗格中,选择 Add rules(添加规则)。
选择 Custom rule(自定义规则),然后选择 Next(下一步)。
再次选择 Custom rule(自定义规则),然后选择 Next(下一步)。 - 将规则 Action(操作)设置为 BLOCK。
- 输入您的 Rule name(规则名称)。
- 对于 If a request(如果请求),展开下拉列表并选择 matches all the statements (AND)(匹配所有语句 (AND))。
- 对于 Statement 1(语句 1),完成以下步骤:
对于 Inspect(检查),选择 Has a label(有标签)。
对于 Statement(声明),选择 Label(标签)。
对于 Match key(匹配密钥),选择 awswaf:managed:aws:bot-control:bot:category: category-name。
**注意:**将 category-name 替换为您的规则类别名称。 - 对于 Statement 2(语句 2),完成以下步骤:
对于 Inspect(检查),选择 Has a label(有标签)。对于 Statement(语句),选择 Label(标签)”。
对于 Match key(匹配密钥),选择 awswaf:managed:aws:bot-control:bot:name: bot-name。
**注意:**将 bot-name 替换为您的机器人名称。
展开 Rule configuration(规则配置),在 Negate statement (NOT)(否定语句 (NOT))下,选择 Negate statement results(否定语句结果)。 - 选择 Create rule(创建规则)。
- 要设置规则优先级,请在右侧窗格中单击 Edit Rule Order(编辑规则顺序),然后将规则拖到 Bot Control Rule(机器人控制功能规则)下方。
- 选择 Save Rule order(保存规则顺序)。
以下示例是一条自定义规则,它使用标签允许机器人使用合法机器人并屏蔽所有其他机器人:
{ "Name": "expection-rule", "Priority": 2, "Statement": { "AndStatement": { "Statements": [ { "LabelMatchStatement": { "Scope": "LABEL", "Key": "awswaf:managed:aws:bot-control:bot:category:monitoring" } }, { "NotStatement": { "Statement": { "LabelMatchStatement": { "Scope": "LABEL", "Key": "awswaf:managed:aws:bot-control:bot:name:pingdom" } } } } ] } }, "Action": { "Block": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "expection-rule" } }
验证 AWS WAF 是否允许合法的机器人流量
要验证 AWS WAF 是否允许合法的机器人跟踪,请再次检查 AWS WAF 日志。如果机器人仍被屏蔽,请使用其他规则重复前面的过程。有时,多条规则会阻止合法流量。在这种情况下,您必须多次重复前面的过程。
相关信息
相关内容
已提问 4 年前
AWS 官方已更新 1 年前