让主服务器对区域进行数字签名是很好的,但如果入侵者在主服务器和辅助服务器之间传输时破坏了区域数据,则可能会影响区域的可用性。在您的区域上部署DNSSEC之前,请确保服务器的区域传输安全。RFC 2931中定义的事务签名(Transaction Signatures —— TSIG)可以保护动态更新的完整性。
纯粹主义者(Purists)会注意到TSIG不是DNSSEC的一部分。然而,如果你要费心签署一个区域,你当然应该在权威服务器之间保护这些数据。您应该在部署DNSSEC之前完成此操作,或者,如果您已经签署了您的区域,现在就可以了。
TSIG通过对称加密工作。服务器共享密钥和密钥名称。大多数名称服务器允许您将该密钥的使用限制在特定的IP地址,因此窃取您密钥的入侵者仍然无法使用它。虽然不完美,但与纯粹的基于IP的访问控制相比,这是一个重大的改进。
顾名思义,TSIG签署交易以保持完整性。它不加密数据。如果您希望名称服务器之间保密,请设置VPN。(虽然RFC 9103定义了通过TLS进行区域传输的标准,但尚未得到广泛部署。)
为每个辅助服务器创建不同的密钥。如果入侵者入侵了辅助服务器,您只需要更换存储在该主机上的密钥。如果入侵者入侵了您的主名称服务器,您仍然需要更换所有TSIG密钥。您还需要立即轮换区域密钥,并替换其他安全协议(如SSH、HTTPS、LDAP等)的所有密钥。
许多名称服务器程序提供TSIG的替代方案,就像它们通过区域传输以外的方式提供复制一样。请随意使用它们。但是,如果您需要与其他名称服务器进行互操作,则需要了解TSIG。
每个TSIG密钥都有一个秘密(secret)和一个名称(name)。在使用密钥的每台主机上,两者必须相同。名称不匹配,例如将主键称为“次要”,将次要键称为“主要”,会导致TSIG故障。
TSIG支持几种不同的算法,包括强烈反对的MD5和SHA1。所有密钥都应该使用SHA-2家族中的算法,如SHA256或SHA512。更长的哈希值更难破解,但在日常事务中会消耗更多的处理器时间,对大多数网站来说都是浪费。
TSIG是那些往往只建立一次就被遗忘的协议之一。如果您的服务器使用TSIG,请验证它们没有使用HMAC-MD5或HMAC-SHA1。如果你找到了那些密钥,请尽快更换。
在一台主机上创建密钥。将密钥和名称复制到另一台主机。告诉你的域名服务器密钥。使用区域转移或其他查询进行测试。这就是全部。真的没有理由不使用TSIG。
TSIG需要同步时间,如NTP提供的时间。
使用TSIG需要为每对主机创建密钥,告知指定的密钥,并将密钥分配给特定的服务器。
要创建密钥,您必须知道HMAC算法和密钥名称。我建议对所有当前密钥使用HMAC-SHA256。使用 tsig-keygen(8)
(此命令包含于bind9中) 创建TSIG密钥。
# tsig-keygen -a algorithm keyname
下面,我创建了一个以DNS服务器 dns2
命名的HMAC-256密钥。
# tsig-keygen -a HMAC-SHA256 dns2
key "dns2" {
algorithm hmac-sha256;
secret "bYIwx0554io3Pn4UeiFwZsGH8o4iayzrLuyS6b69Bu8=";
};
此命令将生成您的密钥。
tsig keygen(8)
的输出被格式化为 named.conf 条目。不要改变输出的任何内容;将其逐字放入配置文件中。(您也可以将其用作包含文件。)
现在,使用 server
语句将密钥附加到名称服务器,如下所示。辅助服务器的 named.conf 应引用与主服务器配置的相同IP地址,而主服务器使用辅助服务器的地址。(如果辅助服务器有多个IP地址,请使用显示为主服务器连接的源地址。)
xxxxxxxxxx
server 192.0.2.1 {
keys { dns2 ; } ;
};
重新启动 named 或运行 rndc reconfig
。它将使用这些密钥来传输区域,您可以在调试日志中进行验证。
我通常在辅助名称服务器上使用 dig(1)
来验证区域传输。配置TSIG后,主名称服务器希望对来自辅助IP地址的所有区域传输请求进行签名。要在命令行运行区域传输,您必须使用TSIG密钥提供dig。
最简单的方法是创建一个包含密钥的文件,并使用 -k
参数将其提供给 dig
。密钥文件必须看起来像 tsig-keygen
的输出。如果您正在运行BIND,则可以将密钥语句直接从 named.conf 复制到密钥文件中。对于其他名称服务器,您必须在文件中排列密钥名、HMAC和secret。然后像往常一样尝试区域传输,添加 -k
参数和文件名。
$ dig zone @server axfr -k tsig.key
密钥文件的问题在于它包含密钥。您必须像保护其他密钥一样保护该文件。这通常很不方便,可能会违反您组织的安全策略。您还可以在命令行上使用 -y
标志提供HMAC算法、名称和密钥。
$ dig zone @primary axfr -y HMAC-algorithm:keyname:secret
这是一个较长的命令行,但不如文件持久。除非它被缓存在你的 .history 中。选择你的风险。
现在让我们来看看密钥。