介绍 AWS WAF 的全新控制台体验
现在,您可以使用更新后的体验访问控制台中任意位置的 AWS WAF 功能。有关更多详细信息,请参阅 使用更新的控制台体验。
AWS WAF Classic 的工作原理
警告
AWS WAF Classic 正经历计划中的生命周期结束过程。有关您所在区域特定的里程碑和日期,请参阅您的 AWS Health 控制面板。
注意
这是 AWS WAF Classic 文档。仅当 2019 年 11 月之前在 AWS WAF 中创建了 AWS WAF 资源(例如规则和 web ACL),但尚未将这些资源迁移到最新版本时,才应使用此版本。要迁移您的 web ACL,请参阅 将 AWS WAF Classic 资源迁移到 AWS WAF。
有关 AWS WAF 的最新版本,请参阅 AWS WAF。
您可以使用 AWS WAF Classic 来控制 API Gateway、Amazon CloudFront 或应用程序负载均衡器响应 web 请求的方式。您首先需创建条件、规则和 web 访问控制列表(web ACL)。您需要定义条件、将条件合并为规则并将规则合并为 web ACL。
注意
您还可以使用 AWS WAF Classic 保护托管在 Amazon Elastic Container Service(Amazon ECS)容器中的应用程序。Amazon ECS 是一项高度可扩展的快速容器管理服务,它可轻松运行、停止和管理集群上的 Docker 容器。要使用此选项,您可以配置 Amazon ECS 来使用针对 AWS WAF Classic 启用的应用程序负载均衡器,以在您的服务中跨任务保护 HTTP/HTTPS 第 7 层流量。有关更多信息,请参阅 Amazon Elastic Container Service 开发人员指南中的服务负载均衡。
- 条件
-
条件定义您希望 AWS WAF Classic 在 web 请求中监视的基本特征:
-
可能是恶意的脚本。攻击者会嵌入可以利用 web 应用程序漏洞的脚本。这称为跨站点脚本。
-
请求源自的 IP 地址或地址范围。
-
请求源自的国家/地区或地理位置。
-
请求的指定部分的长度(如查询字符串)。
-
可能是恶意的 SQL 代码。攻击者会尝试通过在 web 请求中嵌入恶意 SQL 代码从数据库提取数据。这称为 SQL 注入。
-
请求中出现的字符串,例如,在
User-Agent标头中出现的值或是在查询字符串中出现的文本字符串。您还可以使用正则表达式(regex)指定这些字符串。
某些条件采用多个值。例如,您可以在 IP 条件中指定最多 1 万个 IP 地址或 IP 地址范围。
-
- 规则
-
您可将条件合并为规则,以精确锁定要允许、阻止或计数的请求。AWS WAFClassic 提供了两种类型的规则:
- 常规规则
-
常规规则仅使用条件来锁定特定请求。例如,根据您发现的来自某个攻击者的最近请求,您可以创建一个规则,其中包含以下条件:
-
请求来自 192.0.2.44。
-
请求在
BadBot标头中包含值User-Agent。 -
请求表现为在查询字符串中包含类似 SQL 的代码。
当一个规则中包括多个条件时,如本例所示,AWS WAF Classic 会查找匹配所有条件的请求,即,它通过
AND将条件合并在一起。将至少一个条件添加到常规规则。没有条件的常规规则无法匹配任何请求,因此永远不会触发规则的操作(允许、计数或阻止)。
-
- 基于速率的规则
-
基于速率的规则就像常规规则一样,具有额外的速率限制。基于速率的规则计算从满足规则条件的 IP 地址到达的请求。如果来自 IP 地址的请求在五分钟内超过速率限制,则该规则可能会触发操作。触发操作可能需要一两分钟的时间。
对于基于速率的规则而言,条件是可选的。如果未在基于速率的规则中添加任何条件,则速率限制适用于所有 IP 地址。如果将条件与速率限制组合在一起,则速率限制适用于与条件匹配的 IP 地址。
例如,基于您发现的来自某个攻击者的最近请求,您可以创建一个基于速率的规则,包含如下条件:
-
请求来自 192.0.2.44。
-
请求在
BadBot标头中包含值User-Agent。
在此基于速率的规则中,您还定义了一个速率限制。在本例中,假设您创建了速率限制 1000。当请求既符合上述两个条件又超过每 5 分钟 1000 个请求的速率限制时,将触发在 web ACL 中定义的该规则的操作(阻止或计数)。
不符合这两个条件的请求不计入速率限制,也不受此规则的影响。
又如,假设您希望将请求限定为网站上特定页面的请求。为此,您可以向基于速率的规则中添加以下字符串匹配条件:
-
Part of the request to filter on 是
URI。 -
匹配类型是
Starts with。 -
要匹配的值是
login。
还要将
RateLimit指定为 1000。通过向 web ACL 中添加此基于速率的规则,您可以将请求限制在登录页面,而不影响网站其余部分。
-
- Web ACL
-
在您将条件合并为规则之后,您可将规则合并为 web ACL。在其中可定义每个规则的操作允许、阻止或计数和默认操作:
- 每个规则的操作
-
当 web 请求匹配一个规则中的所有条件时,AWS WAF Classic 可以阻止该请求,或者允许将该请求转发到 API Gateway API、CloudFront 分配或应用程序负载均衡器。您可以指定希望 AWS WAF Classic 为每个规则执行的操作。
AWS WAF Classic 按照规则列出的顺序,将请求与 web ACL 中的规则进行比较。AWS WAFClassic 随后执行与请求匹配的第一个规则关联的操作。例如,如果某个 web 请求与允许请求的一个规则以及阻止请求的另一个规则匹配,则 AWS WAF Classic 会根据先列出的规则来允许或阻止该请求。
如果您要先测试新规则,然后再开始使用它,则还可以将 AWS WAF Classic 配置为对满足规则的所有条件的请求进行计数。与允许或阻止请求的规则一样,对请求进行计数的规则受其在 web ACL 的规则列表中的位置的影响。例如,如果一个 web 请求匹配允许请求的规则,同时又匹配另一个对请求进行计数的规则,那么如果允许请求的规则先列出,则不对请求进行计数。
- 默认操作
-
此默认操作决定 AWS WAF Classic 是允许还是阻止不匹配 web ACL 中任何规则中所有条件的请求。例如,假设您创建一个 web ACL,并仅添加您在前面定义的规则:
-
请求来自 192.0.2.44。
-
请求在
BadBot标头中包含值User-Agent。 -
请求表现为在查询字符串中包含恶意 SQL 代码。
如果某个请求不满足该规则中的所有三个条件,并且默认操作是
ALLOW,则 AWS WAF Classic 会将该请求转发到 API Gateway、CloudFront 或应用程序负载均衡器,该服务会使用请求的对象进行响应。如果您向 web ACL 中添加两个或更多规则,则仅当有请求不满足任一规则的所有条件时,AWS WAF Classic才执行默认操作。例如,假设您添加另一个只包含一个条件的规则:
-
在
BIGBadBot标头中包含值User-Agent的请求。
仅当有请求既不满足第一个规则的所有三个条件,也不满足第二个规则的一个条件时,AWS WAF Classic 才执行默认操作。
-
在某些情况下,AWS WAF 可能会遇到内部错误,该错误会延迟对 Amazon API Gateway、Amazon CloudFront 或应用程序负载均衡器有关是允许还是阻止请求的响应。在这些情况下,CloudFront 通常会允许请求或提供内容。API 网关和应用程序负载均衡器通常会拒绝请求,不提供内容。