在主 DNS 服务器上配置 DNSSEC:
编辑 BIND 配置文件。
[root@dns-01 ~]# vi /etc/named.conf
其中查找并设置以下指令。
dnssec-enable yes; dnssec-validation yes; dnssec-lookaside auto;
使用以下命令创建区域签名密钥 (ZSK)。
[root@dns-01 ~]# cd /var/named [root@dns-01 named]# dnssec-keygen -a NSEC3RSASHA1 -b 2048 -n ZONE onitroad.com Generating key pair...........................................................................+++ ...........................................................................................+++ Konitroad.com.+007+28013
使用以下命令创建密钥签名密钥 (KSK)。
[root@dns-01 named]# dnssec-keygen -f KSK -a NSEC3RSASHA1 -b 4096 -n ZONE onitroad.com Generating key pair.......................................++ .................................................++ Konitroad.com.+007+65445
在我们的区域文件中包含生成的密钥。
[root@dns-01 named]# echo "$include Konitroad.com.+007+28013.key" >> /var/named/onitroad.com [root@dns-01 named]# echo "$include Konitroad.com.+007+65445.key" >> /var/named/onitroad.com
使用 dnssec-signzone 命令签署区域。
[root@dns-01 named]# dnssec-signzone -A -3 $(head -c 1000 /dev/random | sha1sum | cut -b 1-16) -N INCREMENT -o onitroad.com -t onitroad.com Verifying the zone using the following algorithms: NSEC3RSASHA1. Zone fully signed: Algorithm: NSEC3RSASHA1: KSKs: 1 active, 0 stand-by, 0 revoked ZSKs: 1 active, 0 stand-by, 0 revoked onitroad.com.signed Signatures generated: 21 Signatures retained: 0 Signatures dropped: 0 Signatures successfully verified: 0 Signatures unsuccessfully verified: 0 Signing time in seconds: 0.039 Signatures per second: 529.233 Runtime in seconds: 0.046
上面的命令为 onitroad.com 区域创建了一个签名区域文件。
我们现在需要编辑区域配置以使用 onitroad.com.signed 文件而不是 onitroad.com 文件。
[root@dns-01 named]# vi /etc/named.conf.local
更新文件指令如下。
zone "onitroad.com" { type master; file "/var/named/onitroad.com.signed"; allow-transfer {192.168.1.102;fd15:4ba5:5a2b:1008::2; }; also-notify {192.168.1.102;fd15:4ba5:5a2b:1008::2; }; # DNSSEC keys Location key-directory "/var/named/*.keys"; # Publish and Activate DNSSEC keys auto-dnssec maintain; # Use Inline Signing inline-signing yes; };
重新启动 named.service 以加载更改。
[root@dns-01 named]# systemctl reload named.service
使用 dig 命令检查 DNSKEY 记录。
[root@dns-01 named]# dig DNSKEY onitroad.com. +multiline ; <<>> DiG 9.9.4-RedHat-9.9.4-74.el7_6.2 <<>> DNSKEY onitroad.com. +multiline ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14498 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;onitroad.com. IN DNSKEY ;; ANSWER SECTION: onitroad.com. 3600 IN DNSKEY 256 3 7 ( AwEAAaGAIKYjx3rjdGVfTHShyBqZfYruv9XFdla4skgK f1lLSSDJ+1MN90rc5EjobINEgXJp9g8t6j6W3H5osa50 CQCmwIxXVWcCKzdm5goJBy0L26FPzl9KNFAExdyVnlyN CPXnBwTvxS2nS4iJM2zbTRynWxjcLebsOC+wAzkJmxcN +DLgkTH/M1dPx1m8R78gOCsNxJfEKy+Zzyq5cZ0H6IJ/ EnC3IDWuULHwQ5knmVo9LcP/7FiaZKmmd+SBjJF7rfSm xXmxEe//B5cIhedhMkkBcTCB1UPyhRnv8VX43tCfwxax u8t7iC31QdaN2gfQ2xd2a7lK5I+ceCbPJ+etQ3U= ) ; ZSK; alg = NSEC3RSASHA1; key id = 28013 onitroad.com. 3600 IN DNSKEY 257 3 7 ( AwEAAfAS59V3GImmv9JpgmJxqDDCDxVmy/avEMViA8Zk W6MtC+PbWfywMWu1m+aCbCqBqx6GtbjVwvLMi9ccVfGs gJd0G5kXvdfSI3XvmbXsubby3ZF7Bz1abHVc/hoVeuQT 2p9q1UpjTy3jpgnxrouF7ROiFmyZEgKcNUzbmeJ12mIZ 5WMvd1TuOEguXHlv+H+wmGbqdfjsuqu/yJlqO8wT9eI5 JvuXL1SjXd3nDkcYwRNw352FsH9NxQ186BS6UwiUoVJN lKB98pidjIRHZngaHNnqzRrGGT/5HJjroZtRjooKcGWI mYdUhnTNIO3HXL6kS6yJzgAEoaKbnnuQQ4vME07/bJEN 9CYNqLGv2HsrHFyT1UQtZGlsyI+uyzOJOznQHBIKmVX8 uGD1a8twyYJy7U7xuiLgyAqLjNjTgDQiCwyW+0/TMys1 M6n/86S+xEzi0Z7HYbqMupfBJVB1xDiSh+vOjFetdWxB pyEkPRDlg1F3QONifkTA1u6rybCHtaZXa9BAJAWJRYrM tBN15tvc3UjSi0gNLEC73/cBYT39kca9ETni9rESQyXH Nh3tFahJU7GK1Ym+0sCzvnPbIjl2axJFY53cYUdtErkR PmNdno3x0IsVF+zDbcoGh4af5lNmNBZ12aZMEiKHY304 vPnlbXG+H1rvPdGP/54yVlG8GNxV ) ; KSK; alg = NSEC3RSASHA1; key id = 65445 ;; Query time: 0 msec ;; SERVER: 192.168.1.101#53(192.168.1.101) ;; WHEN: Sun Sep 01 22:11:18 PKT 2019 ;; MSG SIZE rcvd: 848
我们已经在 主 DNS 服务器上配置了 DNSSEC。
DNSSEC(域名系统安全扩展)是一套 IETF(互联网工程任务组)规范,用于保护 IP(互联网协议)网络上使用的 DNS(域名系统)提供的某些类型的信息。
它是 DNS 的一组扩展,向 DNS 客户端(解析器)提供 DNS 数据的原始身份验证、已验证的拒绝存在和数据完整性,但不提供可用性或者机密性。
在本文中,我们将为 CentOS 7 中的 BIND DNS 服务器配置 DNSSEC。
配置环境
首先参考下面的教程搭建DNS服务器。
在 CentOS 7 中使用 BIND 搭建 DNS 服务器
主DNS服务器
- 主机名 - dns-01.onitroad.com
- IPv4 地址 - 192.168.1.101 /24
从 DNS 服务器:
- 主机名 - dns-02.onitroad.com
- IPv4 地址 - 192.168.1.102 /24
在 CentOS 7 上安装 Haveged
登录到 dns-01.onitroad.com。
hasged 项目试图提供一个易于使用、不可预测的随机数生成器,它基于 HAVEGE 算法的改编。
Haveged 的创建是为了解决 Linux 随机设备中可能在某些工作负载下出现的低熵条件,尤其是在无键鼠显示器服务器上。
我们正在 CentOS 7 服务器上安装 hasged 以加快 DNSSEC 配置期间的密钥生成过程。
Havaged 在 EPEL(企业 Linux 的另外包)yum 存储库中可用。
因此,我们必须在安装 hasged 包之前安装 EPEL。
安装 EPEL yum 存储库如下。
[root@dns-01 ~]# yum install -y epel-release
为 EPEL yum 存储库构建缓存。
[root@dns-01 ~]# yum makecache fast
现在,我们可以使用 yum 命令从 EPEL 存储库安装 hasged。
[root@dns-01 ~]# yum install -y haveged
启用并启动 hasged.service 。
[root@dns-01 ~]# systemctl enable --now haveged.service Created symlink from /etc/systemd/system/multi-user.target.wants/haveged.service to /usr/lib/systemd/system/haveged.service.
在从 DNS 服务器上配置 DNSSEC:
登录到 dns-02.onitroad.com。
将 KSK 和 ZSK 文件从主 DNS 服务器复制到从 DNS 服务器。
[root@dns-02 ~]# scp root@dns-01.onitroad.com:/var/named/Konitroad.com.* /var/named/
在我们的区域文件中包含 KSK 和 ZSK 密钥。
[root@dns-02 ~]# echo "$include Konitroad.com.+007+28013.key" >> /var/named/onitroad.com [root@dns-02 ~]# echo "$include Konitroad.com.+007+65445.key" >> /var/named/onitroad.com
编辑 BIND 配置文件。
[root@dns-02 ~]# vi /etc/named.conf
并设置以下指令以启用 DNSSEC 。
dnssec-enable yes; dnssec-validation yes; dnssec-lookaside auto;
编辑区域配置文件。
[root@dns-02 ~]# vi /etc/named.conf.local
并更新文件指令如下。
zone "onitroad.com" { type slave; masters { 192.168.1.101; }; file "/var/named/onitroad.com.signed"; # DNSSEC keys Location key-directory "/var/named/*.keys"; # Publish and Activate DNSSEC keys auto-dnssec maintain; # Use Inline Signing inline-signing yes; };
重新启动 named.service 以加载更改。
[root@dns-02 ~]# systemctl reload named.service
检查 onitroad.com.signed 区域是否已转移到从 DNS 服务器。
[root@dns-02 ~]# ls /var/named 116.168.192.in-addr.arpa onitroad.com named.empty slaves data onitroad.com.signed named.localhost dynamic named.ca named.loopback
我们已经在CentOS 7 中为 BIND DNS 服务器配置了 DNSSEC。