注:本文原作者 Jimmy Xu,对本文所叙述的内容,如有疑问,请直接与原作者联系。
DNSSEC 这东西出来的时间也不短了,根服务器上早都有了相关支持,.org 域和一些 ccTLD 也都已经完全部署。不过很遗憾的是,现在域名注册商提供的 DNS 系统少有支持这一安全扩展的,所以,还是得自己动手。
本文主要描述操作步骤,对知识性的东西几乎没有涉及,请自行 Google 或阅读相关文档。
〇、先决条件
您得有一台可通过 SSH 或等同渠道访问服务器,而且您得是或者认识服务器的 root。而且您得有一个域名。以下内容均在 Ubuntu 10.04.1 LTS 上测试,其他系统一般来讲只是包管理和配置文件路径会有差异。
一、配置名字服务器
首先,从软件源中安装 BIND:
# apt-get install bind9
完成后将工作目录切换至 /etc/bind/
。这些默认的文件很多我们并不需要。首先编辑 named.conf
文件,使其只有如下内容:
include "/etc/bind/named.conf.options"; include "/etc/bind/named.conf.local";
然后在 named.conf.options
文件的最后一个大括号前,加入:
recursion no;
以关掉递归查询。然后,删掉我们不需要的文件:
# rm db.* named.conf.default-zones zones.rfc1918
这样基本的东西就完成了。
注:以下内容都用 tommyang.org 这个域名来举例子。
一个域名光有一个名字服务器是不够的,我们还需要一些备份。如果您是 Linode 用户,那么 Linode 的几个名字服务器就可以当作 slave。或者 he.net 的免费服务(可能有问题,不推荐)。在这些站点先注册 tommyang.org 这个域,选择类型为 slave,相应的 Master 填自己服务器的 IP 地址,并记住服务商要求你允许进行 AXFR 的那些地址。
然后转回服务器。首先编辑 named.conf.local
文件,在其末尾加入:
zone "tommyang.org" { type master; file "/etc/bind/db.tommyang.org"; allow-transfer {69.93.127.10; 65.19.178.10; 75.127.96.10; 207.192.70.10; 109.74.194.10; }; // 这些就是刚才的 AXFR 地址,如果您在用 he.net 的服务, // 这一行请换成 allow-transfer {216.218.130.2; }; };
现在创建 db.tommyang.org 文件,填入以下内容(请根据自己的配置进行修改):
; ; BIND data file for tommyang.org ; $TTL 300 @ IN SOA ns.tommyang.org. hostmaster.tommyang.org. ( ; 请替换为自己的电邮地址,将 @ 替换为 . 2010081101 ; 序列号,每次编辑此文件都应将此数字加 1 14400 14400 1209600 300 ) ; @ 3600 IN NS ns.tommyang.org. ns IN A 173.230.146.246 ; 请替换为您服务器的 IP 地址 @ 3600 IN NS ns1.linode.com. @ 3600 IN NS ns2.linode.com. @ 3600 IN NS ns3.linode.com. @ 3600 IN NS ns4.linode.com. @ 3600 IN NS ns5.linode.com. ; 请替换为刚才提到的从服务器 ; @ IN A 173.230.146.246 @ IN AAAA 2001:470:1f04:d93::2 ; 如服务器无 IPv6 支持,请删掉此行 ; www IN CNAME tommyang.org. mail IN CNAME ghs46.google.com. ; 这里及以下假设您在使用 Google Apps 的邮件服务 ; @ 3600 IN MX 10 aspmx.l.google.com. @ 3600 IN MX 20 alt1.aspmx.l.google.com. @ 3600 IN MX 20 alt2.aspmx.l.google.com. @ 3600 IN MX 30 aspmx2.googlemail.com. @ 3600 IN MX 30 aspmx3.googlemail.com. @ 3600 IN MX 30 aspmx4.googlemail.com. @ 3600 IN MX 30 aspmx5.googlemail.com. ; @ 3600 IN TXT "v=spf1 a include:aspmx.googlemail.com -all"
编辑完成后请运行:
# named-checkzone tommyang.org db.tommyang.org
以检测是否出现语法错误。然后重启 BIND:
# /etc/init.d/named restart
如果没有问题的话,现在服务器应该可以正常地提供查询服务了。可运行:
# dig @localhost tommyang.org
查看能否解析出正确的地址,如有问题请检查刚才的配置是否有误。
这时服务器的配置已经完成。请到域名注册商处(以 Godaddy 为例),打开域名设置,在“Host Summary”处点“add”,输入“Host name”ns 及服务器的 IP 地址,并确认。稍等一会儿,再在上方的“Nameservers”处将域名的名字服务器替换为 ns.tommyang.org、ns1.linode.com 等(请与上文中配置的 NS 记录保持一致)。确定后等待生效即可。可通过执行:
$ whois tommyang.org
查看返回记录中的 Name servers:
项目来确认。
二、启用 DNSSEC
在本文写作时,.org 顶级域已经完全支持 DNSSEC。其他的 TLD 待支持后配置方法应该也没什么差异。
首先,运行:
# dnssec-keygen -r/dev/random -aRSASHA1 -b1024 -nZONE tommyang.org
以生成 ZSK(如果该命令运行缓慢,可将 /dev/random
换为 /dev/urandom
,但会损失部分安全性)。记住得到的文件名(形如 Ktommyang.org.+005+23640.key
),然后,运行:
# dnssec-keygen -r/dev/random -fKSK -aRSASHA1 -b2048 -nZONE tommyang.org
以生成 KSK(如果该命令运行缓慢,方法同上)。记住得到的文件名(形如 Ktommyang.org.+005+55006.key
)。
现在编辑 db.tommyang.org
,在最末尾加入以下两行:
$INCLUDE "Ktommyang.org.+005+23640.key" $INCLUDE "Ktommyang.org.+005+55006.key" ; 请修改为上文提到的正确的文件名
并将序列号加 1。然后运行(您可将这条命令附在文件最顶的注释中):
# dnssec-signzone -r/dev/random -e+31104000 \ -otommyang.org -kKtommyang.org.+005+55006 \ db.tommyang.org Ktommyang.org.+005+23640.key
对整个域进行签名(请将文件名替换为正确的,如运行缓慢,方法同上),这条命令会生成一个 db.tommyang.org.signed
文件。现在编辑 named.conf.local
文件,将 file 一行替换为:
file "/etc/bind/db.tommyang.org.signed";
运行:
# named-checkzone tommyang.org db.tommyang.org.signed
以检测是否出现语法错误及签名是否成功。然后重载 BIND:
# /etc/init.d/named reload
现在服务器已经配置好了。可运行:
# dig +dnssec @localhost tommyang.org
查看能否解析。
现在工作目录中会有一个 dsset-tommyang.org.
文件,我们要将这个文件中的内容提供给注册商。仍以 Godaddy 为例,打开域名设置,选“Manage DNSSEC”、“Add new DS record”、“Switch to advanced mode”,将 dsset-tommyang.org.
的内容粘贴入,并调整为如下格式:
tommyang.org 31104000 DS; 55006 5 1 2257B8982183546E34D17212BC221A72ADAD8201; tommyang.org 31104000 DS; 55006 5 2 95FBD01F008E7485CD7FCF2BB514D47EFB4DF1F70DF6D09F0C744CED5B60A39E;
检查无误后确认,并请等待其生效。可执行:
$ whois tommyang.org
查看返回记录中是否有 DNSSEC:Signed
一行,或可访问 http://dnsviz.net/ 进行验证。
到此,配置工作就完成了。
三、注意事项
- DNS zone file 的格式和在线管理的格式差不多,可以照猫画虎,也可以 Google 下相关的帮助;
- 每次更改文件请务必将序列号加 1,否则从服务器直到超时才能看到新的数据。也请务必运行 dnssec-signzone 命令重新签名,并执行 reload 命令;
- 每 360 天请重新进行第二节所述的操作,或者您也可将所有的 31104000 改为更大的数字;
- 备份,备份,备份……
四、其他
如您发现文中有错误的地方,请告诉我。注:我对于您因为按照本文操作所造成的一般性、特殊性、意外性或间接性损失,不负任何责任(包括但不限于,资料损失,资料执行不精确,或应由您或第三人承担的损失等)。
本作品采用知识共享署名-相同方式共享 3.0 Unported许可协议进行许可。