DNSSEC指DNS加密扩展。虽然不能防止DNS污染等攻击,其能保证获取结果的正确性。
需要注意的是,要充分发挥DNSSEC,需要向上游TLD NS服务器添加DS记录。目前国内只有少数域名托管商支持DNSSEC DS记录的设置。如果你在域名控制台找不到相关的配置,那么可能你的域名托管商可能暂不支持这一类设置。(当然了,先把其他的配置好也行)
环境准备
确认顶级域名支持DNSSEC
首先确认自己的TLD支持DNSSEC。使用dig工具,指定支持DNSSEC的DNS服务器查询自己的顶级域名如:
dig net. +dnssec @4.2.2.4
如果输出带RRSIG记录,则说明该顶级域名支持DNSSEC:
确认域名托管商支持设置DS记录
在托管商控制台查找DNSSEC有关的选项,或者
DNSSEC原理
这里具体不再赘述,可以参考:https://zhuanlan.zhihu.com/p/355579999
只需要注意的是,由于需要形成信任链,即你的域名要由上级证明是有效,上级要被上上级证明是有效的,这个就是签名委派者记录DS,需要记录在上级。其他的由自己管理就可以了。
开始搭建
生成密钥对
使用dnssec-keygen
生成密钥对,ECDSAP256SHA256加密算法是目前推荐的选项。首先生成整个区域的密钥:
dnssec-keygen -f KSK -a ECDSAP256SHA256 -n ZONE example.com.
dnssec-keygen -a ECDSAP256SHA256 -n ZONE example.com.
即生成了两对密钥,每一对中,Kxxx.private
是私钥,自己保管好且不能泄漏;Kxxx.key
是公钥。
对区域文件签名
编辑区域文件,在最后包含上刚刚生成的两个公钥:
$INCLUDE Kxxxxx1.key
$INCLUDE Kxxxxx2.key
开始签名:
dnssec-signzone -o example.com. example.com.db
完成后生成example.com.db.signed
文件,可以打开看看,里面已经包含了大量RRSIG记录。
同时生成了dsset-example.com.
文件,此文件包含了需要向上游TLD NS服务器添加的记录。将这个记录提供到托管商,即可完成配置。
配置bind9
修改bind9配置:
zone "example.com." IN {
type master;
file "/etc/bind/example.com.zone.signed";
最好再更改:
options {
dnssec-validation yes;
完成后,重新加载配置:
rndc reload
检查是否成功:
dig example.com. +dnssec @4.2.2.4
注意事项
每次修改区域文件时,都要重新签名。