您可使用 AWS WAF 控制 API 网关、Amazon CloudFront 或 应用程序负载均衡器 如何响应 Web 请求。您首先需创建条件、规则和 Web 访问控制列表 (Web ACL)。您需要定义条件、将条件合并为规则并将规则合并为 Web ACL。
- 条件
-
条件定义您希望 AWS WAF 在 Web 请求中监视的基本特征:
-
可能是恶意的脚本。攻击者会嵌入可以利用 Web 应用程序漏洞的脚本。这称为跨站点脚本。
-
请求源自的 IP 地址或地址范围。
-
请求源自的国家/地区或地理位置。
-
请求的指定部分的长度 (如查询字符串)。
-
可能是恶意的 SQL 代码。攻击者会尝试通过在 Web 请求中嵌入恶意 SQL 代码从数据库提取数据。这称为 SQL 注入。
-
请求中出现的字符串,例如,在
User-Agent
标头中出现的值或是在查询字符串中出现的文本字符串。您还可以使用正则表达式 (regex) 指定这些字符串。
某些条件采用多个值。例如,您可以在 IP 条件中指定最多 10,000 个 IP 地址或 IP 地址范围。
-
- 规则
-
您可将条件合并为规则,以精确锁定要允许、阻止或计数的请求。AWS WAF 提供了两种类型的规则:
- 常规规则
-
常规规则仅使用条件来锁定特定请求。例如,根据您发现的来自某个攻击者的最近请求,您可以创建一个规则,其中包含以下条件:
-
请求来自 192.0.2.44。
-
请求在
User-Agent
标头中包含值BadBot
。 -
请求表现为在查询字符串中包含类似 SQL 的代码。
当一个规则中包括多个条件时,如本例所示,AWS WAF 会查找匹配所有条件的请求,—即,它通过
AND
将条件合并在一起。 -
- 基于速率的规则
-
基于速率的规则类似于常规规则,但增加了速率限制。基于速率的规则会每五分钟统计一次来自指定 IP 地址的请求。如果请求数超过速率限制,则规则会触发操作。
您可以将条件与速率限制结合起来。这样,如果请求匹配所有条件,且请求数在任一五分钟周期内超过速率限制,则规则将触发 Web ACL 中所指定的操作。
例如,基于您发现的来自某个攻击者的最近请求,您可以创建一个基于速率的规则,包含如下条件:
-
请求来自 192.0.2.44。
-
请求在
User-Agent
标头中包含值BadBot
。
在此基于速率的规则中,您还定义了一个速率限制。在本例中,假设您创建了速率限制 15000。当请求既符合上述两个条件又超过每 5 分钟 15000 个请求的速率限制时,将触发在 Web ACL 中定义的该规则的操作 (阻止或计数)。
不符合上述两个条件的请求不会计入速率限制,也不会被此规则阻止。
又如,假设您希望将请求限定为网站上特定页面的请求。为此,您可以向基于速率的规则中添加以下字符串匹配条件:
-
Part of the request to filter on 是
URI
。 -
Match Type 是
Starts with
。 -
Value to match 是
login
。
还要将
RateLimit
指定为 15000。通过向 Web ACL 中添加此基于速率的规则,您可以将请求限制在登录页面,而不影响网站其余部分。
-
重要
应至少向常规规则中添加一个条件。不含任何条件的常规规则不能匹配任何请求,因此,也永远不会触发该规则的操作 (允许、计数、阻止)。
但是,对于基于速率的规则而言,条件是可选的。如果您没有在基于速率的规则中添加任何条件,AWS WAF 则假定所有 请求都匹配该规则,因此,当请求来自同一个 IP 地址时,将计入速率限制中。若来自同一 IP 地址的请求数超过速率限制,则会触发规则的操作 (计数或阻止)。
- Web ACL
-
在您将条件合并为规则之后,您可将规则合并为 Web ACL。在其中可定义每个规则的操作—允许、阻止或计数—和默认操作:
- 每个规则的操作
-
当 Web 请求匹配一个规则中的所有条件时,AWS WAF可以阻止该请求,或者允许将该请求转发到 API 网关 API、CloudFront 分配或 应用程序负载均衡器。您可以指定希望 AWS WAF 为每个规则执行的操作。
AWS WAF 按照规则列出的顺序,将请求与 Web ACL 中的规则进行比较。AWS WAF 随后执行与请求匹配的第一个规则关联的操作。例如,如果某个 Web 请求与允许请求的一个规则以及阻止请求的另一个规则匹配,则 AWS WAF 会根据先列出的规则来允许或阻止该请求。
如果您要先测试新规则,然后再开始使用它,则还可以将 AWS WAF 配置为对满足规则的所有条件的请求进行计数。与允许或阻止请求的规则一样,对请求进行计数的规则受其在 Web ACL 的规则列表中的位置的影响。例如,如果一个 Web 请求匹配允许请求的规则,同时又匹配另一个对请求进行计数的规则,那么如果允许请求的规则先列出,则不对请求进行计数。
- 默认操作
-
此默认操作决定 AWS WAF 是允许还是阻止不匹配 Web ACL 中任何规则中所有条件的请求。例如,假设您创建一个 Web ACL,并仅添加您在前面定义的规则:
-
请求来自 192.0.2.44。
-
请求在
User-Agent
标头中包含值BadBot
。 -
请求表现为在查询字符串中包含恶意 SQL 代码。
如果某个请求不满足该规则中的所有三个条件,并且默认操作是
ALLOW
,则 AWS WAF 会将该请求转发到 API 网关、CloudFront 或 应用程序负载均衡器,服务会使用请求的对象进行响应。如果您向 Web ACL 中添加两个或更多规则,则仅当有请求不满足任一规则的所有条件时,AWS WAF 才执行默认操作。例如,假设您添加另一个只包含一个条件的规则:
-
在
User-Agent
标头中包含值BIGBadBot
的请求。
仅当有请求既不满足第一个规则的所有三个条件,也不满足第二个规则的一个条件时,AWS WAF 才执行默认操作。
-
在某些情况下,AWS WAF 可能会遇到内部错误,该错误会延迟对 API Gateway、CloudFront 或应用程序负载均衡器有关是允许还是阻止请求的响应。在这些情况下,CloudFront 通常会允许请求或提供内容。API 网关和 Application Load Balancer 通常会拒绝请求,不提供内容。
下图显示 AWS WAF 如何检查规则并基于这些规则执行操作。