设为首页 收藏本站
查看: 829|回复: 0

[经验分享] CentOS6服务管理之DNS-RNDC管理DNS的实现

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-12-26 11:03:00 | 显示全部楼层 |阅读模式
rndc:(Remote NameDomain Controller)基于套接字与named服务通信,控制named服务完成特定操作。是指通过bind 软件引进的远程控制通道,代替unix 信号来控制 named 进程,可以用来对配置进行重新载入,是一款安全软件。
rndc 通过一个 TCP 连接与域名服务器通信,发送经过数字签名认证的命令。在当前版本的rndc 和 named 中,唯一支持的认证算法是 HMAC-MD5,在连接的两端使用共享密钥。它为命令请求和名字服务器的响应提供 TSIG类型的认证。所有经由通道发送的命令都必须被一个服务器所知道的 key_id 签名。
rndc 读一个配置文件来决定如何联系域名服务器并决定使用哪一个算法和密钥。
    rndc可以对本地及远程DNS服务器进行管理、控制而不用重启BIND,我们接下来介绍一下rndc实现管理本地DNS服务器或者远程DNS服务器。

实验环境:
CentOS release 6.6(Final)  两台
IP地址:
172.16.31.3      DNS1        主DNS服务器端
172.16.31.4      DNS2        从DNS服务器端

实验中我使用主DNS做rndc验证,通过允许从DNS服务器和本机管理DNS服务。

一.rndc配置文件建立
我们先来看看控制named服务的密钥:
1
2
3
4
5
[iyunv@dns1 named]# cat /etc/rndc.key
key "rndc-key" {
       algorithm hmac-md5;
       secret "+lDBBFBGg6U3SYDzY/4YYQ==";
};

其实我们使用上面的密钥就可以了,但是我们可以通过rndc的命令来实现新建密钥配置文件,达到增强安全性的目的。
#rndc-confgen        #rndc配置文件生成器
单独执行不加参数会卡住
因为rndc-confgen命令默认会去/dev/random和/dev/urandom读取随机数生成密钥,第一顺序是/dev/random。
         #/dev/random:从熵池中取随机数,如果熵池中的随机数被用尽,则阻塞相关进程
         #/dev/urandom:从熵池中取随机数,如果熵池中的随机数被用尽,则用软件生成伪随机数

我们尽量使用/dev/urandom来生成随机数密钥,我们将其结果输入一个rndc配置文件保存:
1
[iyunv@dns1 named]# rndc-confgen -r/dev/urandom >/etc/rndc.conf
我不使用/etc/rndc.key文件,所以需要将其删除,不然会报错哦:
1
2
3
[iyunv@dns1 named]# rndc stats
WARNING: key file (/etc/rndc.key) exists,but using default configuration file (/etc/rndc.conf)
#rm –f /etc/rndc.key

二.配置DNS服务器的主配置文件,加入rndc管理密钥文件
将图中标明的那段复制到DNS服务器的主配置文件/etc/named.conf中
                            wKioL1SK8ybAvrDFAAD6Ff1Accs927.jpg
然后按下图所示将#号去除,然后配置好限定管理的IP:
wKiom1SK8pqSUJAZAAGoBztQqLM360.jpg
下面附上我的配置好的文件,每台机器的密钥都不同,所以不要复制:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
[iyunv@dns1 named]# cat /etc/named.conf
//
// named.conf
//
// Provided by Red Hat bind package toconfigure the ISC BIND named(8) DNS
// server as a caching only nameserver (asa localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ forexample named configuration files.
//

options {
       //listen-on port 53 { 127.0.0.1; };
       //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 no;
       dnssec-validation no;
       dnssec-lookaside no;

       /* 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";
};

# Use with the following in named.conf,adjusting the allow list as needed:
key "rndc-key" {
     algorithm hmac-md5;
     secret "5xhClxlukK5HSJxmZ4ZV8w==";
};
#
controls {
      inet 0.0.0.0 port 953
               allow { 172.16.31.4; 127.0.0.1;} keys { "rndc-key"; };
};
# End of named.conf

include"/etc/named.rfc1912.zones";
include "/etc/named.root.key";

三.测试rndc的管理功能
重启named服务:
1
2
3
[iyunv@dns1 named]# service namedrestart  
Stopping named:                                           [  OK  ]
Starting named:                                           [  OK  ]

然后我们就可以使用rndc命令:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[iyunv@dns1 named]# rndc stats         
[iyunv@dns1 named]# rndc status
version: 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6
CPUs found: 1
worker threads: 1
number of zones: 21
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/0/1000
tcp clients: 0/100
server is up and running

四.设置从DNS服务器来通过rndc管理主DNS服务器
本机主DNS服务器可以使用rndc管理命令,但是rndc客户端从DNS服务器还没配置,我们来配置一下:
主DNS服务器配置:
1
2
3
4
controls {
    inet  0.0.0.0 port 953
               allow { 127.0.0.1; 172.16.31.3;172.16.31.4; } keys { "rndc-key"; };
};
在allow字段里面加入从服务器的IP地址,并且将允许管理的网络设置成0.0.0.0

从DNS服务器配置:
将主DNS服务器的/etc/rndc.conf文件的如下段复制到从服务器中的/etc/rndc.conf中;可能需要将原来的rndc-key注释掉:
1
2
3
4
5
6
7
8
9
10
key "rndc-key" {
       algorithm hmac-md5;
       secret "5xhClxlukK5HSJxmZ4ZV8w==";
};

options {
       default-key "rndc-key";
       default-server 127.0.0.1;
       default-port 953;
};
将从服务器中的options字段改成下面的配置:
1
2
3
4
5
6
7
8
9
10
key "rndc-key" {
       algorithm hmac-md5;
       secret "5xhClxlukK5HSJxmZ4ZV8w==";
};

options {
       default-key "rndc-key";
       default-server 172.16.31.3;
       default-port 953;
};

重启named服务:
1
2
3
[iyunv@dns1 named]# service named restart
Stopping named:                                           [  OK  ]
Starting named:                                           [  OK  ]
查看链接状态:
1
2
3
4
5
6
[iyunv@dns1 named]# ss -tunl |grep 53
udp   UNCONN     0      0            172.16.31.3:53                    *:*   
udp   UNCONN     0      0              127.0.0.1:53                    *:*   
tcp   LISTEN     0      3            172.16.31.3:53                    *:*   
tcp    LISTEN    0      3              127.0.0.1:53                    *:*   
tcp   LISTEN     0      128                    *:953                   *:*

可以看出953端口开放了。
1
2
3
4
5
6
7
8
9
10
11
12
13
[iyunv@dns1 named]# rndc status
version: 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6
CPUs found: 1
worker threads: 1
number of zones: 21
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/0/1000
tcp clients: 0/100
server is up and running

在从DNS服务器上重启:
1
2
3
[iyunv@dns2 named]# service named restart
Stopping named:                                           [  OK  ]
Starting named:                                           [  OK  ]

测试从DNS服务器可以管理主DNS服务器:
1
2
3
4
5
6
7
8
9
10
11
12
13
[iyunv@dns2 named]# rndc -s 172.16.31.3 status
version: 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6
CPUs found: 1
worker threads: 1
number of zones: 21
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/0/1000
tcp clients: 0/100
server is up and running


四.rndc的常用命令
语法:rndc [-b source-address] [-c config-file] [-k key-file] [-s server]
           -p port] {command}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#rndc -h 获取帮助
reload                         #重新装载配置文件及区域解析库文件
reload zone                    #只装载指定区域解析库文件
refresh zone                   #维护
retransfer zone                #在不检查序列号的情况下直接传送一个区域数据文件
notify zone                    #重新通知区域数据文件
reconfig                       #只重新装载配置文件及新增的区域
querylog                       #启用或关闭查询日志,默认关闭
        #rndc  querylog
        #rndc  status
        #
        #tail /var/log/messages

stop                           #将更新信息发送给服务器,然后关闭DNS服务器
trace level                    #指明调试级别,不跟数字逐级增加,可以明确指定(如trace 3)
notrace                        #关闭调试
flush                          #清除服务器缓存
    Bind安全配置实现
一.ACL
访问控制列表(ACL)就是一个被命名的地址匹配列表。使用访问控制列表可以使配置简单而清晰,一次定义之后可以在多处使用,不会使配置文件因为大量的 IP 地址而变得混乱。

二.定义 ACL
要定义访问控制列表,可以在 BIND 的主配置文件 /etc/bind/named.conf 中使用 acl 语句来实现。acl 语句的语法为:
1
2
3
acl acl_name {
  address_match_list;
};

BIND 里默认预定义了 4 个名称的地址匹配列表,他们可以直接使用,分别为:
any : 所有主机
localhost : 本机
localnets : 本地网络上的所有主机
none : 不匹配任何主机

acl 是 named.conf 中的顶级语句,不能将其嵌入其他的语句。
要使用用户自己定义的访问控制列表,必须在使用之前定义。
因为可以在 options 语句里使用访问控制列表,所以定义访问控制列表的 acl 语句应该位于 options 语句之前。
为了便于维护管理员定义的访问控制列表,可以将所有定义acl 的语句存放在单独的文件 /etc/bind/named.conf.acls 中,然后在主配置文件/etc/bind/named.conf 中如下语句
include"/etc/bind/named.conf.options";
之前添加如下的配置行
include"/etc/bind/named.conf.acls";
亦可以在/etc/named.conf中直接定义,我就是直接定义后调用的。


三.使用 ACL
1.定义了 ACL 之后,可以在如下的子句中使用
子句  语句  说明
allow-query options,zone  #指定哪主机或网络可以查询本服务器或区,默认的是允许所有主机进行查询。
allow-transfer  options,zone #指定哪些主机允许和本地服务器进行域传输,默认值是允许和所有主机进行域传输。
allow-recursion  options #指定哪些主机可以进行递归查询。如果没有设定,缺省是允许所有主机进行递归查询的。注意禁止一台主机的递归查询,并不能阻止这台主机查询已经存在于服务器缓存中的数据。
allow-update  zone  #指定哪些主机允许为主域名服务器提交动态 DNS 更新。默认为拒绝任何主机进行更新。
blackhole options  #指定不接收来自哪些主机的查询请求和地址解析。默认值是 none 。
上面列出的一些配置子句既可以出现在全局配置 options 语句里,又可以出现在 zone 声明语句里,当在两处同时出现时,zone 声明语句中的配置将会覆盖全局配置 options 语句中的配置。

2.ACL 使用举例
限制查询
实例:假如要限制只有172.16.31.0/24 和172.16.131.0/24 查询本地服务器的所有区信息,可以在 /etc/named.conf中options 语句里使用如下的 allow-query 子句
1
2
3
4
5
options {
......
allow-query { 172.16.31.0/24; 172.16.131.0/8;};
......
};

上面的配置没有使用 ACL,若使用 acl,需要以下的配置步骤:
a.在 /etc/named.conf 中添加如下的 acl 语句,对允许查询的主机列表命名
1
2
3
4
acl aclist {
172.16.31.0/24;
172.16.131.0/24;
};

b.然后调用acl列表aclist进入options
1
2
3
4
5
options {
......
allow-query { aclist; };
......
};

限制区传输
例如:假如要限制只有172.16.31.3 和172.16.31.4 可以从本地服务器传输“oracle.ocm”的区信息,可以在/etc/named.rfc1912.zones的区域语句里使用如下的allow-transfer 子句
1
2
3
4
5
zone "oracle.com" IN {
       type master;
       file "oracle.com.zone";
                   allow-transfer{ 172.16.31.3; 172.16.31.3; };
};

上面的配置没有使用 ACL,若使用 acl,需要以下的配置步骤:
a. 在 /etc/ named.conf中添加如下的 acl 语句,对允许查询的主机列表命名
1
2
3
4
acl atlist {
172.16.31.3;
172.16.31.3;
};
b. 在 /etc/named.conf 中使用定义的acl_name 限制允许进行域传输的主机列表
1
2
3
4
5
zone "oracle.com" {
  type master;
  file "oracle.com.zone";
  allow-transfer { atlist; };
};


限制递归
实例:假如我们只允许本地172.16.31.0/24网段来进行递归查询
编辑/etc/named.conf文件:
直接acl实现
1
2
3
acl localnet {
         172.16.31.0/24;
}
将acl加入递归查询允许网段:
1
2
//recursion yes;
allow-recursion  {localnet; };



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-319627-1-1.html 上篇帖子: ruby对文件和目录的基本操作 下篇帖子: linux-ubuntu常见的子目录及其作用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表