我创建了一个自定义 AWS WAF 规则,但它没有按预期工作。我该怎么做才能解决这个问题?
解决方法
如果您的自定义 AWS WAF 规则未按预期运行,请检查以下内容:
规则的优先级
检查您的自定义规则的优先级是否正确。有关更多信息,请参阅 Web ACL 中规则和规则组的处理顺序。
您可以在定义规则的规则组或 Web ACL 中按名称访问规则。
AWS WAF 规则评估顺序从上到下,然后在第一个匹配的终止 Allow、Block 或 CAPTCHA 规则处停止。如果您的请求与放置在自定义规则之上的某个终止规则匹配,则 AWS WAF 将执行该规则中指定的操作。将不会根据您的自定义规则评估该请求。有关更多信息,请参阅在 Web ACL 中对规则和规则组操作的基本处理。
例如,假设您正在创建自定义允许规则以允许被 AWS 托管规则组(AMR)阻止的请求。您必须将自定义规则置于阻止请求的 AMR 之上(数字优先级较低)。
您可以通过 AWS WAF 控制台规则生成器管理优先级顺序,该规则生成器可用于 Web ACL 和规则组。要使用 AWS API 更改优先级顺序,请使用 UpdateWebACL 和 UpdateRuleGroup API 调用。要使用 AWS CLI 更改优先级顺序,请使用 update-web-acl 和 update-rule-group 命令。
文本转换
如果您在自定义规则中使用文本转换,请检查是否以正确的方式应用了文本转换。有关更多信息,请参阅 AWS WAF 文本转换。
AWS WAF 在检查请求之前应用转换。如果您指定了多个转换,AWS WAF 将按照列出的顺序进行处理。如果您在自定义规则中使用多个转换,则必须验证转换和转换顺序。
例如,如果您创建了一个自定义规则来对查询参数中的字符串执行 Base64 解码和 URL 解码。AWS WAF 首先对传入请求中的查询字符串执行 Base64 解码。使用 URL 解码进一步转换 Base64 解码生成的字符串。然后,将根据您在规则配置中提供的字符串检查 URL 解码生成的字符串。
布尔逻辑
如果您使用的是逻辑规则语句,请验证用于自定义规则的 AND、OR 或 NOT 逻辑是否正确。有关更多信息,请参见规则语句列表并按照逻辑规则语句中的说明进行操作。
要使用布尔逻辑验证这一点,请考虑以下示例:
如果您创建的自定义规则与符合以下条件的请求匹配:请求具有 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。
此请求将与您的自定义规则匹配。