基于TSIG的DNS

        DNS的重要性不言而喻,有太多的服务都离不开DNS,有很多基于DNS的攻击,比如DNS欺骗之类的,黑客一旦获取了DNS的zone文件,就可以获得服务器的很多信息。如果主辅DNS服务器之间不做安全验证措施,很容易被其他主机和黑客从中间获得DNS服务器的记录。主配置文件里提供了allow-transfer的选项,可以将它的值设置为辅助DNS服务器的IP。这样虽然能做到一定程度的安全保护,但是依旧是明文传输,假设一个黑客将自己伪装为192.168.1.9,还是可以获得主DNS服务器的记录。因此我们要用一种加密的方式来实现区域传输。这种加密方式叫做TSIG,一种对称加密方式。下面我们介绍一种基于TSIG的DNS,可以保障主从DNS之间的复制安全性,并且可以保证黑客无法获得zone文件。TSIG可以保证zone文件在传输过程中没有被篡改,并且还能保证那些主机允许接受zone文件。

    Transaction signatures (TSIG) 通常是一种确保DNS消息安全,并提供安全的服务器与服务器之间通讯(通常是在主从服务器之间)的机制。TSIG可以保护以下类型的DNS服务器:

  ·Zone转换

  ·Notify

  ·动态升级更新

  ·递归查询邮件

  TSIG适用于BIND v8.2及以上版本。TSIG使用共享秘密和单向散列函数来验证的DNS信息。 TSIG是易于使用的轻便解析器和命名机制。

    工作原理

  1、每个域名服务器增加了一个TSIG记录DNS服务器间的查询和信息的数据块

  2、TSIG中记录了DNS消息签名,证明该邮件发件人与收件人共有一个共享密钥,并且在消息发送后不可被修改。

  3、TSIG使用单向散列函数来验证身份和判断数据完整性。

 

   先说一下我的环境,和刚才配置的环境一样,还是station1作为主DNS,station2作为辅助DNS。

   1.创建TSIG

      在station1上,运行

      dnssec-keygen -a HMAC-MD5 -b 128 -n HOST station1-station2

      -a 用于指定算法;

      -b用于指定算法的位数;

      -n指定name的类型

      后面的station1-station2就是TSIG的名字,当然,你也可以随便取。

效果如下

 

创建完之后,我们会发现目录下有两个文件,一个后缀是key,一个后缀是private。

后者的内容里面的Key这一行就是我们需要的信息。

 

进入/var/named/chroot/etc目录下

把rndc.key复制为xiaosu.key

文件内容修改如下:

key "station1-station2" {

        algorithm       hmac-md5;

        secret          "2Ex7xTFJOWBSQlPoiTZN5Q==";

};

也就是把第一行中的key后面修改为刚才创建的TSIG的名字,然后再把secret的内容修改为刚才Key那行的信息。

修改完之后,修改一下xiaosu.key保证named能加载这个文件,再修改一下xiaosu.key的权限保证安全。

   chown root.named  /var/named/chroot/etc/xiaosu.key

   chmod 640 /var/named/chroot/etc/xiaosu.key

 

修改主DNS服务器的配置文件,加载这个key文件,并只允许拥有这个key 文件的DNS才能传输zone文件。

   配置文件的开头加入

   include “/etc/xiaosu.key”;

   options部分加入

   allow-transfer { key station1-station2 ; }

截图如下:

重启服务

下面开始配置staiton2上的从服务器

   我们现测试一下现在是否能获取主DNS服务器上的zone文件,我们先删除掉slaves文件夹下的zone文件,重启服务器,看看是否能获得文件。

   效果如下图:

   首先我们要用SCP命令把这个key文件拷贝到station2上的相应目录,并且设置权限和属主,这个步骤就不截图了。

   从DNS上要加载这个key文件,并且还要指定对于哪些服务器使用哪个key文件。

   开头添加:

   include “/etc/xiaosu.key”;

   server 192.168.0.1 {

   keys {  station1-station2 ; } ;

   };

   当然,还有非常重要的一个设置就是,在从DNS设置为任何机器都不允许传输,否则这一些都白费了,呵呵。

   也就所在options里面加入一行:

   allow-transfer { none ;} ;

   截图如下: 

重启服务之后,会发现这两个zone文件都过来了。

这样,我们就能保证主从之间的复制是安全的



主DNS服务器配置
执行下面命令生成一个密钥:
# dnssec-keygen -a hmac-md5 -b 128 -n host server-client
-a 指定加密方式。
-b 密码长度。
-n 指定名称为server-client,类型为host。
命令执行成功之后会在当前目录下生成两个文件:
Kserver-client.+157+39898.key
Kserver-client.+157+39898.private

在/var/named/chroot/var/named/目录下创建一个文件,作为传输时使用的key文件。
# touch dns.key; chown root.named dns.key
# vi dns.key
key server-client. {
        algorithm "hmac-md5";
        secret "dahP9T2T/NJaEYq3rykCRw==";
};
其中secret的内容为密钥文件中的KEY值,后面会有两个等号。
注意server-client后面有一个“.”。

修改/etc/named.caching-nameserver.conf文件,在对应的view里加入如下的选项:
allow-transfer { key server-client; };
include "/var/named/dns.key";

将主DNS的dns.key文件传输到辅DNS服务器的/var/named/chroot/var/named/目录下。
# scp /var/named/chroot/var/named/dns.key 192.168.1.9:/var/named/chroot/var/named/

辅助DNS服务器的配置
修改/etc/named.caching-nameserver.conf文件,在view里加入下面的参数,
include "/var/named/dns.key";

修改/etc/named.rfc1912.zones文件,在最上面添加下面的代码:
server 192.168.1.11 {
        keys { server-client.; };
};
注意server-client后面有一个“.”。

在辅助DNS服务器上测试
# dig -y server-client.:dahP9T2T/NJaEYq3rykCRw== @192.168.1.11 example.com axfr
;; Couldn't verify signature: clocks are unsynchronized
; <<>> DiG 9.3.4-P1 <<>> -y server-client. @192.168.1.11 example.com axfr
; (1 server found)
;; global options:  printcmd
server-client.          0       ANY     TSIG    hmac-md5.sig-alg.reg.int. 1255656298 300 16 DATWIxJ7uMoFmMNkL3nGnw== 16352 BADTIME 6 AABK190q
; Transfer failed.
错误提示“Couldn't verify signature: clocks are unsynchronized”,因为主辅之间的时间相差太大了。
主DNS服务器
# date
Fri Oct 16 10:43:55 CST 2009
辅助DNS服务器
# date
Fri Oct 16 09:28:11 CST 2009

将辅助DNS服务器的时间改为和主DNS服务器一致或相近:
# date -s "10:43:60"

再次测试
# dig -y server-client.:dahP9T2T/NJaEYq3rykCRw== @192.168.1.11 example.com axfr
; <<>> DiG 9.3.4-P1 <<>> -y server-client. @192.168.1.11 example.com axfr
; (1 server found)
;; global options:  printcmd
example.com.             86400   IN      SOA     server.example.com. root\@example.com. 42 10800 900 604800 86400
example.com.             86400   IN      NS      server.example.com.
client.example.com.      86400   IN      A       192.168.1.9
server.example.com.      86400   IN      A       192.168.1.11
example.com.             86400   IN      SOA     server.example.com. root\@example.com. 42 10800 900 604800 86400
server-client.          0       ANY     TSIG    hmac-md5.sig-alg.reg.int. 1255664540 300 16 Jm1BVMlLnI2UjtYzHEBz8w== 46958 NOERROR 0
;; Query time: 53 msec
;; SERVER: 192.168.1.11#53(192.168.1.11)
;; WHEN: Fri Oct 16 11:42:01 2009
;; XFR size: 5 records (messages 1)

 

转自: http://xiaosu.blog.51cto.com/2914416/536969

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值