4.5. 使用 DNSSEC 保护 DNS 流量
4.5.1. DNSSEC 简介 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
DNSSEC 是一组 域名系统安全扩展 (DNSSEC),它允许
DNS 客户端验证并检查来自 DNS 名称服务器的响应的完整性,以验证其原始卷,并确定它们是否在传输中被篡改。
4.5.2. 了解 DNSSEC 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
对于通过互联网连接,现在有更多 Web 站点可以使用
HTTPS 安全地连接。但是,在连接到 HTTPS webserver 之前,必须执行 DNS 查找,除非您直接输入 IP 地址。这些 DNS 查找是不安全的完成的 ,受因为缺少身份验证的中间人攻击。换句话说,DNS 客户端不能确信来自给定 DNS 名称服务器的回复是真实的,且未被篡改。更重要的是,递归名称服务器无法确定它从其他名称服务器获得的记录是个例。DNS 协议没有为客户端提供了一种机制来确保它不受中间人攻击。引入 DNSSEC 以解决使用 DNS 解析域名时缺少身份验证和完整性检查。它没有解决保密性的问题。
发布 DNSSEC 信息涉及数字签名
DNS 资源记录,以及以这样一种方式分发公钥,从而使 DNS 解析器能够构建分层信任链。所有 DNS 资源记录的数字签名都会生成并添加到区域,作为数字签名资源记录(RRSIG)。区域的公钥被添加为 DNSKEY 资源记录。要构建分层链,DNSKEY 的哈希值在父区域中发布,以 委派签名 (DS)资源记录。为便于验证非一致性,则使用 NextSECure (NSEC)和 NSEC3 资源记录。在 DNSSEC 签名区域中,每个资源记录集 (RRset)都有对应的 RRSIG 资源记录。请注意,用于委托到子区域(NS 和 glue 记录)的记录没有签名;这些记录会出现在子区域中,并在那里签名。
处理 DNSSEC 信息由配置了根区域公钥的解析器完成。使用这个密钥,解析器可以验证 root 区域中使用的签名。例如,root 区域已签署了
.com 的 DS 记录。root 区域还为 .com 名称服务器提供 NS 和 glue 记录。解析器遵循此委托并查询 .com 的 DNSKEY 记录,使用这些委派的名称服务器。获得的 DNSKEY 记录的哈希值应与 root 区域中的 DS 记录匹配。如果是,解析器将信任 .com 获取的 DNSKEY。在 .com 区域中,RSIG 记录由 .com DNSKEY 创建。对于 .com 中的委派,此过程的重复重复,如 redhat.com。使用此方法时,只需要配置一个 root 密钥来验证 DNS 解析器只需要配置一个 root 密钥,同时它在正常操作期间从全球收集多个 DNSKEY。如果加密检查失败,解析器会将 SERVFAIL 返回到应用程序。
DNSSEC 的设计方式对不支持 DNSSEC 的应用程序完全不可见。如果非 DNSSEC 应用程序查询 DNSSEC 功能解析器,它将在没有这些新的资源记录类型(如 RRSIG)的情况下收到回答。但是,DNSSEC 功能解析器仍将执行所有加密检查,如果检测到恶意
DNS 回答,仍会向应用程序返回 SERVFAIL 错误。DNSSEC 保护 DNS 服务器(权威和递归)之间数据的完整性,它不会在应用程序和解析器之间提供安全性。因此,务必要让应用程序为其解析器提供安全传输。完成的最简单方法是,在 localhost 上运行 DNSSEC 功能解析器,并在 /etc/resolv.conf 中使用 127.0.0.1。或者可以使用到远程 DNS 服务器的 VPN 连接。
了解 Hotspot 问题
Wi-Fi Hotspots 或 VPN 依赖 “DNS” 是:捕获门户倾向于劫持
DNS,以便将用户重定向到需要为其验证(或付费)进行 Wi-Fi 服务的页面。连接到 VPN 的用户通常需要使用 “内部” DNS 服务器来查找公司网络外不存在的资源。这要求软件进行额外的处理。例如,dnssec-trigger 可用于检测 Hotspot 是否劫持 DNS 查询,unbound 可以充当代理名称服务器来处理 DNSSEC 查询。
选择 DNSSEC Capable Recursive Resolver
要部署支持递归解析器的 DNSSEC,可以使用 BIND 或
unbound。两者都默认启用 DNSSEC,并使用 DNSSEC root 密钥进行配置。要在服务器上启用 DNSSEC,但其中一个操作都将在移动设备(如笔记本)上首选使用 unbound,因为它允许本地用户使用 dnssec-trigger 时动态重新配置 Hotspots 所需的 DNSSEC 覆盖,在使用 Libreswan 时,对于 VPN。unbound 守护进程进一步支持部署在 etc/unbound8:0:1::.d/ 目录中列出的 DNSSEC 异常,它们对服务器和移动设备都很有用。
4.5.3. 了解 Dnssec-trigger 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
在
/etc/resolv.conf 中安装和配置 unbound 后,所有来自应用程序的 DNS 查询都会被 unbound 处理。DNSSEC-trigger 仅在触发 unbound 解析器时重新配置 unbound 解析器。这主要适用于连接到不同 Wi-Fi 网络的 roaming 客户端机器,如笔记本电脑。此过程如下:
- 当通过
DHCP获取新的DNS服务器时,NetworkManager “会触发” dnssec-trigger。 - 然后 DNSSEC -trigger 对服务器执行多个测试,并确定它是否正确支持 DNSSEC。
- 如果存在,则 dnssec-trigger 会重新配置
unbound,以使用该DNS服务器作为所有查询的转发器。 - 如果测试失败,dnssec-trigger 将忽略新的
DNS服务器,并尝试一些可用的回退方法。 - 如果它确定有无限端口 53 (
UDP和TCP)可用,它将告知unbound成为完整的递归DNS服务器,而无需使用任何转发器。 - 如果这不可能,例如,因为防火墙阻止了端口 53,除了到达网络的
DNS服务器本身外,它将尝试使用DNS到端口 80,或者TLS封装DNS到端口 443。在端口 80 和 443 上运行的服务器可以在/etc/dnssec-trigger/dnssec-trigger.conf中配置。默认配置文件中应提供了注释的示例。 - 如果这些回退方法也失败,dnssec-trigger 将提供不安全的操作,这将会完全绕过 DNSSEC,“或者只在缓存中” 运行,它不会尝试新的
DNS查询,但会回答它在缓存中已有的所有内容。
Wi-Fi Hotspots 越来越多地将用户重定向到登录页,然后向互联网授予访问权限。在上面概述的序列中,如果检测到重定向,系统会提示您询问是否需要登录才能访问互联网。
dnssec-trigger 守护进程每 10 秒继续探测 DNSSEC 解析器。有关使用 dnssec-trigger 图形化工具的详情,请查看 第 4.5.8 节 “使用 Dnssec-trigger”。
4.5.4. VPN Supplied Domains 和 Name Servers 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
某些类型的 VPN 连接可以传递一个域和用于该域的名称服务器列表,作为 VPN 隧道设置的一部分。在 Red Hat Enterprise Linux 中,NetworkManager 支持它。这意味着
unbound、dnssec-trigger 和 NetworkManager 的组合可以正确支持 VPN 软件提供的域和名称服务器。VPN 隧道启动后,会为接收的域名的所有条目清除本地 unbound 缓存,以便从使用 VPN 访问的内部名称服务器获取对域名中的名称的查询。当 VPN 隧道终止时,不会再次清除 unbound 缓存,以确保对域的任何查询都将返回公共 IP 地址,而不是之前获取的专用 IP 地址。请参阅 第 4.5.11 节 “为连接分割域配置 DNSSEC 验证”。
4.5.5. 推荐的命名实践 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
红帽建议静态名称和临时名称与
DNS 中用于机器 的完全限定域名 (FQDN)匹配,如 host.example.com。
分配名称和编号(ICANN)的互联网公司有时会将之前未注册的顶级域(如
.yourcompany)添加到公共寄存器中。因此,红帽强烈建议您不要使用没有委托给您的域名,即使在专用网络上,这可能会导致根据网络配置的不同解析域名。因此,网络资源可能会不可用。使用未委托给您的域名也使得 DNSSEC 更难以部署和维护,因为域名冲突需要手动配置来启用 DNSSEC 验证。有关此问题的更多信息,请参阅有关域名冲突的 ICANN 常见问题解答。
4.5.6. 了解信任 Anchors 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
在分层加密系统中,信任锚 是被假定为可信的权威实体。例如,在 X.509 架构中,根证书是从中派生信任链的信任锚。信任锚必须事先拥有信任方,然后才能进行路径验证。
在 DNSSEC 上下文中,信任锚由与该名称关联的
DNS 名称和公钥(或公钥的哈希)组成。它表示为 base 64 编码密钥。它与一个证书类似,它是一种交换信息(包括公钥)的方法,可用于验证和验证 DNS 记录。RFC 4033 将信任定位符定义为 DNSKEY RR 的已配置 DNSKEY RR 或 DS RR 哈希。验证安全感知解析器使用此公钥或哈希作为起点,用于将身份验证链构建到签名的 DNS 响应中。通常,验证解析器必须通过一些安全或可信的方法在 DNS 协议之外获取其信任定位符的初始值。存在信任定位符还意味着解析器应该预期信任锚指向的区域。
4.5.7. 安装 DNSSEC 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
4.5.7.1. 安装 unbound 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
要在机器上使用 DNSSEC 验证
DNS,需要安装 DNS 解析器 未绑定 (或 绑定 )。只需要在移动设备上安装 dnssec-trigger。对于服务器,unbound 应该足够了,但可能需要本地域的转发配置,具体取决于服务器所在的位置(LAN 或 Internet)。DNSSEC-trigger 目前只会对全局公共 DNS 区域提供帮助。NetworkManager、dhclient 和 VPN 应用程序通常会自动收集域列表(以及名称服务器列表),但不能自动收集 dnssec-trigger 或 unbound。
要安装
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
unbound,请以 root 用户身份输入以下命令:
yum install unbound
~]# yum install unbound
4.5.7.2. 检查 unbound 是否正在运行 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
要确定
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
unbound 守护进程是否正在运行,请输入以下命令:
systemctl status unbound
~]$ systemctl status unbound
unbound.service - Unbound recursive Domain Name Server
Loaded: loaded (/usr/lib/systemd/system/unbound.service; disabled)
Active: active (running) since Wed 2013-03-13 01:19:30 CET; 6h ago
如果
unbound 服务没有运行,systemctl status 命令将会报告 unbound 作为 Active: inactive (dead)。
4.5.7.3. 启动 unbound 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
要为当前会话启动
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
unbound 守护进程,请以 root 用户身份输入以下命令:
systemctl start unbound
~]# systemctl start unbound
运行 systemctl enable 命令,以确保每次系统引导时都启动
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
unbound :
systemctl enable unbound
~]# systemctl enable unbound
unbound 守护进程允许使用以下目录配置本地数据或覆盖:
/etc/unbound/conf.d目录用于为特定域名添加配置。这用于将对域名的查询重定向到特定的DNS服务器。这通常用于只存在于企业 WAN 中的子域。/etc/unbound/keys.d目录用于为特定域名添加信任定位符。当仅限内部名称被 DNSSEC 签名时,这是必需的,但没有公开现有的 DS 记录来构建信任路径。另一个用例是使用与公司 WAN 外部公开名称不同的 DNSKEY 进行签名。/etc/unbound/local.d目录用于添加特定的DNS数据作为本地覆盖。这可用于构建黑名单或创建手动覆盖。此数据将由unbound返回到客户端,但不会标记为 DNSSEC 签名。
unbound.conf (5) 手册页。
4.5.7.4. 安装 Dnssec-trigger 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
dnssec-trigger 应用作为守护进程运行,
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
dnssec-triggerd。要安装 dnssec-trigger,请以 root 用户身份输入以下命令:
yum install dnssec-trigger
~]# yum install dnssec-trigger
4.5.7.5. 检查 Dnssec-trigger 守护进程是否正在运行 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
要确定
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
dnssec-triggerd 是否正在运行,请输入以下命令:
systemctl status dnssec-triggerd
~]$ systemctl status dnssec-triggerd
systemctl status dnssec-triggerd.service
dnssec-triggerd.service - Reconfigure local DNS(SEC) resolver on network change
Loaded: loaded (/usr/lib/systemd/system/dnssec-triggerd.service; enabled)
Active: active (running) since Wed 2013-03-13 06:10:44 CET; 1h 41min ago
如果
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
dnssec-triggerd 守护进程没有运行,systemctl status 命令将报告为 Active: inactive (dead)。要为当前会话启动它,请以 root 用户身份输入以下命令:
systemctl start dnssec-triggerd
~]# systemctl start dnssec-triggerd
运行 systemctl enable 命令,以确保
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
dnssec-triggerd 每次系统引导时启动:
systemctl enable dnssec-triggerd
~]# systemctl enable dnssec-triggerd
4.5.8. 使用 Dnssec-trigger 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
dnssec-trigger 应用有一个 GNOME 面板实用程序,用于显示 DNSSEC 探测结果,以及按需执行 DNSSEC 探测请求。要启动该实用程序,请按 Super 键进入 Activities Overview,输入 DNSSEC,然后按 Enter。在屏幕底部的消息栏中添加了图标重新排序异常。按屏幕右下角的 round blue 通知图标显示它。右键单击 anchor 图标以显示弹出菜单。
在不正常操作 unbound 中,本地将 unbound 用作名称服务器,
resolv.conf 则指向 127.0.0.1。当您单击 Hotspot Sign-On 面板中的 时,这已更改。DNS 服务器从 NetworkManager 查询并放入 resolv.conf 中。现在,您可以在 Hotspot 的登录页面上进行身份验证。anchor 图标显示一个大的红色感叹号,警告您以不安全的方式进行 DNS 查询。经过身份验证后,dnssec-trigger 应该自动检测此模式并切回到安全模式,但在某些情况下,用户必须选择 Reprobe 来手动执行此操作。
DNSSEC-trigger 通常不需要任何用户交互。启动后,它在后台工作,如果遇到了一个问题,则通过弹出文本框中通知用户。它还告知
unbound 对 resolv.conf 文件的更改。
4.5.9. 使用带有 DNSSEC 的 dig 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
要查看 DNSSEC 是否正常工作,可以使用各种命令行工具。使用的最佳工具是 bind-utils 软件包中的 dig 命令。其他有用的工具可从 ldns 软件包和 unbound 软件包中的 unbound-host 深入了解。旧的
DNS 工具 nslookup 和 host 已被弃用,不应使用。
要使用 dig 发送请求 DNSSEC 数据的查询,选项
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
除了 A 记录外,还会返回包含 DNSSEC 签名的 RRSIG 记录,以及签名的时间和过期时间。
+dnssec 会添加到命令中,例如:
unbound 服务器表示数据经过 DNSSEC 验证,方法是返回顶部的 flags: 部分中的 ad bit。
如果 DNSSEC 验证失败,则 dig 命令会返回 SERVFAIL 错误:
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
要请求有关失败的更多信息,可以通过为 dig 命令指定
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
+cd 选项来禁用 DNSSEC 检查:
通常,DNSSEC 错误地错误地认为清单本身是不良的,但在本示例中 ,www.dnssec-tools.org 的人已强制使用这个 RRSIG 签名,但我们无法手动查看此输出来检测。这个错误将显示在 systemctl status unbound 的输出中,
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
unbound 守护进程会将这些错误记录到 syslog 中,如下所示: Aug 22 22:04:52 laptop unbound: [3065:0] info: validation failure badsign-a.test.dnssec-tools.org. A IN
Aug 22 22:04:52 laptop unbound: [3065:0] info: validation failure badsign-a.test.dnssec-tools.org. A IN
使用 unbound-host 的示例:
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
4.5.10. 为 Dnssec-trigger 设置 Hotspot 检测基础架构 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
当连接到网络时,dnssec-trigger 会尝试检测 Hotspot。Hotspot 通常是一个设备,它会强制用户与网页进行交互,然后才能使用网络资源。检测是通过尝试下载带有已知内容的特定固定网页来完成的。如果存在 Hotspot,则收到的内容不会如预期一样。
要设置一个固定的网页,其中包含 dnssec-trigger 可以用来检测 Hotspot 的已知内容,如下所示:
- 在某些计算机上设置 Web 服务器,可在 Internet 上公开访问。请参阅 Red Hat Enterprise Linux 7 系统管理员指南中的 Web 服务器 章节。
- 服务器运行后,使用已知内容发布静态页面。该页面不需要是有效的 HTML 页面。例如,您可以使用名为
hotspot.txt的纯文本文件,该文件仅包含字符串OK。假设您的服务器位于example.com,并且您在 Web 服务器document_root/static/子目录中发布您的hotspot.txt文件,那么静态 Web 页面的地址将是example.com/static/hotspot.txt。请参阅 Red Hat Enterprise Linux 7 系统管理员指南中的 Web 服务器 一章中的 DocumentRoot 指令。 - 将以下行添加到
/etc/dnssec-trigger/dnssec-trigger.conf文件中:此命令添加使用url: "http://example.com/static/hotspot.txt OK"
url: "http://example.com/static/hotspot.txt OK"Copy to Clipboard Copied! Toggle word wrap Toggle overflow HTTP(端口 80)探测到的 URL。第一部分是将要解析的 URL 以及将要下载的页面。命令的第二部分是下载的网页应包含的文本字符串。
有关配置选项的详情,请查看 man page
dnssec-trigger.conf (8)。
4.5.11. 为连接分割域配置 DNSSEC 验证 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
默认情况下,对于任何连接提供的每个域的 dnssec-trigger 会自动添加带有正确名称服务器的区域,但通过 NetworkManager 提供的 Wi-Fi 连接除外。
默认情况下,添加到 unbound 的所有转发区域都是 DNSSEC 验证的。
可以更改验证转发区域的默认行为,以便在默认情况下,所有转发区域 都不会被 DNSSEC 验证。为此,请更改 dnssec-trigger 配置文件
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
不会对任何现有转发区进行更改,但只适用于将来的转发区。因此,如果您要为当前提供的域禁用 DNSSEC,则需要重新连接。
/etc/dnssec.conf 中的 validate_connection_provided_zones 变量。以 root 用户身份,打开并编辑行,如下所示: validate_connection_provided_zones=no
validate_connection_provided_zones=no
4.5.11.1. 为 Wi-Fi Supplied 域配置 DNSSEC 验证 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
可以为 Wi-Fi 提供的区添加转发区域。为此,请更改 dnssec-trigger 配置文件
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
不会对任何现有转发区进行更改,但只适用于将来的转发区。因此,如果要为当前的 Wi-Fi 提供的域启用 DNSSEC,则需要重新连接(重新启动) Wi-Fi 连接。
/etc/dnssec.conf 中的 add_wifi_provided_zones 变量。以 root 用户身份,打开并编辑行,如下所示: add_wifi_provided_zones=yes
add_wifi_provided_zones=yes
警告
将 Wi-Fi 提供的域作为转发区启用到
未绑定 可能会导致安全影响,例如:
- Wi-Fi 接入点可以有意通过
DHCP为您提供域,其没有授权,并将所有DNS查询路由到其DNS服务器。 - 如果您的转发区的 DNSSEC 验证 关闭了,Wi-Fi 提供的
DNS服务器可能会欺骗来自提供的域的域名的IP地址,而无需知道它。
4.5.12. 其它资源 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
以下是解释 DNSSEC 的更多资源。
4.5.12.1. 安装的文档 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
DNSSEC-trigger (8)手册页 - 描述dnssec-triggerd、dnssec-trigger-control 和 dnssec-trigger-panel 的命令选项。DNSSEC-trigger.conf (8)手册页 - 描述dnssec-triggerd的配置选项。unbound (8)手册页 - 描述unbound的命令选项(DNS验证解析器)。unbound.conf (5)手册页 - 包含如何配置unbound的信息。resolv.conf (5)手册页 - 包含解析器例程读取的信息。
4.5.12.2. 在线文档 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
- http://tools.ietf.org/html/rfc4033
- RFC 4033 DNS 安全简介和要求.
- http://www.dnssec.net/
- 包含指向许多 DNSSEC 资源的网站。
- http://www.dnssec-deployment.org/
- DNSSEC 部署计划由部为家庭安全赞助,包含很多 DNSSEC 信息,并有用于讨论 DNSSEC 部署问题的邮件列表。
- http://www.internetsociety.org/deploy360/dnssec/community/
- 互联网 Society 的 “Deploy 360” 计划与协调 DNSSEC 部署是全球寻找社区和 DNSSEC 活动的良好资源。
- http://www.unbound.net/
- 本文档包含有关
unboundDNS服务的通用信息。 - http://www.nlnetlabs.nl/projects/dnssec-trigger/
- 本文档包含有关 dnssec-trigger 的一般信息。