轉:DNS BIND主輔同步之TSIG加密

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
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章