跳至内容

为什么 AWS WAF 会阻止我的请求或返回 403 Forbidden 错误响应?

2 分钟阅读
0

我想识别阻止我的请求或返回 403 Forbidden 错误响应的 AWS WAF 规则。

简短描述

默认情况下,对于匹配到配置了 Block(阻止)操作的 AWS WAF 规则的请求,AWS WAF 会返回“403 Forbidden”错误。如果您为“阻止”操作设置自定义响应,则 AWS WAF 会返回您配置的响应。

要对“403 Forbidden”错误进行故障排除,请使用采样请求AWS WAF 日志来识别阻止请求的 AWS WAF 规则或规则组。然后,修改规则以允许您的请求。

解决方法

使用采样请求

如果 AWS WAF 在过去 3 小时内阻止了您的请求,则您可以查看被阻止的 Web 请求的采样。如果 AWS WAF 在 3 小时前阻止了您的请求,请重新发送相同的请求以生成新的采样请求。

Sampled requests(采样请求)表中,查看以下列:

  • 要识别请求,请查看 Source IP(源 IP)和 URI 列。
  • 要识别与请求匹配的规则或规则组,请查看 Metric name(指标名称)列。如果是规则组阻止了请求,请使用 Rule inside rule group(规则组内的规则)列来识别规则。
  • 要确认规则是否设置为 Block(阻止),请查看 Action(操作)列。

使用 AWS WAF 日志

**注意:**如果您在发送请求时未激活 AWS WAF 日志记录,请启用 AWS WAF 日志记录并重新发送相同的请求。

使用 AWS WAF 日志中的查询来识别被阻止的请求。要查询存储在 Amazon CloudWatch Logs 中的 AWS WAF 日志,请使用 Amazon CloudWatch Logs Insights 查询。要查询存储在 Amazon Simple Storage Solution (Amazon S3) 中的 AWS WAF 日志,请使用 Amazon Athena 查询。

CloudWatch Logs Insights 示例查询

要获取前 10 条终止规则,请运行以下查询:

fields terminatingRuleId
| stats count() as requestCount by terminatingRuleId
| sort requestCount desc
| limit 10

要按客户端 IP 地址、国家/地区、URI 和规则汇总 AWS WAF 阻止的请求,请运行以下查询:

fields httpRequest.clientIp as ClientIP, httpRequest.country as Country, httpRequest.uri as URI, terminatingRuleId as Rule
| filter action = "BLOCK"
| stats count() as RequestCount by Country, ClientIP, URI, Rule
| sort RequestCount desc

**注意:**在输出中,terminatingRuleId 字段用于识别阻止请求的 AWS WAF 规则或规则组。

Athena 示例查询

对于存储在 Amazon S3 存储桶中的 AWS WAF 日志,请使用 Athena 创建一个 AWS WAF 表来查询日志和筛选详细信息。有关详细信息,请参阅查询 AWS WAF 日志。然后,在表上运行查询。

例如,要根据客户端 IP 地址和国家/地区查看 AWS WAF 阻止的请求数量,请运行以下查询:

SELECT  "httprequest"."clientip"
,"count"(*) "count"  
, "httprequest"."country"
FROM
waf_logs
WHERE ("action" LIKE 'BLOCK')
GROUP BY "httprequest"."clientip", "httprequest"."country"
ORDER BY "count" DESC

修改 AWS WAF 规则以允许您的请求

如果阻止规则属于 AWS 托管规则的规则组,请自定义规则行为

如果阻止规则是自定义规则,请更新您的规则参数,以使用规则语句来允许请求。

相关信息

如何启用 AWS WAF 日志记录并将日志发送到 CloudWatch、Amazon S3 或 Firehose?

如何分析 CloudWatch 中的 AWS WAF 日志?

AWS 官方已更新 4 个月前