Transaction signatures(TSIG)通常是一种确保DNS消息安全,并提供安全的服务器与服务器之间通讯(通常是在主从服务器之间)的机制。TSIG可以保护以下类型的DNS服务器:Zone转换、Notify、动态升级更新、递归查询邮件。TSIG适用于BIND v8.2及以上版本。TSIG使用共享秘密和单向散列函数来验证的DNS信息。 TSIG是易于使用的轻便解析器和命名机制。TSIG是一个安全的访问控制机制,保护信息在传输的过程中不会被改变。
一、工作原理
1、每个域名服务器增加了一个TSIG记录DNS服务器间的查询和信息的数据块
2、TSIG中记录了DNS消息签名,证明该邮件发件人与收件人共有一个共享密钥,并且在消息发送后不可被修改。
3、TSIG使用单向散列函数来验证身份和判断数据完整性。
要求:时间必须是准确的。
二、生成TSIG
使用bind提供的工具dnsssec-kengen生成共享密钥。
/home/slim/bind/sbin/dnssec-keygen -a HMAC-MD5 -b 128 -n HOST "test_key"
生成Ktest_key.+157+45410.key公用和Ktest_key.+157+45410.private私钥文件
# cat Ktest_key.+157+45410.private Private-key-format: v1.3 Algorithm: 157 (HMAC_MD5) Key: epYaIl5VMJGRSG4WMeFW5g== Bits: AAA= Created: 20150418165400 Publish: 20150418165400 Activate: 20150418165400将生成的key写到secret文件中
key "test_key" { #注意:这里写的是生成key的名字 algorithm hmac-md5; secret "epYaIl5VMJGRSG4WMeFW5g=="; #将生成的key复制到此处 };
注:尽管共有密钥和私有密钥是等价的,但为了确保安全通常dnssec-keygen采用例如HMAC-MD5的称加密算法来对生成的密钥进行加密。
三、主服务器配置
在named.conf增加如下配置:
include "/etc/test_key";
并在全局options配置中添加
allow-transfer { key test_key; };
notify yes;
定义有key的主机才能同步。
四、从服务器
将主服务器的test_key文件复制过来
在named.conf增加如下配置:
include "/etc/test_key";
server 192.168.36.54{
keys{
test_key;
};
};
修改zone test.com指定主服务器:
zone "test.com" IN {
type slave;
file "zone/test.com.zone";
masters{
192.168.36.54;
};
};
四、测试
启动主辅服务器,检查是否能正常解析,然后修改主服务器zone/test.com.zone SOA中的Serial值+1,重启加载主服务器配置,查看是否同步。
/home/slim/bind/sbin/rndc -c /home/slim/chroot/etc/rndc.conf reload
可以看到同步日志如下:
主服务器:
18-Apr-2015 17:29:30.089 client 192.168.36.189#50319/key test_key (test.com): query: test.com IN SOA -SE (192.168.36.54) 18-Apr-2015 17:29:30.098 client 192.168.36.189#39445/key test_key (test.com): query: test.com IN IXFR -ST (192.168.36.54) 18-Apr-2015 17:29:30.099 client 192.168.36.189#39445/key test_key (test.com): transfer of 'test.com/IN': AXFR-style IXFR started: TSIG test_key 18-Apr-2015 17:29:30.100 client 192.168.36.189#39445/key test_key (test.com): transfer of 'test.com/IN': AXFR-style IXFR ended辅服务器:
18-Apr-2015 17:27:12.156 client 192.168.36.54#1246: received notify for zone 'test.com' 18-Apr-2015 17:27:12.157 zone test.com/IN: notify from 192.168.36.54#1246: zone is up to date 18-Apr-2015 17:29:27.899 client 192.168.36.54#13088: received notify for zone 'test.com' 18-Apr-2015 17:29:28.099 zone test.com/IN: Transfer started. 18-Apr-2015 17:29:28.106 transfer of 'test.com/IN' from 192.168.36.54#53: connected using 192.168.36.189#39445 18-Apr-2015 17:29:28.109 zone test.com/IN: transferred serial 60: TSIG 'test_key' 18-Apr-2015 17:29:28.109 transfer of 'test.com/IN' from 192.168.36.54#53: Transfer completed: 1 messages, 8 records, 289 bytes, 0.003 secs (96333 bytes/sec) 18-Apr-2015 17:29:28.110 zone test.com/IN: sending notifies (serial 60)可以看见同步过程中使用TSIG 'test_key'
由于bind的主辅同步可以控制到具体的zone,所以TSIG可以真不同zone,配置不同的TSIG,不过要通过view配置。
如主服务器:
view"tisg"{ match-clients{ key"tisg";192.168.36.0/24; };server192.168.36.189{ keys"tisg"; };zone"."IN{ typehint;file"named.root"; };zone"test.com"{ typemaster;also-notify{ 192.168.36.189; };file"tisg/test.com.zone"; }; };
辅服务器:
view"tisg"{ match-clients{ key"tisg";192.168.36.0/24; };server192.168.36.54{ keys"tisg"; };zone"."IN{ typehint;file"/var/named/named.root"; };zone"test.com"{ typeslave;file"tisg/test.com.zone"masters{ 192.168.36.54; }; }; };
如果主dns不设置server语句的话,则主服务器主动发送给从dns的notify会被拒绝;如果从服务器不设置server语句的话,则不能实现分view同步的功能;如果主从服务器时间不同步的话,则会导致验证失败;如果从dns的ip匹配到主dns的view,则会导致只同步这个view的数据下来,即使配置了key。
参考文章:http://www.cnblogs.com/qlight/archive/2012/08/30/2663314.html