亚马逊AWS官方博客

解决 CNAME 链难题:使用 Route 53 Resolver DNS Firewall 简化管理

从今天开始,您可以将 DNS Firewall 配置为自动信任解析链(例如 CNAMEDNAMEAlias 链)中的所有域。

我们用非技术术语为那些不熟悉 DNS 的人讲解一下。

为什么要使用 DNS Firewall?
DNS Firewall 为来自云 [Amazon Virtual Private Cloud(Amazon VPC)] 中私有网络的出站 DNS 请求提供保护。这些请求通过 Amazon Route 53 Resolver 进行域名解析。防火墙管理员可以配置规则来筛选并监管出站 DNS 流量。

DNS Firewall 有助于防范多种安全风险。

假设一个恶意行为者设法在您的 Amazon Elastic Compute Cloud(Amazon EC2)实例,或在其中一个虚拟私有云(VPC)中运行的容器上安装并运行一些代码。恶意代码很可能会启动传出的网络连接。此操作可能会连接到命令服务器并接收要在您的计算机上执行的命令。或者,可能会在协调的分布式拒绝服务(DDoS)攻击中启动与第三方服务的连接。还可能试图泄露其设法在您的网络上收集的数据。

幸运的是,您的网络和安全组配置正确。这会阻止所有传出流量,但您的应用程序使用的已知 API 端点的流量除外。到目前为止还不错,恶意代码无法使用常规 TCP 或 UDP 连接回拨。

但是 DNS 流量会怎样? 恶意代码可能会向其控制的权威 DNS 服务器发送 DNS 请求,以发送控制命令或编码数据,该代码可以在响应中接收数据。我在下图中说明了这个过程。

DNS 泄露示意图

为了防止出现这些情况,您可以使用 DNS Firewall 来监控并控制您的应用程序可以查询的域。您可以拒绝访问已知不良的域,允许所有其他查询通过。或者,您可以拒绝访问除您明确信任的域之外的所有域。

CNAME、DNAME 和 Alias 记录的挑战是什么?
想象一下,您将 DNS Firewall 配置为仅允许对特定的已知域进行 DNS 查询,而阻止所有其他域。您的应用程序与 alexa.amazon.com 通信;因此,您创建了一条规则,允许 DNS 流量解析该主机名。

但是,DNS 系统有多种类型的记录。这篇文章中最让人感兴趣的是

  • 将 DNS 名称映射到 IP 地址的 A 记录,
  • 作为其他 DNS 名称同义词的 CNAME 记录,
  • 提供从 DNS 名称树的一部分重定向到 DNS 名称树另一部分的 DNAME 记录,以及
  • 为 DNS 功能提供 Route 53 特定扩展的 Alias 记录。Alias 记录允许您将流量路由到选定的 AWS 资源,例如 Amazon CloudFront 分配和 Amazon S3 存储桶

在查询 alexa.amazon.com 时,我发现这实际上是一条指向 pitangui.amazon.comCNAME 记录,是另一条指向 tp.5fd53c725-frontier.amazon.comCNAME 记录,反过来又是指向 d1wg1w6p5q8555.cloudfront.netCNAME 记录。只有最后一个名称(d1wg1w6p5q8555.cloudfront.net)有与 IP 地址 3.162.42.28 相关的 A 记录。您的 IP 地址可能有所不同。该地址指向最近的 Amazon CloudFront 边缘站点,对我来说可能是来自巴黎(CDG52)的那个边缘站点。

解析 DNAMEAlias 记录时也会出现类似的重定向机制。

alexa.amazon.com 的 DNS 解析

为了允许对这样的 CNAME 链进行完全解析,您可能会想将您的 DNS Firewall 规则配置为允许 amazon.com(*.amazon.com)下的所有名称,但这无法解析最后一个进入 cloudfront.netCNAME

最糟糕的是,DNS CNAME 链由您的应用程序连接的服务控制。该链可能随时发生变化,迫使您手动维护 DNS Firewall 规则内的规则和授权域列表。

DNS Firewall 重定向链授权简介
根据这个解释,您现在已经能够了解我们今天推出的新功能。我们在 UpdateFirewallRule API(也可在 AWS 命令行界面(AWS CLI)AWS 管理控制台上使用)中添加了一个参数来配置 DNS Firewall,使其遵循并自动信任 CNAMEDNAMEAlias 链中的所有域。

通过此参数,防火墙管理员能够仅允许您的应用程序查询的域。防火墙会自动信任链中的所有中间域,直到其到达带有 IP 地址的 A 记录。

下面来看实际操作
我从已经配置了域列表规则组和允许查询域 alexa.amazon.com 的规则的 DNS Firewall 开始。该规则组已附加到我启动了 EC2 实例的 VPC。

当我连接到该 EC2 实例并发出 DNS 查询来解析 alexa.amazon.com 时,该命令只返回域链(pitangui.amazon.com)中的第一个名称,然后就此停止。这是预料之中的,因为 pitangui.amazon.com 无权解析。

alexa.amazon.com 的 DNS 查询在第一个 CNAME 时被阻止

为了解决这个问题,我更新了防火墙规则以信任整个重定向链。我使用 AWS CLI 调用 update-firewall-rule API,并将新参数 firewall-domain-redirection-action 设置为 TRUST_REDIRECTION_DOMAIN

用于更新 DNS 防火墙规则的 AWS CLI

下图展示了此阶段的设置。

DNS Firewall 规则图

返回 EC2 实例,我再次尝试 DNS 查询。这次,可以了。该命令解析了整个重定向链,一直到 IP 地址 🎉。

完整 CNAME 链的 DNS 解析

得益于可信链重定向,网络管理员现在可以轻松实施一种策略,阻止所有域并仅授权其 DNS Firewall 中的已知域,而不必关心 CNAMEDNAMEAlias 链。

此功能在所有 AWS 区域均可使用,无需额外付费。现在就试试吧

— seb