本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Network Firewall 从服务器名称指示中捕获出站流量的 DNS 域名
由 Kirankumar Chandrashekar (AWS) 创建
摘要
此模式向您展示如何使用 AWS Network Firewall 收集服务器名称指示 (SNI) 在出站网络流量的 HTTPS 标头中提供的 DNS 域名。Network Firewall 是一项托管服务,可以轻松地为 Amazon Virtual Private Cloud (Amazon VPC) 部署关键网络保护,包括能够使用防火墙来保护出站流量,该防火墙可以阻止不符合某些安全要求的数据包。保护特定 DNS 域名的出站流量称为出口过滤,这是一种监视并可能限制从一个网络到另一个网络的出站信息流的做法。
捕获通过网络防火墙的 SNI 数据后,您可以使用亚马逊 CloudWatch 日志和 AWS Lambda 将数据发布到生成电子邮件通知的亚马逊简单通知服务 (Amazon SNS) Simple Notification Service 主题。电子邮件通知包括服务器名称和其他相关 SNI 信息。此外,您可使用此模式的输出通过防火墙规则在 SNI 中按域名允许或限制 SNI 中的出站流量。有关更多信息,请参阅 Network Firewall 文档中的在 AWS Network Firewall 中使用有状态规则组
先决条件和限制
先决条件
一个有效的 Amazon Web Services account。
AWS Command Line Interface (AWS CLI) 版本 2,在 Linux、macOS 或 Windows 上安装和配置。
Network Firewall,在 Amazon VPC 中设置和配置,用于检查出站流量。您可以将 Network Firewall 配置为使用以下任何 VPC 配置:
架构
下图显示了如何使用 Network Firewall 从出站网络流量中收集 SNI 数据,然后使用 CloudWatch 日志和 Lambda 将这些数据发布到 SNS 主题。

图表显示了以下工作流:
网络防火墙从出站网络流量的 HTTPS 标头中的 SNI 数据收集域名。
CloudWatch 日志监控 SNI 数据,并在出站网络流量通过 Network Firewall 时调用 Lambda 函数。
Lambda 函数读取 CloudWatch 日志捕获的 SNI 数据,然后将该数据发布到 SNS 主题。
SNS 主题会向您发送包含 SNI 数据的电子邮件通知。
自动化和扩缩
您可以使用 AWS 通过使用基础设施即代码 CloudFormation来创建此模式。
技术堆栈
Amazon CloudWatch 日志
Amazon SNS
Amazon VPC
AWS Lambda
AWS Network Firewall
工具
Amazon Web Services
亚马逊 CloudWatch 日志 — 您可以使用亚马逊 CloudWatch 日志来监控、存储和访问来自亚马逊弹性计算云 (Amazon EC2) 实例、AWS CloudTrail、Amazon Route 53 和其他来源的日志文件。
Amazon SNS – Amazon Simple Notification Service (Amazon SNS) 是一项托管服务,提供从发布者到订阅用户(也称为创建者和使用者)的消息传输。
Amazon Virtual Private Cloud (Amazon VPC) 可预置 Amazon Web Services Cloud 的逻辑隔离部分,您可以在其中启动您定义的虚拟网络中的 AWS 资源。这个虚拟网络与您在数据中心中运行的传统网络极其相似,并会为您提供使用Amazon云科技可扩展基础设施的优势。
AWS Lambda — AWS Lambda 是一项计算服务,可帮助您运行代码,无需预置或管理服务器。
AWS Networ k Firewall — AWS Network Firewall 是一项托管服务,可让您轻松地为所有亚马逊部署基本的网络保护 VPCs。
操作说明
Task | 描述 | 所需技能 |
---|---|---|
创建 CloudWatch 日志组。 |
有关更多信息,请参阅 CloudWatch 文档中的使用日志组和日志流。 | 云管理员 |
Task | 描述 | 所需技能 |
---|---|---|
创建 SNS 主题。 | 要创建 SNS 主题,请按照 Amazon SNS 文档中的说明进行操作。 | 云管理员 |
为端点订阅 SNS 主题。 | 要订阅电子邮件地址作为您创建的 SNS 主题的端点,请按照 Amazon SNS 文档中的说明进行操作。对于协议,选择电子邮件/电子邮件-JSON。 注意您也可以根据自己的要求选择不同的终端节点。 | 云管理员 |
Task | 描述 | 所需技能 |
---|---|---|
启用防火墙日志记录。 |
有关使用 CloudWatch 日志作为网络防火墙日志目标的更多信息,请参阅网络防火墙文档中的 Amazon CloudWatch 日志。 | 云管理员 |
Task | 描述 | 所需技能 |
---|---|---|
创建有状态规则。 |
| 云管理员 |
将状态规则与 Network Firewall 关联。 |
| 云管理员 |
Task | 描述 | 所需技能 |
---|---|---|
为 Lambda 函数创建代码。 | 在可以从 Network Firewall 读取出站流量的 CloudWatch 日志事件的集成开发环境 (IDE) 中,粘贴以下 Python 3 代码并
此代码示例解析 CloudWatch 日志内容并在 HTTPS 标头中捕获 SNI 提供的服务器名称。 | 应用程序开发人员 |
创建 Lambda 函数。 | 若要创建 Lambda 函数,请按Lambda 文档中的说明,然后为选择 Python 3.9 作为运行时系统。 | 云管理员 |
将代码添加到 Lambda 函数。 | 要将您的 Python 代码添加到您之前创建的 Lambda 函数中,请按照 Lambda 文档中的说明进行操作。 | 云管理员 |
将 CloudWatch 日志作为触发器添加到 Lambda 函数。 |
有关更多信息,请参阅 Lambda 文档中的将 Lambda 与 CloudWatch 日志配合使用。 | 云管理员 |
添加 SNS 发布权限。 | 向 Lambda 执行角色添加 sns:Publish 权限,这样 Lambda 就可以调用 API 将消息发布到 SNS。
| 云管理员 |
Task | 描述 | 所需技能 |
---|---|---|
通过 Network Firewall 发送流量。 |
然后,按照亚马逊 CloudWatch 文档中的说明查看 Amazon CloudWatch 中的 Network Firewall 警报日志。警报日志显示以下输出:
| 测试工程师 |