使用bind9搭建顶级域名NS(3)DNSSEC

DNSSEC指DNS加密扩展。虽然不能防止DNS污染等攻击,其能保证获取结果的正确性。

需要注意的是,要充分发挥DNSSEC,需要向上游TLD NS服务器添加DS记录。目前国内只有少数域名托管商支持DNSSEC DS记录的设置。如果你在域名控制台找不到相关的配置,那么可能你的域名托管商可能暂不支持这一类设置。(当然了,先把其他的配置好也行)

环境准备

确认顶级域名支持DNSSEC

首先确认自己的TLD支持DNSSEC。使用dig工具,指定支持DNSSEC的DNS服务器查询自己的顶级域名如:

dig net. +dnssec @4.2.2.4

如果输出带RRSIG记录,则说明该顶级域名支持DNSSEC:

支持DNSSEC的顶级域名及DNS服务器查询结果

确认域名托管商支持设置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

注意事项

每次修改区域文件时,都要重新签名。

发表评论