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文件中
vi test_key
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'
五、配置zone同步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