Chinaunix首页 | 论坛 | 博客
  • 博客访问: 488482
  • 博文数量: 82
  • 博客积分: 3003
  • 博客等级: 中校
  • 技术积分: 1285
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-11 15:27
文章分类

全部博文(82)

文章存档

2011年(1)

2010年(5)

2009年(63)

2008年(13)

我的朋友

分类: LINUX

2009-10-16 19:53:49

基于TSIG加密的区域传输

    在应用DNS服务器时,一个域常常需要不止一台服务器,自然会存在不同DNS服务之间数据的同步问题。DNS的master/slave架构很好的解决了数据同步问题,但是新的问题又来了。通常情况下,DNS之间的区域传输(zone transfer)是通过明文传送,这样以来会很不安全。Bind-9中通过TSIG(Transaction SIGnature)机制来保证数据的安全传输。下面是我做的基于TSIG加密的区域传输。

一、主DNS配置:
环境:
 OS : Red Hat Enterprise Linux 5 update 4
 Network: 192.168.1.1/24
 domain: example.com
 nameserver: 192.168.1.1
1。安装DNS服务的rpm包,

[root@server1 ~]# yum install bind

[root@server1 ~]# yum install bind-chroot

[root@server1 ~]# yum install caching-nameserver

2。生成TSIG密钥文件

[root@server1 ~]# dnssec-keygen -a hmac-md5 -b 128 -n host server1-server2
Kserver1-server2.+157+42041

*参数说明:-a hmac-md5 选择加密算法;
    -b 128 指定密码的长度(bits),最长为128;
    -n host 指定key的所有者类型;
    server1-server2 为key的名字

[root@server1 etc]# ll
total 60
-rw------- 1 root root    59 Oct 16 16:31 Kserver1-server2.+157+08339.key
-rw------- 1 root root   81 Oct 16 16:31 Kserver1-server2.+157+08339.private

[root@server1 etc]# cat Kserver1-server2.+157+08339.key
server1-server2. IN KEY 512 3 157 LUt09StcLpGZfQ9kEPxk6g==
[root@server1 etc]# cat Kserver1-server2.+157+08339.private
Private-key-format: v1.2
Algorithm: 157 (HMAC_MD5)
Key: LUt09StcLpGZfQ9kEPxk6g==

3。将Kserver1-server2.+157+08339.private中的密码拷贝到一个文件中,命名为ts.key,格式按照/usr/share/doc/bind-9.3.6/arm/Bv9ARM.ch04.html中的规定写。

[root@server1 named]# cat ts.key
key server1-server2. {
        algorithm hmac-md5;
        secret "LUt09StcLpGZfQ9kEPxk6g==";
};


4。编辑named.caching-nameserver.conf文件,

[root@server1 ~]# vi /var/named/chroot/etc/named.caching-nameserver.conf
...
options {
...
allow-transfer {key server1-server2; };   //添加此选项
...
};
view localhost_resolver {
...
include "/var/named/ts.key"; 
//在view中要include这个文件,需要注意的是这里的"/"是/var/named/chroot
...
}


****
辅助DNS配置:
环境:
 OS : Red Hat Enterprise Linux 5 update 4
 Network: 192.168.1.2/24
 domain: example.com
 nameserver: 192.168.1.2
1。将主DNS服务器上生成的ts.key文件拷贝到本机的相应位置,

[root@server2 ~]# scp 192.168.1.1:/var/named/chroot/var/named/ts.key /var/named/chroot/var/named/ts.key
password:
ts.key                                        100%   83     0.1KB/s 00:00 


*注意要在/var/named目录下做一个符号链接,否则会出现找不到文件的错误,

错误情况(不做符号链接):

[root@server2 ~]# named-checkconf /var/named/chroot/etc/named.caching-nameserver.conf

/var/named/chroot/etc/named.caching-nameserver.conf:44: open: /var/named/ts.key: file not found

正确情况;

[root@server2 ~]# ln -s /var/named/chroot/var/named/ts.key /var/named/ts.key
[root@server2 ~]# named-checkconf /var/named/chroot/etc/named.caching-

nameserver.conf  //检查无错

2。编辑named.caching-nameserver.conf文件,在view中加入include "/var/named/ts.key"

[root@server1 ~]# vi /var/named/chroot/etc/named.caching-nameserver.conf
view localhost_resolver {
...
include "/var/named/ts.key"; 
...
}

3。编辑named.rfc1912.zone文件,

[root@server2 ~]# vi /var/named/chroot/etc/named.rfc1912.zones

server 192.168.1.1 {
        keys { server1-server2.; };
//在文件中添加此选项,注意key名字后一定要有"."
};

 

****
 测试

1。首先通过dig命令来查询词域,

[root@server2 slaves]# dig -y server1-server2.:LUt09StcLpGZfQ9kEPxk6g==

@192.168.1.1 example.com axfr

; <<>> DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5 <<>> -y server1-server2.

@192.168.1.1 example.com axfr
; (1 server found)
;; global options:  printcmd
example.com.            86400   IN      SOA     ns1.example.com.

root.example.com. 44 10800 900 604800 86400
example.com.            86400   IN      NS      ns1.example.com.
client1.example.com.    86400   IN      A       192.168.1.100
client3.example.com.    86400   IN      A       192.168.1.200
ns1.example.com.        86400   IN      A       192.168.1.1
example.com.            86400   IN      SOA     ns1.example.com.

root.example.com. 44 10800 900 604800 86400
server1-server2.        0       ANY     TSIG    hmac-md5.sig-alg.reg.int.

1255690833 300 16 7f8n9zLbu/musJIMK1d43g== 36958 NOERROR 0
;; Query time: 3 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Fri Oct 16 19:00:33 2009
;; XFR size: 6 records (messages 1)

2。为了立即看到传输过来的zone file,重启named服务,同时监控主DNS服务器的日志文件。

server1(主DNS)
1) 为了便于观察,情况日志文件;

[root@server2 ~]# > /var/log/messages

2) 监控日志文件,同时在server2(辅助DNS)做如下操作

[root@server1 ~]# tailf /var/log/messages  

---server2(辅助DNS)----

[root@server2 slaves]# pwd
/var/named/chroot/var/named/slaves
[root@server2 slaves]# service named restart
Stopping named:                                            [  OK  ]
Starting named:                                            [  OK  ]
[root@server2 slaves]# ll
total 8
-rw-r--r-- 1 named named 369 Oct 16 19:04 example.com.zone


---server1----

[root@server1 ~]# tailf /var/log/messages
Oct 16 19:13:50 localhost named[21565]: client 192.168.1.2#38895: view

localhost_resolver: transfer of 'example.com/IN': AXFR started: TSIG

server1-server2
Oct 16 19:13:50 localhost named[21565]: client 192.168.1.2#38895: view

localhost_resolver: transfer of 'example.com/IN': AXFR ended

四、后记

    实验成功。实验中还应注意的是/var/named/chroot/下的子目录etc/与var/的文件信息,即文件的所有者和所属组。文件的所属信息为root.named,目录的所属信息为named.named。若目录的所属信息不正确,会导致区域传输的文件不能在本地建立。实验不周全的地方还请读者帮忙指正,谢谢。

——Kevein Liu
阅读(1797) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

liuyangxky2009-10-19 13:05:39

kevein.cublog.cn