Amazon WAF 经典版的工作原理 - Amazon WAFAmazon Firewall Manager、和 Amazon Shield Advanced
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon WAF 经典版的工作原理

注意

这是 Amazon WAF Classic 文档。只有在 2019 年 11 月 Amazon WAF 之前创建了 Amazon WAF 资源(如规则和 Web ACL),并且尚未将其迁移到最新版本时,才应使用此版本。要迁移您的资源,请参阅将您的 Amazon WAF 经典资源迁移到 Amazon WAF

有关的最新版本 Amazon WAF,请参阅Amazon WAF

您可以使用 Amazon WAF Classic 来控制 API Gateway、Amazon CloudFront 或 Application Load Balancer 如何响应网络请求。您首先需创建条件、规则和 Web 访问控制列表 (Web ACL)。您需要定义条件、将条件合并为规则并将规则合并为 Web ACL。

注意

您还可以使用 Amazon WAF Classic 来保护托管在亚马逊弹性容器服务 (Amazon ECS) 容器中的应用程序。Amazon ECS 是一项高度可扩展的快速容器管理服务,它可轻松运行、停止和管理集群上的 Docker 容器。要使用此选项,您可以将 Amazon ECS 配置为使用支持 Amazon WAF 经典版的应用程序负载均衡器来路由和保护服务中任务之间的 HTTP/HTTPS(第 7 层)流量。有关更多信息,请参阅 Amazon Elastic Container Service 开发人员指南中的服务负载均衡

Conditions

条件定义您希望 Amazon WAF Classic 在 Web 请求中监视的基本特征:

  • 可能是恶意的脚本。攻击者会嵌入可以利用 Web 应用程序漏洞的脚本。这称为跨站点脚本

  • 请求源自的 IP 地址或地址范围。

  • 请求源自的国家/地区或地理位置。

  • 请求的指定部分的长度 (如查询字符串)。

  • 可能是恶意的 SQL 代码。攻击者会尝试通过在 Web 请求中嵌入恶意 SQL 代码从数据库提取数据。这称为 SQL 注入

  • 请求中出现的字符串,例如,在 User-Agent 标头中出现的值或是在查询字符串中出现的文本字符串。您还可以使用正则表达式 (regex) 指定这些字符串。

某些条件采用多个值。例如,您可以在 IP 条件中指定最多 10,000 个 IP 地址或 IP 地址范围。

规则

您可以将条件组合成规则,以精确定位您想要允许、阻止或计数的请求。 Amazon WAF Classic 提供两种类型的规则:

常规规则

常规规则仅使用条件来锁定特定请求。例如,根据您发现的来自某个攻击者的最近请求,您可以创建一个规则,其中包含以下条件:

  • 请求来自 192.0.2.44。

  • 请求在 User-Agent 标头中包含值 BadBot

  • 请求表现为在查询字符串中包含类似 SQL 的代码。

当一个规则中包括多个条件时,如本例所示, Amazon WAF Classic 会查找匹配所有条件的请求,即,它通过 AND 将条件合并在一起。

将至少一个条件添加到常规规则。没有条件的常规规则无法匹配任何请求,因此永远不会触发规则的操作(允许、计数或阻止)。

基于速率的规则

基于速率的规则就像常规规则一样,具有额外的速率限制。基于速率的规则计算从满足规则条件的 IP 地址到达的请求。如果来自 IP 地址的请求在五分钟内超过速率限制,则该规则可能会触发操作。触发操作可能需要一两分钟的时间。

对于基于速率的规则而言,条件是可选的。如果未在基于速率的规则中添加任何条件,则速率限制适用于所有 IP 地址。如果将条件与速率限制组合在一起,则速率限制适用于与条件匹配的 IP 地址。

例如,基于您发现的来自某个攻击者的最近请求,您可以创建一个基于速率的规则,包含如下条件:

  • 请求来自 192.0.2.44。

  • 请求在 User-Agent 标头中包含值 BadBot

在此基于速率的规则中,您还定义了一个速率限制。在本例中,假设您创建了速率限制 1000。当请求既符合上述两个条件又超过每 5 分钟 1000 个请求的速率限制时,将触发在 Web ACL 中定义的该规则的操作(阻止或计数)。

不符合这两个条件的请求不计入速率限制,也不受此规则的影响。

又如,假设您希望将请求限定为网站上特定页面的请求。为此,您可以向基于速率的规则中添加以下字符串匹配条件:

  • Part of the request to filter onURI

  • 匹配类型Starts with

  • Value to matchlogin

还要将 RateLimit 指定为 1000。

通过向 Web ACL 中添加此基于速率的规则,您可以将请求限制在登录页面,而不影响网站其余部分。

Web ACL

在您将条件合并为规则之后,您可将规则合并为 Web ACL。在其中可定义每个规则的操作允许、阻止或计数和默认操作:

每个规则的操作

当网络请求符合规则中的所有条件时,Cl Amazon WAF assic 可以阻止该请求,也可以允许将请求转发到 API Gateway API、 CloudFront 分发版或应用程序负载均衡器。您可以为每条规则指定希望 Amazon WAF Classic 执行的操作。

Amazon WAF Classic 按照您列出的规则顺序将请求与 Web ACL 中的规则进行比较。 Amazon WAF 然后,Classic 会执行与请求匹配的第一条规则关联的操作。例如,如果一个 Web 请求与一条允许请求的规则和另一条阻止请求的规则相匹配,则 Cl Amazon WAF assic 将根据首先列出的规则来允许或阻止该请求。

如果您想在开始使用新规则之前对其进行测试,也可以将 C Amazon WAF lassic 配置为计算满足该规则中所有条件的请求数。与允许或阻止请求的规则一样,对请求进行计数的规则受其在 Web ACL 的规则列表中的位置的影响。例如,如果一个 Web 请求匹配允许请求的规则,同时又匹配另一个对请求进行计数的规则,那么如果允许请求的规则先列出,则不对请求进行计数。

默认操作

默认操作决定 Amazon WAF Classic 是允许还是阻止不符合 Web ACL 中任何规则中所有条件的请求。例如,假设您创建一个 Web ACL,并仅添加您在前面定义的规则:

  • 请求来自 192.0.2.44。

  • 请求在 User-Agent 标头中包含值 BadBot

  • 请求表现为在查询字符串中包含恶意 SQL 代码。

如果请求不满足规则中的所有三个条件,并且默认操作为ALLOW,则 C Amazon WAF lassic 会将请求转发到 API Gateway CloudFront 或 Application Load Balancer,然后服务使用请求的对象进行响应。

如果您向 Web ACL 添加两个或更多规则,则 Amazon WAF Classic 仅在请求不满足任何规则中的所有条件时才会执行默认操作。例如,假设您添加另一个只包含一个条件的规则:

  • User-Agent 标头中包含值 BIGBadBot 的请求。

Amazon WAF 只有当请求不满足第一条规则中的所有三个条件且不满足第二条规则中的一个条件时,Classic 才会执行默认操作。

在某些情况下, Amazon WAF 可能会遇到内部错误,从而延迟对 Amazon API Gateway、Amazon CloudFront 或应用程序负载均衡器关于允许还是阻止请求的响应。在这些情况下,通常 CloudFront会允许请求或提供内容。API 网关和 Application Load Balancer 通常会拒绝请求,不提供内容。