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

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

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

由 Louis Hourcade 创作 () AWS

代码存储库:aws 示例中的 Github 存储库

环境:PoC 或试点

技术:安全、身份、合规;Web 和移动应用程序

AWS服务:AWSCDK; AWS WAF

Summary

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

您可以将以下类型的规则关联到您的 AWS WAF 网站ACLs:

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

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

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

先决条件和限制

先决条件

限制

工具

AWS 服务

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

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

代码存储库

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

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

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

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

  • 核心规则集 (CRS)-此规则组包含通常适用于 Web 应用程序的规则。它有助于防止各种漏洞被利用,包括OWASP出版物中描述的一些高风险漏洞和常见漏洞,例如OWASP排名前十的漏洞。

  • 管理员保护-此规则组包含可帮助您阻止外部访问公开的管理页面的规则。

  • 已知的错误输入 — 此规则组可帮助阻止已知无效且与漏洞利用或发现相关的请求模式。

  • Amazon IP 信誉列表-此规则组包含基于亚马逊内部威胁情报的规则。它可以帮助您屏蔽通常与机器人或其他威胁相关的 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是目标的 ID AWS 账户。

    • region是 Web 上API网ACL关资源的目标 AWS 区域 。

      注意: CloudFront 资源网站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. 如果您要在除之外的区域ACL为 API Gateway 部署 Webus-east-1,请输入以下命令来引导目标区域:

    cdk bootstrap aws://<account-id>/<region>
将军 AWS

部署 AWS CDK 应用程序。

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

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

将军 AWS
任务描述所需技能

确认 Web ACLs 已成功部署。

  1. 登录 AWS Management Console,然后打开AWS WAF 控制台

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

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

  4. 验证新 CloudFront 网站是否ACL已部署,并确认其具有您定义的 IP 地址和地理定位规则。该网站的默认名称ACL是WebACLCloudfront-<ID>

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

  6. 确认已ACL为API网关资源部署了新的 Web。确认它具有您定义的 IP 地址和地理定位规则。该网站的默认名称ACL是WebACLApiGW-<ID>

将军 AWS

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

将 AWS WAF Web ACLs 与您的 AWS 资源(例如 Application Load Balancer、API Gateway 或 CloudFront 分配)相关联。有关说明,请参阅将网站ACL与资源关联或取消关联。AWS有关示例,请参阅 AWS CDK 文档中的类 CfnWebACLAssociation(构造)

将军 AWS
任务描述所需技能

删除堆栈。

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

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

    cdk destroy --all
将军 AWS

相关资源