如何使用 AWS WAF 缓解 DDoS 攻击?

上次更新日期:2022 年 7 月 27 日

如何使用 AWS WAF 帮助防止分布式拒绝服务(DDoS)攻击?

简短描述

DDoS 攻击是指攻击者企图破坏目标系统的可用性。

对于基础设施层攻击,您可以使用 Amazon CloudFront 和弹性负载均衡器(ELB)等 AWS 服务提供自动 DDoS 防护。有关更多信息,请参阅关于 DDoS 弹性的 AWS 最佳实践

对于应用程序层攻击,您可以使用 AWS WAF 作为主要缓解措施。AWS WAF Web 访问控制列表(Web ACL)最大限度地减少了 DDoS 攻击对应用程序层的影响。要缓解攻击,请执行以下操作:

  • 使用基于速率的规则。
  • 查看现有基于速率的规则,并考虑降低速率限制阈值以阻止不良请求。
  • 查询 AWS WAF 日志以收集未经授权活动的特定信息。
  • 创建地理匹配规则,以阻止来自您的业务不需要的国家/地区的不良请求。
  • 创建 IP 集匹配规则,以根据 IP 地址阻止不良请求。
  • 创建正则表达式匹配规则以阻止不良请求。

解决方法

使用基于速率的规则

您可以创建一揽子规则或特定于 URI 的基于速率的规则,以保护您的 Web 应用程序免受 DDoS 攻击。有关更多信息,请参阅 The three most important AWS WAF rate-based rules

从 AWS WAF 控制台创建基于速率的一揽子规则

基于速率的一揽子规则允许您设置 IP 可以向 Web 应用程序发出的请求数量阈值。

  1. 打开 AWS WAF 控制台
  2. 选择未定义 RBR 的 Web ACL,然后选择 Rate-based rule(基于速率的规则)。
  3. 为规则输入 Name(名称)。
  4. 输入 Rate limit(速率限制)。速率限制是任何五分钟内允许从任何单个 IP 地址发出的最大请求数。达到此限制后,基于速率的规则操作将应用于 IP 地址。当来自该 IP 地址的请求数在此限制范围内时,该操作将停止。
    注意:速率限制阈值表示有多少来自单个 IP 地址的请求被视为过多且可能是恶意的。如果不设置限制,您可能会阻止友好请求。如果您不确定要设置什么限制,最佳做法是设置规则操作来计数和监控您的请求模式。
  5. 对于 IP address to use for rate limiting(用于速率限制的 IP 地址),请选择 Source IP address(源 IP 地址)或 IP address in header(标头中的 IP 地址)。

    IP address in header(标头中的 IP 地址):当请求通过 CDN 或其他代理网络传送时,源 IP 地址会识别代理,并在标头中发送原始 IP 地址。使用 IP address in header(标头中的 IP 地址)选项时要小心,因为代理对标头的处理可能不一致。而且,可以修改标头以绕过检查。

    Source IP address(源 IP 地址):对于 Criteria to count request towards rate limit(将请求计入速率限制的标准),请选择 count requests that match the criteria of a rule statement(计算符合规则语句条件的请求)。
  6. 将规则操作设置为在 IP 地址的请求数超过限制时对来自该 IP 地址的请求进行计数或阻止。应用和删除规则操作可能会在 IP 地址请求速率更改一两分钟后生效。
  7. 选择 Add Rule(添加规则)。
  8. 选择 Next(下一步)。

有关创建基于速率的规则语句的信息,请参阅基于速率的规则语句

从 AWS WAF 控制台创建特定于 URI 的基于速率的规则

  1. 打开 AWS WAF 控制台
  2. 选择未定义基于速率的规则的 Web ACL,然后选择 Rate-based rule(基于速率的规则)。
  3. 为规则输入 Name(名称)。
  4. 输入 Rate limit(速率限制)。
  5. 对于 IP address to use for rate limiting(用于速率限制的 IP 地址),请选择 Source IP address(源 IP 地址)或 IP address in header(标头中的 IP 地址)。
  6. 对于 Criteria to count request towards rate limit(将请求计入速率限制的标准),请选择 Only consider requests that match the criteria in a rule statement(仅考虑符合规则语句中标准的请求)。
  7. 使用以下变量创建 Statement(语句):
    对于 Inspect(检查),选择 URI path(URI 路径)。
    对于 Match type(匹配类型),选择 Exactly matches string(完全匹配字符串)。
    对于 String to match(要匹配的字符串),请输入 /login。您可以选择特定于您的应用程序的 URI。
    对于 Text transformation(文本转换),请将其保留为 None(无)。
  8. 将规则操作设置为在 IP 地址的请求数超过限制时对来自该 IP 地址的请求进行计数或阻止
  9. 选择 Add Rule(添加规则)。
  10. 选择 Next(下一步)。

查看现有基于速率的规则,并考虑降低速率限制阈值以阻止不良请求

要在控制台中修改现有的基于速率的规则,请执行以下操作:

  1. 打开 AWS WAF 控制台
  2. 选择 Web ACL 并选择现有的基于速率的规则。
  3. 根据需要降低 Rate limit threshold(速率限制阈值)。
  4. Rule action(规则操作)设置为 Block(阻止)。
  5. 选择 Save rule(保存规则)。
  6. 选择 Next(下一步)。

有关更多信息,请参阅基于速率的规则语句

考虑缩小根据基于速率的规则跟踪和计数的请求的范围

要缩小 AWS WAF 跟踪和计数的请求的范围,请在基于速率的语句中使用范围缩小语句。然后,AWS WAF 会对与缩小范围语句匹配的请求进行计数。

示例

根据来自美国的攻击者的近期请求,您可以使用以下范围缩小语句创建基于速率的规则:

  1. 地理匹配匹配语句,它指定来自美国的请求。
  2. 字符串匹配语句,用于在用户代理标头中搜索字符串 Badbot。

假设您将速率限制设置为 1000。对于每个 IP 地址,AWS WAF 会计算符合这两条嵌套语句标准的请求数量。不符合这两个语句的请求不计算在内。如果 IP 地址请求计数在任何 5 分钟时间跨度内超过 1000 个,则会触发针对该 IP 地址的规则操作。

要在控制台中将使用此示例的范围缩小语句添加到基于速率的规则中,请执行以下操作:

  1. 打开 AWS WAF 控制台
  2. 选择 Web ACL 并选择现有的基于速率的规则。
  3. 对于 Criteria to count requests towards rate limit(将请求计入速率限制的标准),请选择 only requests that match the criteria in rule statement(仅符合规则语句中标准的请求)。
  4. 只计算与以下语句匹配的请求:
    如果请求匹配所有语句(AND)
    语句 1
    Inspect(检查):选择 Originates from a country in(来源国家/地区)。
    Country Codes(国家/地区代码):选择 United States-US(美国 – US)。
    IP address to use for rate limiting(用于速率限制的 IP 地址):选择 Source IP address(源 IP 地址)或 IP address in header(标头中的 IP 地址)。

    –和–

    语句 2
    Inspect(检查):选择 Single Header(单标头)。
    Header field name(标头字段名称):输入 User-Agent(用户代理)。
    Match type(匹配类型):选择 Exactly matches string(完全匹配字符串)。
    String to match(要匹配的字符串):输入 Badbot
  5. 选择 Save Rule(保存规则)。
  6. 选择 Next(下一步)。

查询 AWS WAF 日志以收集未经授权活动的特定信息

如果您尚未这样做,请确保您已启用 AWS WAF 日志记录

为 Web ACL 启用日志记录以分析流量后,请查询 AWS WAF 日志以调查 DDoS 情景。您可以使用以下命令查询 AWS WAF 日志:

使用 Amazon Athena 日志分析器或 AWS Lambda 日志分析器

基于速率的规则允许您指定在后续持续更新的五分钟内允许来自任何单个 IP 地址的 Web 请求的最大数量。如果一个 IP 地址违反配置的限制,系统将阻止新请求,直到请求速率降至配置的阈值以下。基于速率的规则的最小可接受速率限制值为 100。

如果由于允许的最低阈值而无法使用基于速率的规则,请考虑使用 AWS WAF Automation 中提供的 Athena 日志分析器或 Lambda 日志分析器实现。对于基于速率的规则,默认阻止期限为 240 秒。Athena 和 Lambda 日志分析器都允许您选择阻止适用 IP 地址的时段(以分钟为单位)。

Athena 和 Lambda 日志分析器实现具有以下参数:

  • Request threshold(请求阈值):每个 IP 地址每五分钟可接受的最大请求数。
  • Block period(阻止期限):阻止适用 IP 地址的时间段(以分钟为单位)。

这两种解决方案都允许您在预置或更新 AWS CloudFormation 堆栈时定义参数。

当基于速率的规则或 Athena 日志分析器不可用时,请使用 Lambda 日志分析器。有关更多信息,请参阅 AWS Lambda 日志分析器

请注意,使用 Athena 日志分析器时成本会增加。使用此选项进行 HTTP 泛洪攻击防护时,您需要支付 Athena 使用费。默认情况下,每个 Athena 查询每五分钟运行一次,并扫描过去四小时的数据。会将分区应用于日志和 Athena 查询以保持较低成本。您可以通过更改 WAF Block Period(WAF 阻止期限)模板参数的值来配置查询扫描数据的小时数。但是,增加扫描的数据量可能会增加 Athena 成本。

有关更多信息,请参阅 Amazon Athena 成本估算

创建地理匹配规则,以阻止来自您的业务不需要的国家/地区的不良请求

创建一个或多个地理匹配规则语句以允许或阻止基于来源国家/地区的 Web 请求。

要在 AWS WAF 控制台中创建地理匹配规则,请执行以下操作:

  1. 打开 AWS WAF 控制台
  2. 选择 Web ACL,选择 Regular rule(常规规则),然后创建 Geo Match(地理匹配)规则。
  3. Request options(请求选项)中,选择 originates from a country in(来源国家/地区),然后从下拉列表中选择一个或多个国家/地区代码。
  4. 将规则 操作设置为 BLOCK(阻止)。
  5. 选择 Add rule(添加规则)。

创建 IP 集匹配规则,以根据 IP 地址阻止不良请求

创建 IP 集匹配规则语句,以根据请求来自的 IP 地址允许或阻止 Web 请求。IP 匹配条件最多可列出 10000 个您的请求源自的 IP 地址或 IP 地址范围。在此过程的后期,当您创建 Web ACL 时,可以指定允许或阻止来自这些 IP 地址的请求。

要在 AWS WAF 控制台中创建 IP 匹配规则,请执行以下操作:

  1. 打开 AWS WAF 控制台
  2. 创建 IP 集并将 IP 地址添加到列表中。
  3. 选择 Web ACL,然后依次选择 Regular rule(常规规则)和 create an IP match rule(创建 IP 匹配规则)。
  4. Request options(请求选项)中,选择 originates from an IP address in(源自的 IP 地址),然后选择在步骤 2 中创建的 IP 集。
  5. 将规则操作设置为 BLOCK(阻止)。
  6. 选择 Add Rule(添加规则)。

有关更多信息,请参阅创建和管理 IP 集

创建字符串匹配规则以阻止不良请求

在 DDoS 攻击期间,通常没有一个源 IP,因此很难根据单个或几个 IP 地址进行筛选。在这种情况下,评估请求的所有部分以确定良好请求和不良请求之间的任何区别模式,这一点非常重要。创建字符串匹配规则正则表达式匹配规则是阻止不良请求的有效方法。

例如,如果不良请求来自“User-Agent: BadBot”,可以根据标头详细信息创建字符串匹配规则。

要在 AWS WAF 控制台中创建字符串匹配规则,请执行以下操作:

  1. 打开 AWS WAF 控制台
  2. 选择 Web ACL,然后依次选择 Regular rule(常规规则)和 create a String Match rule(创建字符串匹配规则)。
  3. 在 request options(请求选项)下,选择以下选项:
    对于 Inspect(检查),选择 Header(标头)。
    对于 Header field name(标头字段名称),输入 User-Agent(用户代理)。
    对于 Match Type(匹配类型),选择 Exactly matches string(完全匹配字符串)。
    对于 String to Match(要匹配的字符串),输入 BadBot
  4. 将规则 操作设置为 BLOCK(阻止)。
  5. 选择 Add rule(添加规则)。

创建正则表达式匹配规则以阻止不良请求

正则表达式匹配规则语句指示 AWS WAF 将请求组件与单个正则表达式(regex)进行匹配。如果请求组件与您指定的正则表达式匹配,则 Web 请求与该语句匹配。

要在 AWS WAF 控制台中创建正则表达式匹配规则,请执行以下操作:

  1. 打开 AWS WAF 控制台
  2. 选择 Web ACL,然后依次选择 Regular rule(常规规则)和 create a String Match rule(创建字符串匹配规则)。
  3. 在 request options(请求选项)下,选择以下选项:
    对于 Inspect(检查),选择 URI path(URI 路径)。
    对于 Match type(匹配类型),选择 Matches regular expression(匹配正则表达式)。
    对于 String to match(要匹配的字符串),请输入正则表达式。
  4. 将规则 操作设置为 BLOCK(阻止)。
  5. 选择 Add rule(添加规则)。

这篇文章对您有帮助吗?


您是否需要账单或技术支持?