概述
难度:初级
时间:20 分钟
相关产品:Amazon Route 53
上次更新时间:2025 年 3 月 24 日
本文介绍如何使用 Amazon Route 53 Resolver DNS Firewall 来检测恶意域名,并阻止访问恶意域名。我们将介绍如何使用 Amazon Web Services (AWS) 的管理域名列表来实现恶意域名检测。这些域名列表由 AWS 维护,其中包含并不断更新具有恶意行为或潜在威胁的域名。在本文中,我们还将分享将 Route 53 Resolver DNS Firewall 部署到你的环境中的最佳实践。
若不加以防护,恶意域名可能带来严重的安全威胁,导致敏感数据和系统面临重大风险。主动识别并阻止访问恶意域名至关重要,然而传统的域名拒绝列表维护方式往往耗时耗力,且难以应对不断变化的威胁。Amazon Route 53 负责维护管理域名列表,并根据不断变化的威胁情况进行列表更新。通常,AWS 能够在新漏洞和新威胁被公开披露前自动更新相关列表,使 Amazon Route 53 Resolver DNS Firewall 能够主动采取保护措施,从而为用户节省处理相关问题的时间和人力资源。Amazon Route 53 Resolver DNS Firewall 还支持用户构建自定义阻止列表,让用户能够灵活地实施特定的过滤策略和规则。
本文将介绍以下 Amazon Route 53 Resolver DNS Firewall 使用场景:
-
安全团队可以在企业的 Amazon Virtual Private Cloud (VPC) 中实施域名访问限制,以满足安全和合规要求。
-
通过域名停放服务 (Domain Parking),用户可以在将域名接入其平台之前,先通过 AWS 管理的域名列表和自定义阻止列表进行域名验证和筛查。
-
基于安全或合规需求,在 VPC 中实施该解决方案,从而阻止恶意域名并保护工作站。
解决方案概述
全部打开本解决方案介绍包含如何利用 AWS 管理的域名列表与用户的自定义列表,构建一个识别恶意域名的管道 (Pipeline)。我们将主要使用以下 AWS 服务:
- Amazon Route 53 Resolver DNS Firewall,使用 AWS 管理的域名列表和自定义域名列表进行域名查询,并根据定制化的 DNS 查询响应策略,阻止或允许访问某个域名。
- 使用 Amazon API Gateway 创建并发布用于 DNS Firewall 域名查询的 API。
- 使用 Amazon S3 存储输入的 CSV 文件以及域名查询结果。
- 在 VPC 中运行 AWS Lambda 函数。该函数调用 DNS Firewall,根据已配置的规则,执行域名解析,并获取所需的响应数据。
- 通过 Amazon Simple Notification Service (Amazon SNS) 向管理员发送包含域名查询结果的电子邮件通知。
图 1 展示了该解决方案的架构。流程:用户触发 API Gateway,将域名列表上传到 S3 存储桶。VPC 中的 Lambda 函数调用 Amazon Route 53 Resolver DNS Firewall 执行域名查询。Amazon SNS 会立即向管理员发送通知,告知 S3 存储桶内 DNS Firewall 查询结果中标记的可疑域名。使用本解决方案,管理员能够检测并阻止可疑域名。
图1:使用 Amazon Route 53 Resolver DNS Firewall 和其他相关服务的架构流程
本解决方案旨在展示如何结合使用 AWS 管理的域名列表与自定义阻止列表,实时防范恶意域名,无需手动维护域名列表,实现持续的安全防护。通过此解决方案,可以实现自动防护,使 VPC 中的资源免受恶意域名的侵害,借助自动化的威胁检测功能减少安全团队的工作负担,同时利用 AWS 持续更新的威胁情报数据保证应用满足合规要求。
前提条件
全部打开为成功实施该解决方案,需要先完成以下准备工作:
-
如果没有可用的 AWS 账户,请先创建 AWS 账户。
-
了解如何使用 AWS ClouFormation 服务。
创建并上传 dnslib.zip 压缩文件
1. 使用 AWS 账户登录 Cloudshell 并执行以下命令:
-
mkdir python
-
pip install dnspython==2.7.0 -t python
-
zip -r dnslib.zip python
2. 通过以下方式下载已创建的 dnslib.zip 文件:
-
点击 Cloudshell 控制台右上角的 Actions(操作)。
-
选择 Download file(下载文件)选项。
-
输入文件路径,例如 /home/cloudshell-user/dnslib.zip,下载文件。
3. 在想要部署解决方案的 AWS 区域 (Region) 创建一个 S3 存储桶,用于存储 dnslib.zip 文件。
4. 将 dnslib.zip 文件上传至 S3 存储桶。
启动 AWS CloudFormation 堆栈
全部打开可以使用 AWS CloudFormation 来创建环境。可以使用 AWS CloudFormation 模板来设置 API 网关、Lambda 函数、DNS Firewall 规则组、S3 存储桶以及 Amazon SNS VPC 端点。
使用 AWS CloudFormation 模板创建堆栈的操作步骤:
- 点击此处下载示例 AWS CloudFormation 模板。
- 在 AWS 管理控制台上确认当前 Region 为计划部署解决方案的区域。
- 导航至 AWS CloudFormation 控制台。
- 单击 Create stack(创建堆栈)。
- 单击 Choose an existing template(选择现有模板)。
- 单击 Upload a template file(上传模板文件)。
- 单击 Choose File(选择文件),然后选择在第一步下载到本地计算机的 YAML 模板文件。
- 单击 Next(下一步)。
- 在 Stack name(堆栈名称)中输入自定义堆栈名称。
- 配置以下参数:
- DNSFirewallManagedDomainListId:
- 导航至 Amazon Virtual Private Cloud (Amazon VPC)服务控制台,单击 VPC dashboard(VPC 控制面板)。
- 在左侧导航窗格的 DNS Firewall 下,选择 Domain lists(域名列表)。
- 查找名为 “AWSManagedDomainsAggregateThreatList” 的域名列表。
- AWSManagedDomainsAggregateThreatList 的 ID 显示在其名称旁边的 ID 列中。域名列表 ID 通常以“rslvr-fdl-”为前缀,并以该域名列表的唯一标识符作为后缀。
- DNSFirewallManagedDomainListId:
图 2:DNS Firewall 管理的域名列表 ID
- SNSEmailAddress:管理员的电子邮件地址,用于接收恶意域名访问相关的电子邮件。
- DNSLIBS3Bucket:上传 dnslib.zip 文件的 S3 存储桶。
- 为堆栈添加自定义标签,然后点击 Next(下一步)。
- 勾选确认复选框,然后单击 Create stack(创建堆栈)。
堆栈创建过程大约需要 10 分钟。可前往 AWS CloudFormation 控制台的 Resources(资源)选项卡,查看创建的资源状态。
使用默认的 DNS Firewall AWS 管理的域名列表
全部打开步骤 1:将名为 domains.csv 的 CSV 文件(内含待验证是否为恶意域名的域名列表)上传至通过 AWS CloudFormation 堆栈创建的 S3 存储桶 aws-checkdomains-< AWS 账户号> 中。待验证的域名示例,如图 3 所示。
在此示例中,必须将域名列表文件命名为 domains.csv,如果使用其他文件名称,系统将无法识别域名列表。如需更改文件名称,需修改 Lambda 函数 DNSDomainResolutionLambda 的代码。
图 3:domains.csv 文件中待验证是否为恶意域名的域名列表
步骤 2:从 AWS CloudFormation 堆栈的 Outputs(输出)选项卡中,获取通过 API Gateway 发布的 DNS Lookup REST API 的 URL,如图 4 所示。触发该 API 执行 DNS 域名查询从 API Gateway 控制台获取 API Key。可以在请求标头 (Header) 中使用 x-api-key,并将其值设为从 API Gateway 控制台获取的 API Key。可以使用 postman、curl 等工具或自己编写代码来触发 API。
图 4: 在 AWS CloudFormation 输出中查看 API Gateway URL
-
API Gateway 会调用在 VPC 内运行的 Lambda 函数,对 CSV 文件中的域名列表执行 DNS 解析查询。
-
来自 VPC 内部的 DNS 查询请求将根据默认的 DNS Firewall 原生威胁情报机制进行处理。
-
DNS Firewall 收到 DNS 查询请求时,会根据 AWS CloudFormation 堆栈预先配置的规则组、规则和其他设置过滤查询,并将结果返回 Amazon Route 53 Resolver。
-
返回数据保存在存储 dnsanswers.csv 文件的 S3 存储桶中。对于成功解析的域名,Amazon Route 53 Resolver DNS Firewall 返回的状态代码应为 200,而对于在 DNS Firewall 管理的域名列表中标记的恶意域名的域名,返回的状态代码为 5XX(图 5 中显示的状态码 501:根据 AWS 管理的域名列表或用户自定义列表阻止的域名;502:域名不存在或其他错误)。
图 6:域名被阻止的电子邮件通知
-
对于被 DNS Firewall 阻止的 DNS 查询,可以自定义响应内容。有关更多信息,请参阅 Route 53 开发人员指南。
在 DNS Firewall 中使用自定义域名列表
全部打开Amazon Route 53 Resolver DNS Firewall 还支持用户将自己的域名列表上传到 S3 存储桶,然后验证它们是否为恶意域名。在前述示例中,example.com 默认未被识别为恶意域名。可以添加一个自定义恶意域名列表,将其列为恶意域名。
操作步骤
将自定义恶意域名列表添加至 Route 53 DNS Firewall 的操作步骤:
步骤 1:创建一个名为 custom_domains_list.csv 的 CSV 文件,其中包含自定义恶意域名列表,如图 7 所示。
图 7:添加至 DNS Firewall 的自定义域名列表
如果使用其他文件名称,系统将无法识别域名列表。如需更改文件名称,需要修改 Lambda 函数 CustomDNSDomainListLambda 的代码。请确保 custom_domains_list.csv 文件中没有重复的域名。否则,Lambda 函数执行解析查询将失败,并报以下错误:
- ERROR ValidationException:An error occurred (ValidationException) when calling the UpdateFirewallDomains operation: This request contains duplicated domains.Ensure that every domain is unique.(调用 UpdateFirewallDomains 操作时发生验证错误:请求中包含重复的域名。请确保每个域名都是唯一的。)
步骤 2:将 custom_domains_list.csv 文件上传至由 AWS CloudFormation 堆栈创建的名为 aws-customdomains-< AWS 账户号> 的 S3 存储桶。可以在 AWS CloudFormation 堆栈的 Outputs(输出)选项卡中找到此 S3 存储桶名称。
- 文件上传后,Lambda 函数会自动调用,并根据列表中的自定义域名创建一个新的 Route 53 DNS Firewall 域名列表。此后,任何后续的上传操作均会覆盖原有的自定义列表。
- 如图 8 所示,DNS Firewall 规则组包含了 AWS 管理的域名列表与自定义域名列表。
图 8:DNS Firewall 中的自定义域名列表
-
若需测试自定义域名配置,请将 domains.csv 文件上传至 aws-checkdomains-< AWS 账户号> S3 存储桶,并按照前面介绍的操作说明从 AWS CloudFormation 堆栈的 Outputs(输出)选项卡中获取 DNS Lookup REST API 的 URL (APIGatewayURL)。
-
如图 9 所示,新增域名的查询请求均根据自定义域名列表拦截了。
清理资源
全部打开实验完成后,为避免后续产生不必要的费用,请按照以下步骤删除 AWS CloudFormation 堆栈及其他资源:
在 AWS 管理控制台上:
- 删除 S3 存储桶:aws-checkdomains-< AWS 账户号 > and aws-customdomains-< AWS 账户号 >。
- 导航至 AWS CloudFormation 控制台。
- 在堆栈列表中,找到想要删除的堆栈。
- 选择该堆栈,然后在堆栈操作菜单中选择“删除”按钮。
- 根据提示确认删除操作。
注意事项
全部打开以下是一些需要注意的重要事项:
-
此解决方案支持通过 CSV 文件轻松输入域名,能够实时解析域名并对照 AWS 管理的域名列表和用户的自定义域名列表进行检查,并将查询结果存储到 S3 存储桶中和发送电子邮件通知即时反馈。通过结合使用 AWS 管理的威胁情报与自定义规则,企业能够以低维护成本、灵活的方式,极大地提升防御恶意软件、网络钓鱼和僵尸网络等网络威胁的能力。
-
请注意,如图 8 所示,如果 DNS Firewall 规则操作设置为 BLOCK(阻止),此规则将阻止访问指定目标的请求。如需了解不同规则操作类型的更多信息,请参阅DNS Firewall 规则操作。
-
我们建议在预发布环境中测试该解决方案,并进行任何必要的更新,包括实现更强大的安全措施,然后再将其部署到生产环境中。
总结
全部打开本文介绍了如何使用 Amazon Route 53 Resolver DNS Firewall 来检测恶意域名,并阻止任何指向恶意域名的访问。通过结合使用 AWS 管理的域名列表与自定义域名列表,企业能够加强防护措施,进一步提升其安全防护能力。
AWS 管理的域名列表包含已知的与多种安全威胁相关的域名,例如恶意软件、命令与控制服务器、网络钓鱼和僵尸网络。在 Amazon Route 53 Resolver DNS Firewall 规则中使用这些域名列表,系统可以自动阻止与已知安全威胁相关的域名查询。此外,还可以根据特定的安全需求创建自定义的域名列表,以阻止或允许访问这些域名。
如需进一步了解有关在 VPC 内实现域名 DNS 解析的信息,请参考 Amazon Route 53 开发者指南。如需了解 DNS Firewall 工作原理的更多细节,请参阅使用 DNS Firewall 保护 VPC 。