BIND配置文件详解(一)

本文档摘录自《BIND9管理员手册》,若是有不对或者不清楚的地方,请你们告诉我,谢谢!
 
BIND配置文件详解(一)
 
BIND配置文件语法介绍
BIND配置文件语法介绍
logging 和options 语句只在每一个配置中出现一次。
 
1.acl语句
acl 语句的定义和使用
acl 语句给一个地址匹配表赋予了一个象征名称。它的名字来自于地址匹配列表的最基本功能:访问控制表列(ACLs)。
注意,一个地址表名必须首先在acl中定义了,而后才能在别处使用;提早调用是不容许的。
acl acl-name { address_match_list };
下列ACLs 组成:
acls
localhost 和localnets 的ACLs 目前不支持IPV6(也就是说,localhost不匹配主机的IPV6地址,localnets不匹配连上IPV6 网络的主机),由于缺少肯定本地IPV6 主机地址的标准方法。
 
2.controls语句
控制语句 controls 的定义和使用
controls {
inet ( ip_addr | * ) [ port ip_port ] allow { address_match_list }
keys { key_list };
[ inet ...; ]
};
controls 语句定义了系统管理员使用的,有关本地域名服务器操做的控制通道。这些控制通道被rndc用来发送命令,并从域名服务器中检索非DNS的结果。
 
inet 控制通道是一个监听在ip_addr(能够是ipv4或ipv6地址)地址上的ip_port端口的TCP socket。ip_addr 是“*”的话,则说明是一个ipv4的通配符;容许接受系统上的任何IPV4地址上的用户链接。要想监听全部ipv6地址上的链接,则应该使用“::”做为ip_addr。若是仅想在本地主机上使用rndc,建议使用loopback 地址(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 { }; 便可。
 
3.include语句
include语句的定义和使用
include 文件名;
include语句经过容许对配置文件的读或写,来简化对配置文件的管理。例如,它能够包含多个只能由域名服务器读取的私人密匙(private key)。
 
4. key语句
key语句的定义和使用
key key_id {
algorithm string;
secret string;
};
key 语句定义了一个用于TSIG的共享密匙。
key 语句能够出如今配置文件的开始或者在一个view语句中。定义在开始的key语句能够在全部视图中应用。在controls语句中使用的key必须事先定义在文件的开始。
key_id,也叫作密匙名,是确认一个域名的惟一密匙。能够在一个“server”语句中使用,使得发给这个服务器的请求都会用这个密匙进行加密,或者用于确认来自于地址匹配列表中的主机的请求,是否已经用这个名字、算法和secret的密匙进行了加密。
algorithm_id 是一个标记安全/鉴定的字符串。目前惟一由TSIG鉴别支持的算法是hmac-md5。secret_string 是算法要使用的机密级,是一个64位编码的字符串。
 
5.logging语句
日志logging语句的定义和使用
logging {
[ channel channel_name {
( file path name
[ versions ( number | unlimited ) ]
[ size size_spec ]
| syslog syslog_facility
| stderr
| null );
[ severity ( critical | error | warning | notice | info |debug [level ] | dynamic ); ]
[ print-category yes or no; ]
[ print-severity yes or no; ]
[ print-time yes or no; ]
}; ]
[ category category_name {
channel_name ; [ channel_name ; … ]
}; ]
...
};
logging语句为域名服务器设定了一个多样性的logging选项。它的channel短语对应于输出方式、格式选项和分类级别,它的名称能够与category短语一块儿定义多样的日志信息。
 
只用一个logging语句就能够用来定义多个channel和category。若是没有logging 语句的话,logging设置就是:
logging {
category "unmatched" { "null"; };
category "default" { "default_syslog"; "default_debug"; };
};
 
在BIND9中,logging的配置只有在整个配置文件被读取后才被执行。而在BIND8中,logging部分被读取后就开始执行了。当服务器启动时,全部在配置文件中关于语法错误的logging信息都转到缺省通道(channel)中,或者使用”-g”选项,指定转成标准错误。
 
A.channel 短语
全部日志会输出到一个或多个channel中;你能够定义全部你想要的通道。每一个通道的定义必须包括一个目的字句,用来肯定所选的相关通道的信息,将会被输出到一个文件,或者到一个特殊的syslog工具,或者到一个标准错误流,或者被忽略。它也能够随意的限制通道能接受的信息级别(默认值info),定义是否包含一个由named产生的时间标记,或者是否包含分类的名称、级别等(默认是不包含任何内容)。
目的子句为null时,会使全部发送给通道的信息被丢弃;那样的话,其余通道选项就没有意义了。
目的子句为file 时,会使通道的内容输出到一个磁盘文件。它能够包含这个文件的大小和该文件能够保存多少个版本。
若是使用versions日志文件选项,named就会自动保留多个版本的日志文件。例如,若是选择保存文件lamers.log的三个老版本,那么在它被打开的时候lamers.log.1被改名为lamers.log.2,lamers.log.0 被改名为lamers.log.1 ,lamers.log 被改名为lamers.log.0。也能够设置version unlimited,这样就没有备份版本的限制了。
若是对日志文件设置了size选项,那么仅当此文件超过了设定的大小时,系统就会进行改名。默认状况下不储存备份文件;全部存在的日志文件被简单进行追加。文件的size 选项用来限制日志的增加。若是文件超过了限制,又没有versions选项,则named 就会中止写入文件。若是保留了备份版本,则备份文件如上所述进行滚动命名,而后开始建立一个新的文件。若是没有versions选项,也没有其它的机制来删除或减少日志文件,则系统就不会有数据继续写入日志中。默认状态是不限制文件的大小的。
size 和versions 选项的使用例子:
channel "an_example_channel" {
file "example.log" versions 3 size 20m;
print-time yes;
print-category yes;
};
syslog 目的子句是把通道指向系统日志。它的参数是一个syslog的前缀,如syslog帮助中所述。syslog是怎样处理带有这些前缀的信息,能够参考syslog.conf 的帮助信息。
severity子句象syslog中的”priorites”同样工做,惟一区别的是用户能够直接写入一个文件,而不是使用syslog写入一个文件。不到严重级的信息将不会被通道选择;高严重级的信息将会被接受。
若是用户正在使用syslog,那么syslog.conf 的优先级也会决定什么会最终经过。例如,将channel facility和severity定义成daemon和debug,就不会只记录经过syslog.conf的daemon.warning信息,后者会使severity是info和notice的信息被丢弃。若是状况相反,named就会只记录warning或更高级别的信息,而syslogd则会记录来自于通道的全部信息。
stderr目的子句将通道输出到服务器的标准错误流。它用于服务器在前台运行的状况下,例如,当处于debug模式的时候,服务器能提供丰富的调试信息。若是服务器的全局debug级别(globe debug level)大于0,debug 模式将被激活。全局debug级别能够经过在启动named时设置“-d”参数加一个正数,或运行rndc trace来设置。若是要关闭debug模式,则将全局debug 级别设置成0,或运行rndc notrace。服务器中全部的debug信息有一个debug级别,高调试级给出更详细的输出。
例如,指定调试严重级别的通道:
channel "specific_debug_level" {
file "foo";
severity debug 3;
};
上例中,服务器在处于debug模式的时候都会收到3级和比3级小的级别的调试信息,全局的调试级别在这里不起做用。dynamic严重级别的通道将使用服务器全局debug级别决定打印哪些信息。
若是使用了print-time参数,则日期和时间也将会记录下来。print-time也能够针对syslog的通道进行设置,但由于syslog也打印日期和时间,因此通常来说,这没有什么意义。若是设置了print-category 参数,则信息的分类也会记录下来。若是设置了print-severity参数,则信息的严重级别也会记录下来。print-xxx 选项能够进行多重组合,单输出格式都是这个顺序:时间、分类、严重级别。
 
下面是一个当三个打印选项都设置的例子:
28-Feb-2000 15:05:32.863 general: notice: running
下面是named 提早定义的四个通道,用于指定缺省的日志。
channel "default_syslog" {
syslog daemon; // 发送给syslog 的daemon facility
severity info; //只发送此优先级和更高优先级的信息
};
channel "default_debug" {
file "named.run"; // 写入工做目录下的named.run 文件。注意:若是服务器用-f 参数启动,则"named.run"会被stderr 所替换。
severity dynamic; // 按照服务器当前的debug 级别记录日志
};
channel "default_stderr"{
stderr; //写到stderr
severity info; //只发送此优先级和更高优先级的信息
};
channel "null" {
null; // 丢弃全部发到此通道的信息
};
default_debug 通道有特殊的性质:只有当服务器的debug级别非0的时候,它才产生输出。通常来讲,它会在服务器的工做目录中写入named.run文件。
由于安全缘由,当在命令行选项中使用了“-u”参数后,只有当named使用了新的UID
后,named.run文件才会产生,以root身份启动和运行的named所产生的debug信息将会被丢弃。若是用户须要获得这些输出,则必须使用“-g”参数运行服务器,并从新将标准错误定向到一个文件中去。
一旦定义好一个通道,它就不能被从新定义。这样就不能修改内置的通道,可是能够通
过把分类指向你已经定义的通道,来修改默认的日志记录。
 
B. category 短语
这里存在许多分类,用户可根据须要定义想看到或不想看到的日志。若是你不将某个分 类指定到某些通道的话,那么在这个分类的日志信息就会被发送到default分类通道中。如 果用户没有设定缺省的分类,下列"default"则会被系统使用:
category "default" { "default_syslog"; "default_debug"; };
 
做为一个例子,假定你要在文件中记录安全事件,但您也要保留缺省的日志文件。最 好按照下面配置:
channel "my_security_channel" {
file "my_security_file";
severity info;
};
category "security" {
"my_security_channel";
"default_syslog";
"default_debug";
};
为了丢弃一个分类中的全部信息,能够设定null 通道:
category "xfer-out" { "null"; };
category "notify" { "null"; };
 
下面是可用的分类和相关的简明描述,之后的BIND版本中会包含更多的分类。
aaaaaaa
相关文章
相关标签/搜索