海浪家园

unbound启用DNSSec,该如何配置?

注意:启用DNSSec只能验证dns记录是否被篡改,并不能加密你的dns查询传输数据;如果你需要加密dns查询,还是需要用opendns推出的dnscrypt工具。
http://www.opendns.com/technology/dnscrypt/ 和 http://dnscrypt.org/

1. 获得trust anchor
trust anchor和根证书的意思类似。unbound-anchor 可以创建和更新 trust anchor。用下面的命令来下载和立即检查trust anchor的完整性,这个检查是使用 unbound-anchor 内建的 ICANN 证书进行的,如果不确认的话,还应检查它的完整性,包括 unbound-anchor -l 和检验源代码,不过源码包一般都经过校验,可以认为没有问题。

ubuntu系统的root.key一般在/var/lib/unbound/root.key路径
$ sudo -u unbound unbound-anchor -a "/var/lib/unbound/root.key"
如果一切正常,则系统不会给出任何提示。

当然如果root.key的路径指定错误了,就会有提示。比如我一开始在 /etc/unbound/目录下直接执行下面的命令,就提示错误了。
:/etc/unbound$ sudo -u unbound unbound-anchor
libunbound[3186:0] error: unable to open /etc/unbound/root.key for reading: No such file or directory
libunbound[3186:0] error: error reading auto-trust-anchor-file: /etc/unbound/root.key
libunbound[3186:0] error: validator: error in trustanchors config
libunbound[3186:0] error: validator: could not apply configuration settings.
libunbound[3186:0] error: module init for module validator failed

为了方便上面的unbound-anchor工具仅仅是提供了一个初始值,我们自己必须要验证和获得根签名验证
(under the terms of our LICENSE,
来源:http://unbound.net/documentation/howto_anchor.html)

我们可以通过https加密连接从IANA下载根签名验证: root-anchors.xml
下载地址:https://data.iana.org/root-anchors/root-anchors.xml
得到的内容如下:

< TrustAnchor id="AD42165F-3B1A-4778-8F42-D34A1D41FD93" source="https://data.iana.org/root-anchors/root-anchors.xml">
< Zone>.< /Zone>
< KeyDigest id="Kjqmt7v" validFrom="2010-07-15T00:00:00+00:00">
< KeyTag>19036< /KeyTag>
< Algorithm>8< /Algorithm>
< DigestType>2< /DigestType>
< Digest>
49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5
< /Digest>
< /KeyDigest>
< /TrustAnchor>

然后将上面的内容,按照下面的格式添加到/var/lib/unbound/root.key文件的最后一行
. IN DS 19036 8 2 49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5
编辑root.key文件时记得用 sudo -u unbound nano /var/lib/unbound/root.key,保持这个文件的所有权属于unbound用户。

2.在unbound中启用
配置 unbound 使用 DNSSEC 验证只需在 server 小节增加一行:
auto-trust-anchor-file: "/usr/local/etc/unbound/root.key"
然后重启 unbound 即可。

3.验证是否启用成功(方法一)
用 dig com. SOA +dnssec 应该可以看到 DNSSEC 验证成功(flags: ad):

$ dig com. SOA +dnssec

; <<>> DiG 9.8.1-P1 <<>> com. SOA +dnssec
;; global options: +cmd
;; Got answer:
;; ->>HEADER< ;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 14, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;com. IN SOA

;; ANSWER SECTION:
com. 900 IN SOA a.gtld-servers.net. nstld.verisign-grs.com. 1366543272 1800 900 604800 86400
com. 900 IN RRSIG SOA 8 1 900 20130428112112 20130421101112 35519 com. cfaBU/Ygqt5ATC8Wn94c9ILZQcw1kYWkcTKDgHnVOSvSU5n+WBJoVO08 3jwDABVVLx5VUON+uygspq10YWW5PBy7HdCeRNLJ1QK4qyWtPVICHkIv HugvKEEAwYAP6kZPcI/Ogi0J1O80fA2hNZ65Wrhm8ZG5hScOariNqXz7 V7s=

;; AUTHORITY SECTION:
com. 172800 IN NS e.gtld-servers.net.
com. 172800 IN NS f.gtld-servers.net.
com. 172800 IN NS c.gtld-servers.net.
com. 172800 IN NS i.gtld-servers.net.
com. 172800 IN NS m.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
com. 172800 IN NS l.gtld-servers.net.
com. 172800 IN NS j.gtld-servers.net.
com. 172800 IN NS d.gtld-servers.net.
com. 172800 IN NS k.gtld-servers.net.
com. 172800 IN NS g.gtld-servers.net.
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS a.gtld-servers.net.
com. 172800 IN RRSIG NS 8 1 172800 20130428041929 20130421030929 35519 com. uIBGqbhLKX4AyXiZuHWEq2csMba1STfqGca7ta9OB5VItaGEYhCf5NB9 fG5GHjtZGO8tQSKcqs4qifT+cVkjoVkqmU+03n1uwK8QgJ6R18cTU78L khMtqtYaqiWjalrSuQCH5B6Tq549neGWC9H284ICGRU62jSdc16oNHIj F5A=

;; Query time: 3949 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Apr 21 19:21:33 2013
;; MSG SIZE rcvd: 637

4.验证是否启用成功(方法二)

也可以用浏览器访问 http://dnssectest.sidn.nl/ 来测试。

目前美国联邦政府的许多网站都已经启用了 DNSSEC,但在大家的缓存服务器以及更多的商业站点支持 DNSSEC 之前,这样做并不能显著改善安全性。

退出移动版