引入全新的主机体验 AWS WAF
现在,您可以使用更新的体验访问控制台中任意位置的 AWS WAF 功能。有关更多详细信息,请参阅使用控制台。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
AWS WAF 经典版入门
警告
AWS WAF Classic 正在经历一个有计划的 end-of-life流程。有关您所在地区的里程碑和日期,请参阅您的 AWS Health 控制面板。
注意
这是 AWS WAF Classic 文档。只有在 2019 年 11 月 AWS WAF 之前创建了诸如规则和 Web ACLs 之类的 AWS WAF 资源,并且尚未将其迁移到最新版本时,才应使用此版本。要迁移您的网站 ACLs,请参阅将您的 AWS WAF 经典资源迁移到 AWS WAF。
有关的最新版本 AWS WAF,请参阅AWS WAF。
本教程介绍如何使用 AWS WAF Classic 执行以下任务:
设置 AWS WAF 经典版。
使用 AWS WAF 经典版控制台创建 Web 访问控制列表 (Web ACL),并指定要用于筛选 Web 请求的条件。例如,您可以指定请求的来源 IP 地址以及请求中仅由攻击者使用的值。
向规则中添加条件。规则使您可以确定要阻止或允许的目标 Web 请求。Web 请求必须符合规则中的所有条件, AWS WAF Classic 才会根据您指定的条件阻止或允许请求。
向 Web ACL 中添加规则。可以在其中指定基于添加到每个规则的条件阻止还是允许 Web 请求。
指定默认操作(阻止或允许)。这是 AWS WAF Classic 在网络请求与您的任何规则都不匹配时采取的操作。
选择您希望 C AWS WAF lassic 检查其网络请求的 Amazon CloudFront 配送。本教程仅涵盖的步骤 CloudFront,但应用程序负载均衡器和 Amazon API Gateway 的过程APIs 基本相同。 AWS WAF Class CloudFront ic for 适用于所有人 AWS 区域。 AWS WAF 与 API Gateway 或 Application Load Balancer 配合使用的 Classic 在AWS 服务终端节点列出的区域中可用。
注意
AWS 对于您在本教程中创建的资源,每天向您收取的费用通常少于 0.25 美元。当您完成本教程时,建议您删除资源以避免产生不必要的费用。
主题
步骤 1:设置 AWS WAF 经典版
如果您尚未按照 设置 AWS WAF 经典版 中的常规设置步骤操作,请立即执行操作。
步骤 2:创建 Web ACL
AWS WAF Classic 控制台将引导您完成将 Cl AWS WAF assic 配置为根据您指定的条件(例如请求来源的 IP 地址或请求中的值)阻止或允许 Web 请求的过程。在此步骤中,您将创建一个 web ACL。
创建 web ACL
登录 AWS 管理控制台 并打开 AWS WAF 控制台,网址为https://console.aws.amazon.com/wafv2/
。 如果您在导航窗格中看到 “切换到 AWS WAF 经典版”,请将其选中。
-
如果这是您第一次使用 AWS WAF 经典版,请选择转到 AWS WAF 经典版,然后选择配置 Web ACL。
如果您以前使用过 AWS WAF Classic,请在导航窗格 ACLs中选择 Web,然后选择创建 Web ACL。
在 Name web ACL (命名 web ACL) 页面上,对于 Web ACL name (Web ACL 名称),输入一个名称。
注意
web ACL 在创建之后无法更改名称。
对于 CloudWatch metric name (&CW; 指标名称),输入一个名称。该名称只能包含字母数字字符(A-Z、a-z、0-9),且不能包含空格。
注意
web ACL 在创建之后无法更改名称。
-
对于区域,选择一个区域。如果要将此 Web ACL 与 CloudFront 分配相关联,请选择全局 (CloudFront)。
对于要关联的AWS 资源,选择要与 web ACL 关联的资源,然后选择下一步。
步骤 3:创建 IP 匹配条件
IP 匹配条件指定请求的来源 IP 地址或 IP 地址范围。在此步骤中,您将创建一个 IP 匹配条件。在后面的步骤中,您会指定是允许还是阻止源自指定 IP 地址的请求。
注意
有关 IP 匹配条件的更多信息,请参阅 使用 IP 匹配条件。
创建 IP 匹配条件
-
在创建条件页面上,对于 IP 匹配条件,选择创建条件。
-
在创建 IP 匹配条件对话框中,对于名称,输入一个名称。该名称只能包含字母数字字符(A-Z、a-z、0-9)或以下特殊字符:_-!"#`+*},./。
-
对于地址,输入 192.0.2.0/24。此 IP 地址范围(采用 CIDR 表示法指定)包含从 192.0.2.0 到 192.0.2.255 的 IP 地址。(192.0.2.0/24 IP 地址范围保留供示例使用,因此不会有 Web 请求源自这些 IP 地址。)
AWS WAF Classic 支持 IPv4 地址范围:/8 以及介于 /16 到 /32 之间的任何范围。 AWS WAF Classic 支持 IPv6 地址范围:/24、/32、/48、/56、/64 和 /128。(要指定一个 IP 地址,如 192.0.2.44,请输入 192.0.2.44/32。) 不支持其他范围。
有关 CIDR 表示法的更多信息,请参阅维基百科条目 Classless Inter-Domain Routing
。 -
选择创建。
步骤 4:创建地理匹配条件
地理匹配条件指定请求源自的一个或多个国家/地区。在此步骤中,您将创建一个地理匹配条件。在后面的步骤中,您会指定是允许还是阻止源自指定国家/地区的请求。
注意
有关地理匹配条件的更多信息,请参阅 使用地理匹配条件。
创建地理匹配条件
-
在创建条件页面上,对于地理匹配条件,选择创建条件。
-
在创建地理匹配条件对话框中,对于名称,输入一个名称。该名称只能包含字母数字字符(A-Z、a-z、0-9)或以下特殊字符:_-!"#`+*},./。
-
选择位置类型和国家/地区。目前,位置类型只能是国家/地区。
-
选择添加位置。
-
选择创建。
步骤 5:创建字符串匹配条件
字符串匹配条件用于标识您希望 AWS WAF Classic 在请求中搜索的字符串,例如标头或查询字符串中的指定值。字符串通常由可打印 ASCII 字符组成,但您可以指定从十六进制 0x00 到 0xFF(十进制 0 到 255)的任何字符。在此步骤中,您将创建一个字符串匹配条件。在后面的步骤中,您会指定是允许还是阻止包含指定字符串的请求。
注意
有关字符串匹配条件的更多信息,请参阅 使用字符串匹配条件。
创建字符串匹配条件
在创建条件页面上,对于字符串和正则表达式匹配条件,选择创建条件。
在创建字符串匹配条件对话框中,输入下列值:
- Name
输入名称。该名称只能包含字母数字字符(A-Z、a-z、0-9)或以下特殊字符:_-!"#`+*},./。
- Type
选择字符串匹配。
- Part of the request to filter on
选择您希望 C AWS WAF lassic 检查指定字符串的 Web 请求部分。
对于此示例,选择标头。
注意
如果您选择正文作为要筛选的请求部分的值,C AWS WAF lassic 将仅检查前 8192 字节 (8 KB),因为仅 CloudFront 转发前 8192 字节进行检查。要允许或阻止正文长度超过 8192 个字节的请求,可以创建大小约束条件。(AWS WAF Classic 从请求标头中获取正文的长度。) 有关更多信息,请参阅 使用大小约束条件。
- Header(在“Part of the request to filter on”为“Header”时是必需的)
由于您为要筛选的部分请求选择了标头,因此必须指定希望 C AWS WAF lassic 检查哪个标头。输入用户代理。(此值不区分大小写。)
- 匹配类型
选择指定字符串必须出现在用户代理标头中的何处,例如,字符串开头、末尾还是其他什么地方。
在此示例中,选择 “完全匹配”,这表示 AWS WAF Classic 会检查 Web 请求中是否存在与您指定的值相同的标头值。
- 转换
为了绕过 AWS WAF Classic,攻击者在网络请求中使用不寻常的格式,例如,添加空格或对部分或全部请求进行网址编码。转换会通过删除空格、通过对请求进行 URL 解码或是通过执行可消除攻击者常用的许多不寻常格式的其他操作,将 Web 请求转换为更标准的格式。
您只能指定一个类型的文本转换。
对于此示例,选择 None。
- 值采用 base64 编码
当您在要匹配的值中输入的值已进行了 base64 编码时,选中此复选框。
对于此示例,不要选中此复选框。
- 要匹配的值
指定您希望 AWS WAF Classic 在 Web 请求的部分中搜索的值,这些请求是您在请求的一部分中筛选的。
对于此示例,请输入BadBot。 AWS WAF Classic 将检查 Web 请求中的
User-Agent标头以获取该值BadBot。要匹配的值的最大长度是 50 个字符。如果您要指定 base64 编码值,您可以提供最多 50 个字符(编码前)。
如果您希望 AWS WAF Classic 检查网络请求中是否有多个值,例如包含的
User-Agent标头BadBot和包含的查询字符串BadParameter,则有两种选择:如果您希望仅当 Web 请求同时包含两个值 (
AND) 时才允许或阻止请求,则为每个值创建一个字符串匹配条件。如果您希望在 Web 请求包含任意一个值或同时包含两个值 (
OR) 时允许或阻止请求,则将两个值添加到同一个字符串匹配条件。
对于此示例,选择创建。
步骤 5A:创建正则表达式条件(可选)
正则表达式条件是一种字符串匹配条件,其类似之处在于它标识您希望 AWS WAF Classic 在请求中搜索的字符串,例如标头或查询字符串中的指定值。主要区别在于,您使用正则表达式 (regex) 来指定希望 C AWS WAF lassic 搜索的字符串模式。在此步骤中,您将创建一个正则表达式匹配条件。在后面的步骤中,您会指定是允许还是阻止包含指定字符串的请求。
注意
有关正则表达式匹配条件的更多信息,请参阅 使用正则表达式匹配条件。
创建正则表达式匹配条件
在创建条件页面上,对于字符串匹配和正则表达式条件,选择创建条件。
在 创建字符串匹配条件 对话框中,输入下列值:
- Name
输入名称。该名称只能包含字母数字字符(A-Z、a-z、0-9)或以下特殊字符:_-!"#`+*},./。
- Type
选择 RegEx 匹配。
- Part of the request to filter on
选择您希望 C AWS WAF lassic 检查指定字符串的 Web 请求部分。
对于此示例,选择正文。
注意
如果您选择正文作为要筛选的请求部分的值,C AWS WAF lassic 将仅检查前 8192 字节 (8 KB),因为仅 CloudFront 转发前 8192 字节进行检查。要允许或阻止正文长度超过 8192 个字节的请求,可以创建大小约束条件。(AWS WAF Classic 从请求标头中获取正文的长度。) 有关更多信息,请参阅 使用大小约束条件。
- 转换
为了绕过 AWS WAF Classic,攻击者在网络请求中使用不寻常的格式,例如,添加空格或对部分或全部请求进行网址编码。转换会通过删除空格、通过对请求进行 URL 解码或是通过执行可消除攻击者常用的许多不寻常格式的其他操作,将 Web 请求转换为更标准的格式。
您只能指定一个类型的文本转换。
对于此示例,选择 None。
- 与请求匹配的正则表达式模式
选择创建正则表达式模式集。
- 新模式集名称
输入名称,然后指定您希望 Cl AWS WAF assic 搜索的正则表达式模式。
接下来,输入正则表达式 I [a@] maB [a@] dRequest。 AWS WAF Classic 将检查 Web 请求中的
User-Agent标头中的值:我是ABad请求
IamAB@dRequest
我 @m ABad 请求
I@mAB@dRequest
选择创建模式集和添加筛选条件。
选择创建。
步骤 6:创建 SQL 注入匹配条件
SQL 注入匹配条件用于标识您希望 C AWS WAF lassic 检查的部分 Web 请求中是否存在恶意 SQL 代码,例如标头或查询字符串。攻击者使用 SQL 查询从数据库中提取数据。在此步骤中,您将创建一个 SQL 注入匹配条件。在后面的步骤中,您会指定是允许还是阻止表现为包含恶意 SQL 代码的请求。
注意
有关字符串匹配条件的更多信息,请参阅 使用 SQL 注入匹配条件。
创建 SQL 注入匹配条件
在创建条件页面上,对于 SQL 注入匹配条件,选择创建条件。
在创建 SQL 注入匹配条件对话框中,输入下列值:
- Name
输入名称。
- Part of the request to filter on
选择您希望 C AWS WAF lassic 检查恶意 SQL 代码的 Web 请求部分。
对于此示例,选择查询字符串。
注意
如果您选择正文作为要筛选的请求部分的值,C AWS WAF lassic 将仅检查前 8192 字节 (8 KB),因为仅 CloudFront 转发前 8192 字节进行检查。要允许或阻止正文长度超过 8192 个字节的请求,可以创建大小约束条件。(AWS WAF Classic 从请求标头中获取正文的长度。) 有关更多信息,请参阅 使用大小约束条件。
- 转换
对于此示例,选择 URL 解码。
攻击者使用不寻常的格式,例如 URL 编码,试图绕过 AWS WAF Classic。URL 解码选项可在 AWS WAF Classic 检查 Web 请求之前消除请求中的一些这类格式。
您只能指定一个类型的文本转换。
选择创建。
选择下一步。
步骤 7:(可选)创建其他条件
AWS WAF Classic 包括其他条件,包括:
大小限制条件-标识您希望 C AWS WAF lassic 检查长度的 Web 请求部分,例如标题或查询字符串。有关更多信息,请参阅 使用大小约束条件。
跨站点脚本匹配条件-标识要 AWS WAF 检查恶意脚本的 Web 请求部分,例如标题或查询字符串。有关更多信息,请参阅 使用跨站点脚本匹配条件。
您可以选择现在创建这些条件,也可以跳到 步骤 8:创建规则并添加条件。
步骤 8:创建规则并添加条件
您可以创建一条规则来指定您希望 AWS WAF Classic 在 Web 请求中搜索的条件。如果您向规则添加多个条件,则 Web 请求必须匹配规则中的所有条件,Cl AWS WAF assic 才能根据该规则允许或阻止请求。
注意
有关规则的更多信息,请参阅 使用规则。
创建规则并添加条件
在创建规则页面上,选择创建规则。
在创建规则对话框中,键入下列值:
- Name
输入名称。
- CloudWatch 指标名称
输入 C AWS WAF lassic 将创建并与规则关联的 CloudWatch 指标的名称。该名称只能包含字母数字字符(A-Z、a-z、0-9),且不能包含空格。
- 规则类型
选择常规规则或基于速率的规则。基于速率的规则与常规规则基本相同,但还考虑到任何五分钟时段来自标识的 IP 地址的请求数。有关这些规则类型的更多信息,请参阅 AWS WAF 经典版的工作原理。对于此示例,请选择
Regular rule。- 速率限制
对于基于速率的规则,请输入与规则条件匹配的 IP 地址在任何五分钟内允许的最大请求数。
-
对于要添加到规则的第一个条件,指定以下设置:
-
根据网络请求是否符合条件中的设置,选择您希望 Cl AWS WAF assic 允许还是阻止请求。
对于此示例,选择 does。
-
选择您要添加到规则的条件的类型:IP 匹配集条件、字符串匹配集条件或 SQL 注入匹配集条件。
对于此示例,选择 originate from IP addresses in。
-
选择要添加到规则的条件。
对于此示例,选择您在前面的任务中创建的 IP 匹配条件。
-
选择添加条件。
添加您之前创建的地理匹配条件。指定以下值:
When a request does
originate from a geographic location in
选择您的地理匹配条件。
选择添加另一个条件。
添加您之前创建的字符串匹配条件。指定以下值:
When a request does
match at least one of the filters in the string match condition
选择您的字符串匹配条件。
选择添加条件。
添加您之前创建的 SQL 注入匹配条件。指定以下值:
When a request does
match at least one of the filters in the SQL injection match condition
选择您的 SQL 注入匹配条件。
选择添加条件。
添加您之前创建的大小约束条件。指定以下值:
When a request does
match at least one of the filters in the size constraint condition
选择您的大小约束条件。
如果您创建了任何其他条件(如正则表达式条件),以类似方式添加这些条件。
选择创建。
对于默认操作,选择允许不与任何规则匹配的所有请求。
选择检查并创建。
步骤 9:将规则添加 Web ACL
向 Web ACL 中添加规则时,您可指定以下设置:
您希望 AWS WAF Classic 对符合规则中所有条件的 Web 请求执行的操作:允许、阻止或计算请求。
Web ACL 的默认操作。这是您希望 AWS WAF Classic 对不符合规则中所有条件的 Web 请求采取的操作:允许或阻止请求。
AWS WAF Classic 开始屏蔽符合以下所有条件(以及您可能已添加的任何其他条件)的 CloudFront Web 请求:
User-Agent标头的值是BadBot(如果您创建并添加了正则表达式条件)
Body的值是四个字符串中与模式I[a@]mAB[a@]dRequest匹配的任一个字符串请求源自 192.0.2.0-192.0.2.255 范围中的 IP 地址
请求源自您在地理匹配条件中所选的国家/地区
请求表现为在查询字符串中包含恶意 SQL 代码
AWS WAF Classic CloudFront 允许响应任何不符合这三个条件的请求。
步骤 10:清除资源
现在您已成功完成了教程。为了防止您的账户产生额外的 AWS WAF 经典版费用,您应该清理您创建的 AWS WAF 经典版对象。或者,您可以更改配置以便与您确实要进行允许、阻止和计数的 Web 请求匹配。
注意
AWS 对于您在本教程中创建的资源,每天向您收取的费用通常少于 0.25 美元。完成后,建议您删除资源以防止产生不必要的费用。
删除 C AWS WAF lassic 收费的对象
取消您的 Web ACL 与您的 CloudFront 分配的关联:
登录 AWS 管理控制台 并打开 AWS WAF 控制台,网址为https://console.aws.amazon.com/wafv2/
。 如果您在导航窗格中看到 “切换到 AWS WAF 经典版”,请将其选中。
选择要删除的 web ACL 的名称。然后将打开一个页面,其右侧窗格会显示 Web ACL 的详细信息。
-
在右窗格中,在规则选项卡上,转到使用此 Web ACL 的AWS 资源部分。对于与 Web ACL 关联的 CloudFront 分发,请在 “类型” 列中选择 x。
从规则中删除条件:
在导航窗格中,选择规则。
选择在教程中创建的规则。
选择编辑规则。
选择每个条件标题右侧的 x。
选择更新。
从 Web ACL 中删除规则,然后删除 Web ACL:
在导航窗格中,选择 Web ACLs。
选择在教程中创建的 Web ACL 名称。然后将打开一个页面,其右侧窗格会显示 Web ACL 的详细信息。
在规则选项卡上,选择编辑 web ACL。
选择规则标题右侧的 x。
选择操作,然后选择删除 web ACL。
删除规则:
在导航窗格中,选择规则。
选择在教程中创建的规则。
选择删除。
在删除对话框中,再次选择删除以确认。
AWS WAF Classic 不对条件收费,但如果您想完成清理,请执行以下步骤从条件中移除筛选条件并删除条件。
删除筛选条件和条件
删除 IP 匹配条件中的 IP 地址范围,然后删除 IP 匹配条件:
在 AWS WAF 经典版控制台的导航窗格中,选择 IP 地址。
选择在教程中创建的 IP 匹配条件。
选中您添加的 IP 地址范围的复选框。
选择删除 IP 地址或范围。
在 IP 匹配条件窗格中,选择删除。
在删除对话框中,再次选择删除以确认。
删除 SQL 注入匹配条件中的筛选条件,然后删除 SQL 注入匹配条件:
在导航窗格中,选择 SQL 注入。
选择在教程中创建的 SQL 注入匹配条件。
选中您添加的筛选条件的复选框。
选择删除筛选器。
在 SQL 注入匹配条件窗格中,选择删除。
在删除对话框中,再次选择删除以确认。
删除字符串匹配条件中的筛选条件,然后删除字符串匹配条件:
在导航窗格中,选择字符串和正则表达式匹配。
选择在教程中创建的字符串匹配条件。
选中您添加的筛选条件的复选框。
选择删除筛选器。
在字符串匹配条件窗格中,选择删除。
在删除对话框中,再次选择删除以确认。
如果您创建了一个,请删除正则表达式匹配条件中的筛选条件,然后删除正则表达式匹配条件:
在导航窗格中,选择字符串和正则表达式匹配。
选择在教程中创建的正则表达式匹配条件。
选中您添加的筛选条件的复选框。
选择删除筛选器。
在正则表达式匹配条件窗格中,选择删除。
在删除对话框中,再次选择删除以确认。
删除大小约束条件中的筛选条件,然后删除大小约束条件:
在导航窗格中,选择大小约束。
选择在教程中创建的大小约束条件。
选中您添加的筛选条件的复选框。
选择删除筛选器。
在大小约束条件窗格中,选择删除。
在删除对话框中,再次选择删除以确认。