CentOS6服务管理之DNS-RNDC管理DNS的实现

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:

     RNDC管理DNS的实现

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服务器端

 

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

 

一.rndc配置文件建立

我们先来看看控制named服务的密钥:

1
2
3
4
5
[root@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
[root@dns1 named]# rndc-confgen -r/dev/urandom >/etc/rndc.conf

我不使用/etc/rndc.key文件,所以需要将其删除,不然会报错哦:

1
2
3
[root@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
[root@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
[root@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
[root@dns1 named]# rndc stats         
[root@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
[root@dns1 named]# service named restart
Stopping named:                                           [  OK  ]
Starting named:                                           [  OK  ]

查看链接状态:

1
2
3
4
5
6
[root@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
[root@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
[root@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
[root@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.confoptions 语句里使用如下的 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; };



本文转自 远永201314 51CTO博客,原文链接:http://blog.51cto.com/7336056/1885303


相关文章
|
1月前
|
存储 缓存 算法
分布式锁服务深度解析:以Apache Flink的Checkpointing机制为例
【10月更文挑战第7天】在分布式系统中,多个进程或节点可能需要同时访问和操作共享资源。为了确保数据的一致性和系统的稳定性,我们需要一种机制来协调这些进程或节点的访问,避免并发冲突和竞态条件。分布式锁服务正是为此而生的一种解决方案。它通过在网络环境中实现锁机制,确保同一时间只有一个进程或节点能够访问和操作共享资源。
68 3
|
1月前
|
Linux 网络安全 Apache
CentOS 7.2配置Apache服务httpd(上)
CentOS 7.2配置Apache服务httpd(上)
207 1
|
19天前
|
域名解析 缓存 网络协议
浏览器中输入URL返回页面过程(超级详细)、DNS域名解析服务,TCP三次握手、四次挥手
浏览器中输入URL返回页面过程(超级详细)、DNS域名解析服务,TCP三次握手、四次挥手
|
20天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
61 2
|
19天前
|
安全 测试技术 数据安全/隐私保护
原生鸿蒙应用市场开发者服务的技术解析:从集成到应用发布的完整体验
原生鸿蒙应用市场开发者服务的技术解析:从集成到应用发布的完整体验
|
24天前
|
监控 安全 Linux
CentOS7下安装配置ntp服务的方法教程
通过以上步骤,您不仅能在CentOS 7系统中成功部署NTP服务,还能确保其配置合理、运行稳定,为系统时间的精确性提供保障。欲了解更多高级配置或遇到特定问题,提供了丰富的服务器管理和优化资源,可作为进一步学习和求助的平台。
54 1
|
1月前
|
Linux PHP Apache
CentOS 7.2配置Apache服务httpd(下)
CentOS 7.2配置Apache服务httpd(下)
48 1
|
2月前
|
自然语言处理 数据可视化 BI
文档解析(大模型版)服务体验评测
体验文档解析(大模型版)服务时,清晰的入门指南、操作手册和FAQ至关重要。若存在不足,需增加直观的操作流程说明(如动画演示)、深化高级功能文档,并提供实时在线支持,帮助用户快速解决问题。
|
2月前
|
弹性计算 自然语言处理 数据可视化
|
1月前
|
网络安全 Docker 容器
【Bug修复】秒杀服务器异常,轻松恢复网站访问--从防火墙到Docker服务的全面解析
【Bug修复】秒杀服务器异常,轻松恢复网站访问--从防火墙到Docker服务的全面解析
26 0

相关产品

  • 云解析DNS