为什么我的 AWS WAF 自定义规则不起作用?

上次更新日期:2022 年 7 月 12 日

我创建了一个自定义 AWS WAF 规则,但它没有按预期工作。我该怎么做才能解决这个问题?

解决方法

如果您的自定义 AWS WAF 规则未按预期运行,请检查以下内容:

  • 规则的优先级
  • 文本转换
  • 布尔逻辑

规则的优先级

检查您的自定义规则的优先级是否正确。有关更多信息,请参阅 Web ACL 中规则和规则组的处理顺序

您可以在定义规则的规则组或 Web ACL 中按名称访问规则。

AWS WAF 规则评估顺序从上到下,然后在第一个匹配的终止 AllowBlockCAPTCHA 规则处停止。如果您的请求与放置在自定义规则之上的某个终止规则匹配,则 AWS WAF 将执行该规则中指定的操作。将不会根据您的自定义规则评估该请求。有关更多信息,请参阅在 Web ACL 中对规则和规则组操作的基本处理

例如,假设您正在创建自定义允许规则以允许被 AWS 托管规则组(AMR)阻止的请求。您必须将自定义规则置于阻止请求的 AMR 之上(数字优先级较低)。

您可以通过 AWS WAF 控制台规则生成器管理优先级顺序,该规则生成器可用于 Web ACL 和规则组。要使用 AWS API 更改优先级顺序,请使用 UpdateWebACLUpdateRuleGroup API 调用。要使用 AWS CLI 更改优先级顺序,请使用 update-web-aclupdate-rule-group 命令。

文本转换

如果您在自定义规则中使用文本转换,请检查是否以正确的方式应用了文本转换。有关更多信息,请参阅 AWS WAF 文本转换

AWS WAF 在检查请求之前应用转换。如果您指定了多个转换,AWS WAF 将按照列出的顺序进行处理。如果您在自定义规则中使用多个转换,则必须验证转换和转换顺序。

例如,如果您创建了一个自定义规则来对查询参数中的字符串执行 Base64 解码URL 解码。AWS WAF 首先对传入请求中的查询字符串执行 Base64 解码。使用 URL 解码进一步转换 Base64 解码生成的字符串。然后,将根据您在规则配置中提供的字符串检查 URL 解码生成的字符串。

布尔逻辑

如果您使用的是逻辑规则语句,请验证用于自定义规则的 ANDORNOT 逻辑是否正确。有关更多信息,请参见规则语句列表并按照逻辑规则语句中的说明进行操作。

要使用布尔逻辑验证这一点,请考虑以下示例:

如果您创建的自定义规则与符合以下条件的请求匹配:请求具有 URI“/test”源 IP 位于 IP 集 X 中,则阻止

请求 1

如果该请求具有 URI“/test”(布尔值 1) IP 在 IP 集 X(布尔值 0)中,则布尔值 1 布尔值 0 将生成布尔值 0。

此请求与您的自定义规则不匹配。

请求 2

如果该请求不具有 URI“/test”(布尔值 0) IP 在 IP 集 X(布尔值 0)中,则布尔值 0 布尔值 0 将生成布尔值 0。

此请求与您的自定义规则不匹配。

请求 3

如果该请求具有 URI“/test”(布尔值 1) IP 在 IP 集 X(布尔值 1)中,则布尔值 1 布尔值 1 将生成布尔值 1。

此请求将与您的自定义规则匹配。


这篇文章对您有帮助吗?


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