[DNS]ACL、also-notify、视图服务器及安全设置
1. ACL :访问控制列表放在named.conf的头部,如果acl的内容太多,可以另创建一个文件,将acl放在该文件中,再在主配置文件named.conf用include 将文件加载进来(记得放在头部)
访问控制列表的作用:可以用在配置文件像allow-query{ mynet; }; 使我们只需要定义一个acl,而不需要敲多遍同样的地址
示例:
# vim /etc/named.conf
    acl mynet {
        10.0.0.0/16;
        192.168.10.10;
        172.16.0.0/24;
	};
BIND默认预定义了4个名称的地址匹配列表
any:所有主机
localhost:本机
localhosts:本地网络上的所有主机
none:不匹配任何地址
	
2. also-notify:主动通知从域名服务器进行更新,在主域名服务器进行更新后,而不需要在等规定的时间后才通知从域名服务器进行更新
# vim /etc/named.conf
    options {
    also-notify { 10.0.5.151; };
    };
    
3. 基于视图(view)的域名服务器
(1) 分离解析(split)
作用:将来自不同地址的客服机请求解析同一域名时,为其提供不同的解析结果
案例:现在我在我之前做的主域名服务器做视图域名服务器,现在这台主机由两个网卡,ip分别是192.168.100.20,192.168.200.20,我现在要实现如果是192.168.100.0的网段的主机做域名解析,例如nslookup dns.hngd.com,将返回该域名的IP为192.168.100.20;如果是192.168.200.0的网段的主机做域名解析,例如nslookup dns.hngd.com,将返回该域名的IP为192.168.200.20。
1. 在named.conf主配置文件中为不同的客户机地址启用不同的zone区域设置,各自使用独立的数据文件
[root@主人 ~]# cat /etc/named.conf 
options {
	listen-on port 53 { any; };
	listen-on-v6 port 53 { ::1; };
	directory 	"/var/named";
	dump-file 	"/var/named/data/cache_dump.db";
    statistics-file "/var/named/data/named_stats.txt";
    memstatistics-file "/var/named/data/named_mem_stats.txt";
	allow-query     { any; };
	recursion yes;
	dnssec-enable yes;
	dnssec-validation yes;
	dnssec-lookaside auto;
	/* Path to ISC DLV key */
	bindkeys-file "/etc/named.iscdlv.key";
	managed-keys-directory "/var/named/dynamic";
};
/*logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
zone "." IN {
	type hint;
	file "named.ca";
};
*/
view 'internal' {  //内部网络
	match-clients{ 192.168.100.0/24; }; //匹配192.168.100.0网段的客户机
	zone "hngd.com" IN{
		type master;
		file "inter.hngd.zones";
		allow-update { none; };
	};
	zone "100.168.192.in-addr.arpa" IN{
		type master;
		file "inter.192.168.100.zone";
		allow-update{ none; };
	};
};
view 'external' { //外部网络
        match-clients{ 192.168.200.0/24; };   //匹配192.168.200.0网段的客户机
        zone "hngd.com" IN{
                type master;
                file "exter.hngd.zones";
                allow-update { none; };
        };
        zone "200.168.192.in-addr.arpa" IN{
                type master;
                file "exter.192.168.100.zone";
                allow-update{ none; };
        };
};
#include "/etc/named.rfc1912.zones";
#include "/etc/named.root.key";
2. 配置zone文件
[root@主人 ~]# cat /var/named/inter.hngd.zones 
$ORIGIN hngd.com.
$TTL 1D
@	IN 	SOA	dns.hngd.com. admin.hngd.com. (
			2016032012
			1D
			1H
			1W
			3H
) 
	NS	dns.hngd.com.
	NS	slave.hngd.com.
	MX	5	mail.hngd.com.
slave	IN	A	192.168.100.2
dns	IN	A	192.168.100.20
mail	IN	A	192.168.100.10
www	IN	A	192.168.100.11
bbs	IN	CNAME	www
[root@主人 ~]# cat /var/named/inter.192.168.100.zone 
$ORIGIN 100.168.192.in-addr.arpa.
$TTL 1D
@	IN 	SOA	dns.hngd.com. admin.hngd.com. (
			2016032012
			1D
			1H
			1W
			3H
) 
	NS	dns.hngd.com.
20 	IN	PTR	dns.hngd.com.
10	IN 	PTR	mail.hngd.com.
11	IN	PTR	www.hngd.com.
2	IN	PTR	slave.hngd.com.
[root@主人 ~]# cat /var/named/exter.hngd.zones   
$ORIGIN hngd.com.
$TTL 1D
@	IN 	SOA	dns.hngd.com. admin.hngd.com. (
			2016032012
			1D
			1H
			1W
			3H
) 
	NS	dns.hngd.com.
	MX	5	mail.hngd.com.
dns	IN	A	192.168.200.20
mail	IN	A	192.168.200.10
www	IN	A	192.168.200.11
bbs	IN	CNAME	www
[root@主人 ~]# cat /var/named/exter.192.168.100.zone 
$ORIGIN 200.168.192.in-addr.arpa.
$TTL 1D
@	IN 	SOA	dns.hngd.com. admin.hngd.com. (
			2016032012
			1D
			1H
			1W
			3H
) 
	NS	dns.hngd.com.
20 	IN	PTR	dns.hngd.com.
10	IN 	PTR	mail.hngd.com.
11	IN	PTR	www.hngd.com.
2	IN	PTR	slave.hngd.com.
3. 注意要将zone数据文件的属主和属组都改为named
-rw-r--r-- 1 named named  243 3月  27 10:20 exter.192.168.100.zone
-rw-r--r-- 1 named named  238 3月  27 10:20 exter.hngd.zones
-rw-r--r-- 1 named named  243 3月  20 19:07 inter.192.168.100.zone
-rw-r--r-- 1 named named  283 3月  20 19:05 inter.hngd.zones
4. 将/etc/resolv.conf文件的nameserver 改为192.168.100.20
5. 重启named服务
6. 关闭防火墙和selinux
7. 测试:发现同一个域名在不同网段获取到不同的ip
[root@主人 ~]# nslookup dns.hngd.com 192.168.100.20
Server:		192.168.100.20
Address:	192.168.100.20#53
Name:	dns.hngd.com
Address: 192.168.100.20
[root@主人 ~]# nslookup dns.hngd.com 192.168.200.20
Server:		192.168.200.20
Address:	192.168.200.20#53
Name:	dns.hngd.com
Address: 192.168.200.20
题外话:一个文件的属主如果被删除,那我们再用ls -l来查询该文件时会发现文件的属主是一个数字,该数字就是用户的UID
[root@lcl ~]# ll aa
-rw-r--r-- 1 aa bb 5 3月  22 15:30 aa
[root@lcl ~]# userdel aa
[root@lcl ~]# ll aa
-rw-r--r-- 1 516 bb 5 3月  22 15:30 aa
安全设置
allow-transfer{ 192.168.100.2; }; 只允许192.168.100.2主机传递主域名服务器的数据
事务签名
TSIG:保障主从DNS之间的复制安全性
*使用对称加密技术
*在主DNS上生成密钥
生成密钥
[root@lcl ~]# dnssec-keygen -a HMAC-MD5 -b 128 -n host 域名|视图名
-a:算法
-b:生成的密钥的长度
-n:名称
主DNS有视图的话则对每个视图要生成一个密钥
----------
案例:我还是拿之前那台主DNS做TSIG事务签名,实现安全通信
当前主DNS有两个网卡:192.168.200.20,192.168.100.20
从DNS有两个网卡:192.168.200.1,192.168.100.1
1. 在主DNS上生成密钥(每个视图都要生成一个密钥)
[root@主人 ~]# dnssec-keygen -a HMAC-MD5 -b 128 -n host internal
Kinternal.+157+18216
[root@主人 ~]# dnssec-keygen -a HMAC-MD5 -b 128 -n host external
Kexternal.+157+33008
[root@主人 ~]# cat Kexternal.+157+33008.key   //公钥、私钥是一致的
external. IN KEY 512 3 157 KW2B3L1xyD26/P9dYAQv+w==
[root@主人 ~]# cat Kexternal.+157+33008.private 
Private-key-format: v1.3
Algorithm: 157 (HMAC_MD5)
Key: KW2B3L1xyD26/P9dYAQv+w==
Bits: AAA=
Created: 20160327153349
Publish: 20160327153349
Activate: 20160327153349
2. 在主配置文件中加载密钥
#/etc/named.conf
key "internal" {
	algorithm hmac-md5;
	secret "0iTnpUvY5kOBjFkAAFN6xA==";
};
key "external" {
	algorithm hmac-md5;
	secret "KW2B3L1xyD26/P9dYAQv+w==";
};
3. 设置主服务器的named.conf配置文件,在具体视图中使用密钥访问
#/etc/named.conf
view 'internal' {
	match-clients{ 192.168.100.0/24; };
	server 192.168.100.1 { keys { internal; }; };  //指定从DNS的ip,并且需要通过密钥进行数据传输
	zone "hngd.com" IN{
		type master;
		file "inter.hngd.zones";
		allow-update { none; };
		allow-transfer { key internal; };   //从主DNS获取数据文件需要通过密钥认证
		also-notify {192.168.100.1; };      // master端配置, 修改配置后主动给slave发送更新通告消息
	};
	zone "100.168.192.in-addr.arpa" IN{
		type master;
		file "inter.192.168.100.zone";
		allow-update{ none; };
		allow-transfer { key internal; };
		also-notify {192.168.100.1; };
	};
};
view 'external' {
        match-clients{ 192.168.200.0/24; };
	    server 192.168.200.1 { keys { external; }; };
        zone "hngd.com" IN{
                type master;
                file "exter.hngd.zones";
                allow-update { none; };
		allow-transfer { key external; };
		also-notify {192.168.200.1; };
        };
        zone "200.168.192.in-addr.arpa" IN{
                type master;
                file "exter.192.168.100.zone";
                allow-update{ none; };
		allow-transfer { key external; };
        	also-notify {192.168.200.1; };
	};
};
4.在从服务器上配置密钥认证访问
key "internal" {
	algorithm hmac-md5;
	secret "0iTnpUvY5kOBjFkAAFN6xA==";
};
key "external" {
	algorithm hmac-md5;
	secret "KW2B3L1xyD26/P9dYAQv+w==";
};
view "internal" {
	match-clients{ 192.168.100.0/24; };
	server 192.168.100.20 { keys { internal; }; }; 
	zone "hngd.com" IN{
		type slave;
		file "slaves/inter.hngd.zones";
		masters { 192.168.100.20; };
		notify-source 192.168.100.20;   //默认是*, 表示当前的主机ip, 可以指定某个ip和port, ip必须在slave的master中包含,然后经过抓包(在master上抓取向slave发送NOTIFY信息的包)发现
	}; 
	zone "100.168.192.in-addr.arpa" IN{
		type slave;
		file "slaves/inter.192.168.100.zone";
		masters { 192.168.100.20; };
		notify-source 192.168.100.20; 
	};
};
view "external" {
        match-clients{ 192.168.200.0/24; };
	server 192.168.200.20 { keys { external; }; };
        zone "hngd.com" IN{
                type slave;
                file "slaves/exter.hngd.zones";
		masters { 192.168.200.20; };
		masters { 192.168.200.20; };
		notify-source 192.168.200.20; 
        };
        zone "200.168.192.in-addr.arpa" IN{
                type slave;
                file "slaves/exter.192.168.100.zone";
		masters { 192.168.200.20; };
		notify-source 192.168.200.20; 
	};
};
5. 配置好上面这些后,在从DNS上重启named服务,再查看/var/named/slaves,如果是否看到下面的数据文件
6. 如果没有,看看主从DNS服务器的防火墙和selinux有没有关闭,还有/etc/resolv.conf文件nameserver有没有写成相应的dns的ip 
7. 如果还是没有,看看/var/log/messgage,查看错误信息,如果是主从服务器没有同步的原因,那就进行
主从域名服务器要求时间同步,如果主从域名服务器时间不同步则会造成从域名服务器不能生成数据文件,查看/var/message发现时钟不同步,所以我们可以通过下面的方法来实现同步(主、从服务器都需要进行安装)
1.查看/etc/xinetd.d/下面有没有time-dgram、 time-stream
[root@主人 ~]# ls /etc/xinetd.d/
chargen-dgram   daytime-stream  echo-dgram   tcpmux-server
chargen-stream  discard-dgram   echo-stream  time-dgram
daytime-dgram   discard-stream  rsync        time-stream
2. 如果没有,需要安装xinetd
[root@localhost xinetd.d]# yum install xinetd
3.安装完后,启动time-dgram、 time-stream,xinetd服务
[root@localhost xinetd.d]# chkconfig time-dgram on
[A[root@localhost xinetd.d]# chkconfig time-stream on
[root@localhost xinetd.d]# service xinetd restart
Stopping xinetd:                                           [FAILED]
Starting xinetd:                                           [  OK  ]
4.rdate -s [目标主机的ip] :实现同步
[root@主人 ~]# rdate -s 192.168.100.1
 
                    
                     
                    
                 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号 
