在了解controls语句之前,需要先介绍 rndc,rndc(Remote Name Domain Controllerr)是一个远程管理bind的工具,通过这个工具可以在本地或者远程了解当前服务器的运行状况,也可以对服务器进行关闭、重载、刷新缓存、增加删除zone等操作。
参考文章:BIND之rndc介绍及使用
controls 语句定义了系统管理员使用的,有关DNS服务器操作的控制通道。这些控制通道被rndc用来发送命令,并从域名服务器中检索非DNS的结果。
controls { [ inet ( ip_addr | *) [ port ip_port ] allow { address_match_list } [ keys {key_list} ] [ read-only yes_or_no] ; ] [ inet ...; ] };
- inet:设置rndc的监听的ip(支持IPv4、IPv6),或使用 * ,表示支持任意的IP
- ip_port:端口,默认是953
举例说明:
controls { inet 192.168.80.110 port 953; inet *; //表示支持 192.168.80.110,127.0.0.1,::1,使用默认端口953 inet ::1; //IPv6 inet 127.0.0.1 port 953; //IPv4 }
这里建议使用(127.0.0.1 或::1)以获得最大安全性。
allow和keys子语用来限制通过控制通道发出命令的能力。根据address_match_list中的定义,来监控控制通道上的用户连接。address_match_list中的key_id成员则被忽略,反之则根据key_list来单独的表示。每个在key_list中的key_id都允许用来鉴别通过控制通道传送的命令和响应,这些服务器和用户端之间的命令和响应都经过了数字签名的技术处理。所有经过控制通道的命令都必须使用设置的密匙进行加密。如果没有设置controls语句,named就会建立一个默认控制通道,监听loopback地址127.0.0.1 和对应的IPV6地址::1。当有一个controls 语句,但没有key子句时,named将会试着从文件/etc/rndc.key(或者任意在BIND编译时设定的sysconfdir)中读取命令通道密匙。用rndc-confgen –a 命令,创建一个rndc.key文件。
rndc.key是用来简化从BIND8系统上的升级过程,因为BIND8 在它的命令通道中没有使用数字签名,也就没有key子句。这样,在BIND9安装后执行rndc-confgen –a 命令,BIND9就可以继续使用和BIND8一样的配置文件,并仍然使用类似于BIND8中的ndc一样的工作方式。既然rndc.key 的特性只是用于兼容BIND8配置文件,所以它的配置就没有什么高难度。
当用户想修改加密的信息时,当然不能简单的修改密匙名称和加密程度,而应该用用户自己的密匙来生成新的rndc.conf文件。rndc.key文件也有自己的读取权限设置,只有文件的所有者(运行named的用户)可以访问。如果用户要求能有更多的用户能够使用rndc,则生成rndc.conf文件时,将文件属组的权限置为可读,并将这些用户归入这个组就可以了。
要想禁止掉命令通道,则使用一条空controls语句:controls { }; 即可。
- read-only:默认是NO,用户具有读写的权限,设置为YES,则用户仅有读的权限。
举例说明:
使用命令生成rndc.key
# rndc-confgen -r /dev/urandom -a
controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key"; }; };
Pingback引用通告: Bind的安装与详细配置 | 精彩每一天