Bind DNS服务——带KEY的区域传送与子域授权

Linux基础服务——Bind DNS服务 Part3

带KEY的区域传送与子域授权

带KEY的区域传送

上文提到了区域传送,但实际上在区域传送的时,传送的区域文件并不会被加密。因此一般的区域传送并不安全,黑客可以捕获数据包并篡改区域传送的内容,使得dns解析异常。
我们可以使用KEY来加密区域数据进行传送,防止数据被篡改。(如下图,WireShark抓包,在主DNS响应从DNS的IXFR的数据包中得到了区域信息)

那么Bind9使用TSIG(Transaction SIGnatures)来实现对DNS事务的加密签名。Bind9提供了tsig-keygen命令行工具生成密钥。

[root@dns1 ~]# tsig-keygen test.com-key  //该命令输出的内容应添加到named.conf文件中,此处仅是单纯输出到屏幕
key "test.com-key" {                     //key后接密钥名定义了tsig的密钥,algorithm定义算法,secret为密文
        algorithm hmac-sha256;
        secret "sQjKG2BJZuQrKHghrKyCZrtjkTIaJ5tEygkxDIs7a0g=";
};

将重新生成密钥并保存至文件,然后在named.conf文件中包含该文件来将密钥引入主配置文件中。

[root@dns1 ~]# cd /var/named/
[root@dns1 named]# mkdir zone-key
[root@dns1 named]# tsig-keygen test.com-key >> zone-key/test.com.key
 
include "/var/named/zone-key/test.com.key";  //将该行添加至named.conf文末

修改test.com区域定义为如下内容:

zone "test.com" IN {
        type master;
        file "test.com.zones";
        allow-transfer { key test.com.key; };   //只有拥有该把密钥的服务器才能进行传送。
};

接下来修改test.com区域文件,增加Serial触发区域传输并查看日志结果。(添加条目并将Serial变大即可,略)

Jun 08 08:26:42 dns2 named[2044]: client @0x7fb83c0bf880 192.168.100.50#48500: received notify for zone 'test.com'
Jun 08 08:26:42 dns2 named[2044]: zone test.com/IN: notify from 192.168.100.50#48500: serial 4
Jun 08 08:26:42 dns2 named[2044]: zone test.com/IN: Transfer started.
Jun 08 08:26:42 dns2 named[2044]: transfer of 'test.com/IN' from 192.168.100.50#53: connected using 192.168.100.60#52515
Jun 08 08:26:42 dns2 named[2044]: transfer of 'test.com/IN' from 192.168.100.50#53: resetting
Jun 08 08:26:42 dns2 named[2044]: transfer of 'test.com/IN' from 192.168.100.50#53: connected using 192.168.100.60#57649
Jun 08 08:26:42 dns2 named[2044]: transfer of 'test.com/IN' from 192.168.100.50#53: failed while receiving responses: REFUSED    //可见区域传送被拒绝了
Jun 08 08:26:42 dns2 named[2044]: transfer of 'test.com/IN' from 192.168.100.50#53: Transfer status: REFUSED
Jun 08 08:26:42 dns2 named[2044]: transfer of 'test.com/IN' from 192.168.100.50#53: Transfer completed: 0 messages, 0 records, 0 bytes, 0.001 secs (0 bytes/sec)

那么接下来我们在从DNS服务器上创建相应目录,并传输密钥到从服务器上引入再次进行尝试。

[root@dns2 ~]# cd /var/named/
[root@dns2 named]# mkdir zone-key
[root@dns2 named]# scp dns.test.com:/var/named/zone-key/* zone-key/
root@dns.test.com's password:
test.com.key                                                                                                                                              100%  104   111.3KB/s   00:00
[root@dns2 named]# vim /etc/named.conf
zone "test.com" IN {                                    //修改区域定义配置
        type slave;
        file "slaves/test.com.zone";
        masters { 192.168.100.50 key test.com-key; };   //使用test.com-key密钥进行传输
};
include "/var/named/zone-key/test.com.key";  //将该行添加至named.conf文末

配置完成后再次进行尝试。

Jun 08 08:40:25 dns2 named[2128]: client @0x7fc4b00bf880 192.168.100.50#43731: received notify for zone 'test.com'
Jun 08 08:40:25 dns2 named[2128]: zone test.com/IN: notify from 192.168.100.50#43731: serial 4
Jun 08 08:40:25 dns2 named[2128]: zone test.com/IN: Transfer started.
Jun 08 08:40:25 dns2 named[2128]: transfer of 'test.com/IN' from 192.168.100.50#53: connected using 192.168.100.60#53415 TSIG test.com-key
Jun 08 08:40:25 dns2 named[2128]: zone test.com/IN: transferred serial 4: TSIG 'test.com-key'
Jun 08 08:40:25 dns2 named[2128]: transfer of 'test.com/IN' from 192.168.100.50#53: Transfer status: success
Jun 08 08:40:25 dns2 named[2128]: transfer of 'test.com/IN' from 192.168.100.50#53: Transfer completed: 1 messages, 11 records, 360 bytes, 0.001 secs (360000 bytes/sec)
Jun 08 08:40:25 dns2 named[2128]: zone test.com/IN: sending notifies (serial 4)

可见成功使用TSIG密钥对区域传送进行签名。

子域授权

对于test.com 我们可以有一个子域为ms.test.com,我们可以将子域授权给另一个服务器进行解析。具体的DNS查询流程如下图。

下面开始配置,首先在test.com区域文件中指定ms.test.com域交由哪个服务器进行解析。(使用NS记录进行指定)

@       IN SOA  dns.test.com. admin.test.com. (
                                        4       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns
        NS      dns2
ms      NS      dns2                    //添加这一行,ms后会自动添加$ORIGIN,那么完整记录也就是ms.test.com.    NS    dns2.test.com.
Linux   A       192.168.200.30
tomcat  A       192.168.100.90
dns2    A       192.168.100.60          //需要对子域服务器进行解析。
dns     A       192.168.100.50
www     A       192.168.100.20
web.test.com.   A       192.168.100.10

以上内容配置完毕后重启服务,然后对DNS2服务器进行配置。添加ms.test.com的区域定义并编写区域配置文件

//添加如下内容到named.conf
zone "ms.test.com" IN {
        type master;
        file "ms.test.com.zones";
};
//编写区域文件
$TTL 1D
@       IN SOA  dns2.test.com. admin.test.com. (
                                        1       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns2.test.com.
dns2    A       192.168.100.60
www     A       192.168.200.10
web     A       192.168.200.20

配置完毕后重新启动服务。进行测试。

PS C:\Users\77653> nslookup - 192.168.100.50
默认服务器:  dns.test.com
Address:  192.168.100.50

> www.ms.test.com
服务器:  dns.test.com
Address:  192.168.100.50

非权威应答:
名称:    www.ms.test.com
Address:  192.168.200.10

可以看到,主DNS服务器并不负责ms.test.com这个区域的解析,但我们还是得到了结果。
通过抓包可以看到具体的DNS的查询过程。

posted @ 2021-06-08 21:33  ZywOo  阅读(528)  评论(0编辑  收藏  举报