转载至:http://blog.csdn.net/naughty610/article/details/5723554

BIND 9 的高级配置

本页目录
BIND 9 的高级配置
ACL
定义 ACL
使用 ACL
ACL 使用举例
使用 View 分离内外服务器配置
关于分离内外服务器配置
View 语句
BIND 9 日志
BIND 日志的常用术语
logging 语句的语法
在 chroot jail 环境下运行 BIND 9
停止 bind 服务器的运行
创建 chroot jail 环境
修改 BIND 的默认启动参数
添加 BIND 系统日志路径
重新启动 bind9 和 sysklogdTags: ubuntu, dapper, netappsrv, bind, acl, view, logging, chroot 
« sitemap
« dapper « netappsrv 
BIND 9 的高级配置
内容提要

定义和使用访问控制列表
使用 View 配置分离的内外服务器
BIND 9 的日志配置
在 chroot jail 环境下运行 BIND 9
ACL
访问控制列表(ACL)就是一个被命名的地址匹配列表。使用访问控制列表可以使配置简单而清晰,一次定义之后可以在多处使用,不会使配置文件因为大量的 IP 地址而变得混乱。 
定义 ACL
要定义访问控制列表,可以在 BIND 的主配置文件 /etc/bind/named.conf 中使用 acl 语句来实现。acl 语句的语法为: 
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";

使用 ACL
定义了 ACL 之后,可以在如下的子句中使用 
子句  语句  说明  
allow-query  options,zone  指定哪主机或网络可以查询本服务器或区,默认的是允许所有主机进行查询。  
allow-transfer  options,zone  指定哪些主机允许和本地服务器进行域传输,默认值是允许和所有主机进行域传输。  
allow-recursion  options  指定哪些主机可以进行递归查询。如果没有设定,缺省是允许所有主机进行递归查询的。注意禁止一台主机的递归查询,并不能阻止这台主机查询已经存在于服务器缓存中的数据。 
allow-update  zone  指定哪些主机允许为主域名服务器提交动态 DNS 更新。默认为拒绝任何主机进行更新。 
blackhole  options  指定不接收来自哪些主机的查询请求和地址解析。默认值是 none 。 
上面列出的一些配置子句既可以出现在全局配置 options 语句里,又可以出现在 zone 声明语句里,当在两处同时出现时,zone 声明语句中的配置将会覆盖全局配置 options 语句中的配置。 
ACL 使用举例
限制查询
假如要限制只有 202.0.0.0/8 和 221.0.0.0/8 查询本地服务器的所有区信息,可以在 options 语句里使用如下的 allow-query 子句 
options {
......
allow-query { 202.0.0.0/8; 221.0.0.0/8; };
......
}; 
上面的配置没有使用 ACL,若使用 acl,需要以下的配置步骤: 
S1 在 /etc/bind/named.conf.acls 中添加如下的 acl 语句,对允许查询的主机列表命名 
acl aqlist {
  202.0.0.0/8; 
  221.0.0.0/8; 
};
S2 在 /etc/bind/named.conf.options 中使用定义的 acl_name 限制允许查询的主机列表 
options {
......
allow-query { aqlist; };
......
}; 
限制区传输
假如要限制只有 221.3.131.5 和 221.3.131.6 可以从本地服务器传输 “example.com” 的区信息,可以在 zone 语句里使用如下的 allow-transfer 子句 
zone "example.com" {
   type master;
   file "example.com.hosts";
   allow-transfer { 221.3.131.5; 221.3.131.6; };
};
上面的配置没有使用 ACL,若使用 acl,需要以下的配置步骤: 
S1 在 /etc/bind/named.conf.acls 中添加如下的 acl 语句,对允许查询的主机列表命名 
acl atlist {
  221.3.131.5; 
  221.3.131.6; 
};
S2 在 /etc/bind/named.conf.local 中使用定义的 acl_name 限制允许进行域传输的主机列表 
zone "example.com" {
   type master;
   file "example.com.hosts";
   allow-transfer { atlist; };
};
防止欺骗和拒绝服务攻击
为了防止欺骗和拒绝服务攻击,对于 Internet 上的每个 DNS 服务器至少应该有一个假地址的 ACL 和一个本地地址的 ACL。为此,需要执行如下的步骤 
S1 在 /etc/bind/named.conf.acls 中添加如下的 acl 语句 
// 创建一个名称为 "bogusnets" 的 ACL 来阻止经常用于欺骗性攻击的(RFC1918)地址空间
acl bogusnets {
    0.0.0.0/8; 
    1.0.0.0/8;
    2.0.0.0/8;
    169.254.0.0/16;
    192.0.2.0/24;
    224.0.0.0/3;
    10.0.0.0/8;
    172.16.0.0/12;
    192.168.0.0/16;
};
//创建一个名称为 "our-nets" 的 ACL,并将其配置为实际本网的 IP 地址段。
acl our-nets {    //用您的网络地址替换下面的地址列表
    x.x.x.x/24;
    x.x.x.x/21; 
}; 
S2 在 /etc/bind/named.conf.options 中使用定义的 acl_name 限制查询和响应 
options {
......
allow-query { our-nets; };
allow-recursion { our-nets; };
blackhole { bogusnets; };
......
}; 
使用 View 分离内外服务器配置
关于分离内外服务器配置
许多站点希望 DNS 对于内网访问和外网(Internet)访问看起来不一样,这种类型的配置称为“分离 DNS (Split DNS)”。 
这种配置可以用于如下的情况: 
对内网用户公开整个区的所有主机;对 Internet 用户只公开几台主机,如 www 服务器等
对内外用户指定不同的 RR,或对内网用户提供更多的 RR
可以在内网使用 RFC 1918 中定义的私有地址 
View 语句
在 BIND 9 中可以使用 view 语句进行配置分离 DNS 。 view 语句的语法为 
view view_name {
     match-clients { address_match_list };
     [ view_option; ...]
     zone_statement; ...
};
其中: 
match-clients 子句非常重要,它用于指定谁能看到本 view。
可以在 view 语句中使用一些选项,详细信息请参考 named.conf 的手册页
zone_statement 子句指定在当前 view 中可见的区声明 
如果在配置文件中使用了 view 语句,则所有的 zone 语句都必须在 view 中出现。
对同一个 zone 而言,配置内网的 view 应该置于外网的 view 之前。 
下面是一个使用 view 语句的例子,它摘自 BIND9 的文档。 
view  "internal" {
   match-clients { our-nets; };            // 匹配内网客户的访问
   recursion yes;                          // 对内网客户允许执行递归查询
   zone "example.com" {                    // 定义内网客户可见的区声明
      type master;
      file "example.com.hosts.internal";
   };
};
view  "external" {
   match-clients { any; };                 // 匹配 Internet 客户的访问
   recursion no;                           // 对 Internet 客户不允许执行递归查询
   zone "example.com" {                    // 定义 Internet 客户可见的区声明
      type master;
      file "example.com.hosts.external";
   };
};
接下来,需要在 example.com.hosts.internal 中创建内网客户可见的区文件,并在 example.com.hosts.external 中创建 Internet 客户可见的区文件。可以根据您的实际情况编写这两个文件,此处从略。 
BIND 9 日志
在默认情况下,BIND9 把日志消息写到 /var/log/messages 文件中,而这些日志消息是非常少的,主要就是启动,关闭的日志记录和一些严重错误的消息;而将调试日志信息写入 BIND 服务器工作目录中的 named.run 文件。 
BIND 9 的日志是可以灵活配置的,要详细记录服务器的运行状况,要在配置文件 named.conf 中使用 logging 语句来定制自己所需要的日志记录。 
BIND 日志的常用术语
在讲述 logging 语句的语法之前,先要熟悉一些常用术语 
术语  含义  
channel(通道)  日志输出方式,如:syslog、文本文件、标准错误输出或 /dev/null  
category(类别)  日志的消息类别,如:查询消息或动态更新消息等  
module(模块)  产生消息的来源模块名称  
facility(设备)  syslog 设备名  
severity(严重性)  消息的严重性等级

logging 语句的语法
logging 语句的语法为: 
logging {
    channel channel_name {                // 定义通道
        file log_file [versions number | unlimited] [size sizespec]; | syslog optional_facility; | null; | stderr;   
        // 定义输出方式
        severity log_severity;           // 定义消息严重性
        [print-time boolean;]            // 是否在消息中添加时间前缀,仅用于 file 日志
        [print-severity boolean;]        // 是否在消息中添加消息严重性前缀
        [print-category boolean;]        // 是否在消息中添加消息类别名前缀
   };
   category category_name {              // 定义类别
        channel_name;
& nbsp;       ...... 
   };
};
配置日志时,首先要定义通道,然后将不同的日志类别的数据指派到指定的通道上输出。 
BIND 9 的默认配置是: 
logging {
    // 由于使用了默认通道,所以没有通道定义部分
    category "default" { "default_syslog"; "default_debug"; };  
}; 
channel 语句
channel 语句用于定义通道。 
指定应该向哪里发送日志数据,需要在以下四种之间则其一:
file : 输出到纯文本文件
log_file 指定一个文件名
version 指定允许同时存在多少个版本的该文件,比如指定 3 个版本(version 3),就会保存 query.log、query.log0、query.log1 和query.log2。
size 指定文件大小的上限,如果只设定了size 而没有设定 version,当文件达到指定的文件大小上限时,服务器停止写入该文件。如果设定了version,服务器会进行循环,如把 log_file 变成 log_file.log1,log_file.log1 变成 log_file.log2 等,然后建立一个新的 log_file.log 进行写入。
syslog optional_facility :输出到 syslog,其中 optional_facility 是 syslog 的设备名,通常为以下几个
daemon
local0 到 local7
null :输出到空设备
stderr :输出到标准错误输出,默认为屏幕
severity 语句用于指定消息的严重性等级, log_severity 的取值为(按照严重性递减的顺序):
critical
error
warning
notice
info
debug [ level ]
dynamic 是一个特殊的值,它匹配服务器当前的调试级别
定义了某个严重性级别后,系统会记录包括该级别以及比该级别更严重的级别的所有消息。比如定义级别为 error,则会记录 critical 和error 两个级别的信息。
对于系统管理员来说,一般记录到 info 级别就可以了。
BIND 9 预制了如下四个默认通道; 
channel "default_syslog" {
 syslog daemon;     // 发送给 syslog 的 daemon 设备
 severity info;     // 只发送此 info 及其更高优先级的信息
};   
channel "default_debug" { // 只有当服务器的 debug 级别非 0 时,才产生输出。
 file "named.run"; // 写入工作目录下的 named.run 文件
 severity dynamic; // 按照服务器当前的debug 级别记录日志
};
channel "default_stderr" { 
        stderr;           // 写到stderr
        severity info;    // 只发送此 info 及其更高优先级的信息
}; 
channel "null" { 
        null;             // 丢弃所有发到此通道的信息
};
category 语句
category 语句是指定哪一种类别的信息使用哪个或者哪几个已经定义了的通道输出。 
BIND 9 中可用的类别名(category_name)有: 
类别  说明  
client  处理客户端请求。  
config  配置文件分析和处理。  
database 同BIND内部数据库相关的消息,用来存储区数据和缓存记录。  
default  匹配所有未明确指定通道的类别。  
dnssec  处理 DNSSEC 签名的响应。  
general  包括所有未明确分类的 BIND 消息。  
lame-servers 发现错误授权,即残缺服务器。  
network  网络操作。  
notify  区更新通知消息。  
queries 查询日志  
resolver 名字解析,包括对来自解析器的递归查询信息。  
security 批准/非批准的请求。  
update  动态更新事件。  
xfer-in  从远程名字服务器到本地名字服务器的区传送。  
xfer-out 从本地名字服务器到远程名字服务器的区传送。

例如要记录查询消息,可以在 named.conf 中添加如下配置: 
logging {
    channel query_log {
        file "query.log" versions 3 size 20m;
        severity info;
        print-time yes;
        print-category yes;
    };
    category queries {
        query_log;
    };
};
这样服务器会在工作目录(directory 语句所指定的目录,Ubuntu 为:/var/cache/bind)下创建 query.log 文件,并把运行过程产生的 queries 消息写如到此文件中。 
一般地,当 BIND 做了重大修改后,应该配置并监视日志,可能还要提高日志消息级别,一旦稳定后便可以还原配置。因为日志会占用大量的磁盘空间,尤其是查询日志。 
在 chroot jail 环境下运行 BIND 9
基于安全的考虑,应该在 chroot jail 环境下运行 BIND 9 。下面讲述将 BIND 9 运行在 /chroot/named jail 环境中的配置步骤。 
停止 bind 服务器的运行
sudo /etc/init.d/bind9 stop创建 chroot jail 环境
创建 chroot 目录
sudo mkdir -p /chroot/named
sudo chmod -R 700 /chroot
sudo mkdir /chroot/named/etc 
sudo mkdir /chroot/named/dev
sudo mkdir -p /chroot/named/var/cache/bind
sudo mkdir -p /chroot/named/var/run/bind/run
移动原始的 /etc/bind 目录到 /chroot/named/etc
sudo mv /etc/bind /chroot/named/etc
sudo ln -s /chroot/named/etc/bind /etc/bind  // 为原位置创建符号链接,以便将来更新 
创建设备并修改权限
sudo mknod /chroot/named/dev/null c 1 3
sudo mknod /chroot/named/dev/random c 1 8
sudo chmod 666 /chroot/named/dev/null 
sudo chmod 666 /chroot/named/dev/random
sudo chown -R bind:bind /chroot/named/var/*
sudo chown -R bind:bind /chroot/named/etc/bind
修改 BIND 的默认启动参数
使用如下命令修改 /etc/default/bind9 
sudo vi /etc/default/bind9将如下的行 
OPTIONS="-u bind"改为 
OPTIONS="-u bind -t /chroot/named"添加 BIND 系统日志路径
使用如下命令修改 /etc/init.d/sysklogd 
sudo vi /etc/init.d/sysklogd将如下的行 
SYSLOGD="-u syslog"改为 
SYSLOGD="-u syslog -a /chroot/named/dev/log"重新启动 bind9 和 sysklogd
sudo /etc/init.d/sysklogd restart
sudo /etc/init.d/bind9 start

bnd9高级配置 acl使用相关推荐

  1. Linux运维实战之DNS的高级配置(转发器、视图等)

    上次博文我们具体配置了一台DNS服务器并实现了主辅之间的区域传送,本次博文我们来看看DNS的一些高级配置. 在进行DNS的高级配置之前,必须要理解DNS的原理(参见http://sweetpotato ...

  2. 《Cisco/H3C交换机高级配置与管理技术手册》目录

    备受业界关注,备受无数读者殷切期待的,我的2012年新作--<Cisco/H3C交换机高级配置与管理技术手册>,经过一年的艰辛编写,现终于胜利封笔.现应许多热心读者的要求,把本书的原始目录 ...

  3. ACL访问控制列表 基础、创建ACL访问控制列表的两种方式、配置ACL访问控制列表规则、修改ACL规则的默认步长。子网掩码、反掩码、通配符掩码的区别和作用。

    目录 ACL的组成: 创建ACL访问控制列表的两种的方式: 1.数字命名: 2.字符串命名方式: ACL创建步骤: 1.先创建ACL列表: 进入acl列表: 2.配置ACL的一条条规则: 3.进入需要 ...

  4. 超详细如何配置ACL

    配置基本的访问控制列表 原理概述: 访问控制列表ACL(Access Control List)是由permit或deny语句组成的一系列有顺序的规则集合,这些规则根据数据包的源地址.目的地址.源端口 ...

  5. asa清空配置_Cisco ASA 高级配置

    Cisco ASA 高级配置 一.防范IP分片攻击 1.Ip分片的原理: 2.Ip分片的安全问题: 3.防范Ip分片. 这三个问题在之前已经详细介绍过了,在此就不多介绍了.详细介绍请查看上一篇文章:I ...

  6. Linux下如何实现用户的集中管理(NIS服务器的高级配置)

    Linux下如何实现用户的集中管理 (NIS服务器的高级配置)   一.NIS服务器的属性设置   1.修改NIS系统的主机名 Linux系统可以使用hostname命令查看和临时设置Linux系统的 ...

  7. 大型企业网络配置系列课程详解(三)--OSPF高级配置与相关概念的理解

    大型企业网络配置系列课程详解(三)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office&qu ...

  8. 理解并使用ASP.NET的高级配置

    引言: 本文将讨论ASP.NET应用的高级配置方法,在文中将讨论的一些配置如下:为ASP.NET进程设置独立的ID标记:配置ASP.NET网站或者网 站目录的访问权限:处理自定义配置事件等.除了以上提 ...

  9. Sonatype Nexus高级配置

    Sonatype Nexus的安装配置参见:CentOS系统中安装Nexus并导入已有的构件库.Nexus内置了Jetty容器,${NEXUS_HOME}/bin/jsw目录下包含了各个操作系统的启动 ...

最新文章

  1. word顶部有一道线_为什么顶角线不会过时?文章内容告诉你
  2. 关于面象接口编程的理解
  3. WIF基本原理(2)基于声明的标识模型
  4. JQUERY的parent()
  5. 求组合数的算法 java,求一个整数的组合数算法(java)
  6. 5G NR PUCCH资源配置
  7. Java德才论宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之 小人。凡取人之术,苟不得圣人,君子而与之,与其得小人,不若
  8. 超3000岗位!腾讯产业互联网新年大扩招!
  9. Qt持久性对象进行序列化
  10. Android SharedPreferences数据库
  11. 分析称Twitter存五大盈利模式 将于4月中旬公布
  12. 支付宝app支付,订单参数错误/PHP生成支付宝预支付订单/php 支付宝app支付
  13. 腾达无线路由器怎么设置能让自己的网速快
  14. 保险精算师教你如何用大数据买车
  15. 称“开启千元机快充时代” 魅蓝5s将于15日发布
  16. vue学习笔记 DAY1 P1~P6
  17. 大公司,一般都怎么开会?
  18. 游戏必备组件_一款Beta版游戏周销量 30 万份,独立游戏究竟有多火?
  19. C语言求空间两点之间的距离
  20. AndroidiOSApp架构总结

热门文章

  1. UML类图之基础图示法
  2. 试试Visual Studio中新的远程文件查看器
  3. Dell PowerEdge服务器RAID卡驱动下载
  4. 激励一下自己 一万小时定律
  5. mac homebrew安装使用
  6. 青少年长高增高的方法有哪些?
  7. 了解Spring事务
  8. 数据分析实战(数据采集与整理)
  9. 2021年 美国大学生数学建模竞赛 赛题解析!
  10. html+css简单下拉菜单制作