DNSSEC
- 域名系统安全扩展 (DNSSEC) 是一套互联网工程任务组 (IETF) 的规范,用于保护互联网协议 (IP) 网络上使用的域名系统 (DNS) 所提供信息的安全性。它是 DNS 的一系列扩展,为 DNS 客户端 (解析器) 提供 DNS 数据的来源认证、经过认证的存在否认以及数据完整性,但不提供可用性或保密性。
安装一个DNSSEC验证解析器
要确保 DNSSEC 在系统范围内得到验证,请设置一个本地 DNS 服务器来验证 DNSSEC 记录,并配置 resolv.conf(5) 使用该服务器,以便所有 DNS 查找都通过它。有关可用的验证解析器,请参阅 域名解析#DNS 服务器。请注意,某些 DNS 服务器需要特定选项才能启用 DNSSEC 验证。
如果您尝试访问一个带有伪造 (spoofed) IP 地址的网站,验证解析器将阻止您接收无效的 DNS 数据,并且您的浏览器 (或其他应用程序) 将被告知该主机不存在。由于所有 DNS 查找都通过验证解析器,因此在使用此选项时,您不需要内置 DNSSEC 支持的软件。
测试本地验证解析器
从终端
要测试您的本地解析器是否正确验证 DNSSEC,请使用支持设置 DO ("DNSSEC OK") 位的 DNS 查询工具,例如 drill(1)。
测试解析器是否不返回具有无效签名的域的响应,例如 badsig.test.dnscheck.tools, rhybar.cz 或 dnssec-failed.org
$ drill -D badsig.test.dnscheck.tools
;; ->>HEADER<<- opcode: QUERY, rcode: SERVFAIL, id: 5610 ;; flags: qr rd ra ; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;; badsig.test.dnscheck.tools. IN A ;; ANSWER SECTION: ;; AUTHORITY SECTION: ;; ADDITIONAL SECTION: ;; Query time: 44 msec ;; EDNS: version 0; flags: do ; udp: 1232 ; EDE: 6 (DNSSEC Bogus): 49 37 34 56 (I74V) ;; SERVER: 127.0.0.1 ...
返回代码应为 SERVFAIL (服务器失败),答案部分应为空,并且标志不应包含 ad (已认证数据)。
接下来,测试一个具有有效签名的域
$ drill -D test.dnscheck.tools
;; ->>HEADER<<- opcode: QUERY, rcode: NOERROR, id: 20952 ;; flags: qr rd ra ad ; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;; test.dnscheck.tools. IN A ;; ANSWER SECTION: test.dnscheck.tools. 5 IN A 116.203.95.251 ... ;; AUTHORITY SECTION: ;; ADDITIONAL SECTION: ;; Query time: 45 msec ;; EDNS: version 0; flags: do ; udp: 1232 ;; SERVER: 127.0.0.1 ...
查询应成功返回,并包含 ad (已认证数据) 标志。
从网页浏览器
多个网站提供测试,以检查您的 DNS 解析器是否验证 DNSSEC
- http://www.dnssec-or-not.com/
- https://dnscheck.tools/
- https://wander.science/projects/dns/dnssec-resolver-test/
- https://internet.nl/connection/
带DNSSEC验证的递归查询
要验证域的 DNSSEC,而无需涉及递归解析器,请使用一个可以从 DNS 根开始跟踪域的 DNS 查询工具。例如 drill(1) (来自 ldns) 或 dig(1) (来自 bind)。
使用 drill,使用 -D 选项设置 DO (DNSSEC OK) 位,并使用 -T 选项从根域名服务器一直跟踪到要解析的域
$ drill -DT example.com
将 example.com 替换为您要执行 DNSSEC 验证的域名。
对于具有无效 DNSSEC 签名的域,结果应以以下行结尾
$ drill -DT badsig.test.dnscheck.tools
[B] badsig.test.dnscheck.tools. 1 IN A 116.203.95.251 ;; Error: Bogus DNSSEC signature ;;[S] self sig OK; [B] bogus; [T] trusted; [U] unsigned
对于具有受信任签名的域,结果应以以下行结尾
$ drill -DT test.dnscheck.tools
[T] test.dnscheck.tools. 1 IN A 116.203.95.251 ;;[S] self sig OK; [B] bogus; [T] trusted; [U] unsigned
在特定软件中启用DNSSEC
如果您选择不 #安装一个DNSSEC验证解析器,您需要使用内置 DNSSEC 支持的软件。通常这意味着您必须自己修补软件。希望在 (2020 年 12 月) 之前能在 [1] 找到一个包含多个修补应用程序的完整列表。此外,一些网页浏览器 (其中一些在 [2] 中提及) 具有可以安装的扩展或插件,可以在不修补程序的情况下实现 DNSSEC。
参见
- DNSSEC-Tools
- DNSSEC 可视化工具 - 用于可视化 DNS 区域状态的工具。
- Red Hat: 使用 DNSSEC 保护 DNS 流量 - 关于使用 unbound 实现 DNSSEC 的详尽文章。请注意,一些工具是 Red Hat 特有的,在 Arch Linux 中找不到。
- Wikipedia:Domain Name System Security Extensions
- dns_tools — 简化管理 DNSSEC 区域的工具。