使用 AWS WAF 根据 IP 地址或地理位置限制访问 - AWS Prescriptive Guidance

使用 AWS WAF 根据 IP 地址或地理位置限制访问

Louis Hourcade,Amazon Web Services

摘要

AWS WAF 是一款 Web 应用程序防火墙,有助于保护 Web 应用程序和 API 免受常见的 Web 漏洞和机器人攻击,这些威胁会影响可用性、危及安全性并消耗过多资源。AWS WAF 中的 Web 访问控制列表(Web ACL)让您能够控制流量如何到达您的应用程序。在 Web ACL 中,您可以添加旨在允许合法流量、控制机器人流量和阻止常见攻击模式的规则或规则组。有关更多信息,请参阅 AWS WAF 的工作原理

您可以将以下规则类型与您的 AWS WAF Web ACL 关联:

  • 托管规则组 ‒ AWS 托管规则团队和 AWS Marketplace 卖家提供预配置的规则集。某些托管规则组旨在帮助保护特定类型的 Web 应用程序。还有些提供针对已知威胁或常见漏洞的广泛保护。

  • 自定义规则自定义规则组 – 您还可以创建规则和规则组,以自定义对您的 Web 应用程序和 API 的访问权限。例如,您可以根据特定的 IP 地址列表或国家/地区列表来限制流量。

通过使用此模式和关联的代码存储库,您可以使用 AWS Cloud Development Kit (AWS CDK) 来部署带有自定义规则的 AWS WAF Web ACL。这些规则根据最终用户的 IP 地址或地理位置限制对 Web 应用程序资源的访问。您也可以选择附加多个托管规则组。

先决条件和限制

先决条件

限制

工具

AWS 服务

  • AWS Cloud Development Kit (AWS CDK) 是一个软件开发框架,可帮助您在代码中定义和预调配 AWS 云 基础设施。

  • AWS WAF 是一种 Web 应用程序防火墙,可帮助您监控转发至受保护 Web 应用程序资源的 HTTP 和 HTTPS 请求。

代码存储库

此模式的代码可在 GitHub AWS WAF 的IP 和地理位置限制存储库中找到。该代码部署两个 AWS WAF Web ACL。第一个是专为 Amazon API Gateway 资源设计的区域网络 ACL。第二个是 Amazon CloudFront 资源的全局 Web ACL。两个 Web ACL 都包含以下自定义规则:

  • IPMatch 阻止来自不允许的 IP 地址的请求。

  • GeoMatch 阻止来自不允许的国家/地区的请求。

在部署期间,您可以选择将以下所有托管规则组附加到 Web ACL:

  • 核心规则集(CRS)– 此规则组包含通常适用于 Web 应用程序的规则。它有助于防止利用各种漏洞,包括 OWASP 出版物(如 OWASP Top 10)中描述的一些高风险和经常发生的漏洞。

  • 管理保护 – 此规则组包含有助于您阻止对公开的管理页面进行外部访问的规则。

  • 已知错误输入 ‐ 此规则组帮助阻止请求模式,这些模式确认无效且与漏洞攻击或发现相关联。

  • Amazon IP 声誉列表 – 此规则组包含基于 Amazon 内部威胁情报的规则。它可以帮助您阻止通常与机器人或其他威胁关联的 IP 地址。

  • Linux 操作系统托管规则组 – 此规则组有助于阻止请求模式,这些请求模式与利用 Linux 漏洞(包括 Linux 特定的本地文件包含(LFI)攻击)相关。

  • SQL 数据库托管规则组 – 此规则组有助于阻止与 SQL 数据库的漏洞利用相关的请求模式,例如 SQL 注入攻击。

操作说明

任务描述所需技能

克隆存储库。

输入以下命令,将 AWS WAF 的 IP 和地理定位限制存储库克隆到本地工作站:

git clone https://github.com/aws-samples/ip-and-geolocation-restriction-with-waf-cdk.git
Git

配置规则。

  1. 在克隆的存储库中,打开 app.py 文件。

  2. 修改以下变量的值以自定义规则:

    aws_acccount = "AWS_ACCOUNT" region = "AWS_REGION" ip_list = ["CIDR_RANGE_1", "CIDR_RANGE_2"] geo_list = ["COUNTRY_CODE_1", "COUNTRY_CODE_2"] aws_managed_rules = True

    其中:

    • aws_account 是目标 AWS 账户 的 ID。

    • region 是 API Gateway 资源的 Web ACL 的目标 AWS 区域。

      注意

      CloudFront 资源的 Web ACL 是全局项,将部署在 us-east-1 区域。

    • ip_list 是允许访问的 CIDR 范围的列表。

    • geo_list 是允许访问的国家/地区的列表。有关有效值,请参阅 AWS WAF 文档

    • aws_managed_rules 控制是否将托管规则组添加到 Web ACL。如果此值为 True,则添加。如果此值为 False,则排除。

  3. 保存并关闭 app.py 文件。

常规 AWS、Python
任务描述所需技能

引导 AWS 环境。

如果尚未完成此操作,则需要先引导您的 AWS 环境,然后才能部署 AWS CDK 应用程序。

  1. 在 AWS CDK CLI 中,输入以下命令以引导 us-east-1 区域:

    cdk bootstrap aws://<account-id>/us-east-1
  2. 如果您要将 API Gateway 的 Web ACL 部署到 us-east-1 外的其他区域,请输入以下命令来引导目标区域:

    cdk bootstrap aws://<account-id>/<region>
常规 AWS

部署 AWS CDK 应用程序。

  1. 输入以下命令以部署 AWS CDK 应用程序:

    cdk deploy --all
  2. 请等到 AWS CloudFormation 堆栈部署完成。

常规 AWS
任务描述所需技能

确认 Web ACL 已成功部署。

  1. 登录 AWS 管理控制台,然后打开 AWS WAF 控制台

  2. 在导航窗格中,选择 Web ACL

  3. 在 AWS 区域 列表中,选择全局(CloudFront)

  4. 验证新 CloudFront Web ACL 已部署,并确认它具有您定义的 IP 地址和地理定位规则。此 Web ACL 的默认名称为 WebACLCloudfront-<ID>

  5. 在 AWS 区域 列表中,选择在其中部署了堆栈的区域。

  6. 验证已为 API Gateway 资源部署了新 Web ACL。确认它拥有您定义的 IP 地址和地理定位规则。此 Web ACL 的默认名称为 WebACLApiGW-<ID>

常规 AWS

(可选)将 Web ACL 与您的资源关联。

将 AWS WAF Web ACL 与您的 AWS 资源关联,例如应用程序负载均衡器、API Gateway 或 CloudFront 分配。有关说明,请参阅将 Web ACL 与 AWS 资源关联或取消关联。有关示例,请参阅 AWS CDK 文档中的 CfnWebACLAssociation 类(构造)

常规 AWS
任务描述所需技能

删除堆栈。

  1. 取消 Web ACL 与任何 AWS 资源的关联。有关说明,请参阅 AWS WAF 文档

  2. 在 AWS CDK CLI 中,输入以下命令以删除 AWS CDK 应用程序。

    cdk destroy --all
常规 AWS

相关资源