Bind中定义和使用访问控制列表(ACL)

ACL是Access Control List的缩写,即访问控制列表,就是一个被命名的地址匹配列表。使用访问控制列表可以使配置简单而清晰,一次定义之后可以在多处使用,不会使配置文件因为大量的 IP 地址而变得混乱。

定义 ACL

要定义访问控制列表,可以在 BIND 的主配置文件 /usr/local/named/etc/named.conf 中使用 acl 语句来实现。acl 语句的语法为:

acl  acl_name {
    address_match_list;
};

BIND 里默认预定义了 4 个名称的地址匹配列表,他们可以直接使用,分别为:

  • any : 所有主机
  • localhost : 本机
  • localnets : 本地网络上的所有主机
  • none : 不匹配任何主机

Tips:acl 是 named.conf 中的顶级语句,不能将其嵌入其他的语句。要使用用户自己定义的访问控制列表,必须在使用之前定义。因为可以在 options 语句里使用访问控制列表,所以定义访问控制列表的 acl 语句应该位于 options 语句之前。

为了便于维护管理员定义的访问控制列表,可以将所有定义 acl 的语句存放在单独的文件 /usr/local/named/etc/named.conf.acls 中,然后在主配置文件 /usr/local/named/etc/named.conf 中如下语句

include "/usr/local/named/etc/named.conf.acls";

使用 ACL

定义了 ACL 之后,可以在如下的子句中使用

子句  模块 说明
allow-query options,zone 指定哪主机或网络可以查询本服务器或区,默认的是允许所有主机进行查询。
allow-transfer options,zone 指定哪些主机允许和本地服务器进行域传输,默认值是允许和所有主机进行域传输。
allow-recursion options 指定哪些主机可以进行递归查询。如果没有设定,缺省是允许所有主机进行递归查询的。注意禁止一台主机的递归查询,并不能阻止这台主机查询已经存在于服务器缓存中的数据。
allow-update zone 指定哪些主机允许为主域名服务器提交动态 DNS 更新。默认为拒绝任何主机进行更新。
blackhole options 指定不接收来自哪些主机的查询请求和地址解析。默认值是 none 。

Tips :上面列出的一些配置子句既可以出现在全局配置 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,需要以下的配置步骤:

  • 在 /usr/local/named/etc/named.conf.acls 中添加如下的 acl 语句,对允许查询的主机列表命名
 acl allow-query-list {
     202.0.0.0/8;
     221.0.0.0/8;
 };
  • 在 /usr/local/named/etc/named.conf.options 中使用定义的 acl_name 限制允许查询的主机列表。(我们也会把options模块独立出一个文件)
 options {
     ......
     allow-query { allow-query-list; };
     ......
 };

限制区传输

假如要限制只有 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,需要以下的配置步骤:

  • 在 /usr/local/named/etc/named.conf.acls 中添加如下的 acl 语句,对允许查询的主机列表命名
acl allow-transfer-list {
     221.3.131.5;
     221.3.131.6;
 };
  • 在 /usr/local/named/etc/named.conf 中使用定义的 acl_name 限制允许进行域传输的主机列表
zone "example.com" {
     type master;
     file "example.com.hosts";
    allow-transfer { allow-transfer-list; };
};

防止欺骗和拒绝服务攻击

为了防止欺骗和拒绝服务攻击,对于 Internet 上的每个 DNS 服务器至少应该有一个假地址的 ACL 和一个本地地址的 ACL。为此,需要执行如下的步骤

  • 在 /etc/bind/named.conf.acls 中添加如下的 acl 语句,创建一个名称为 “bogusnets” 的 ACL 来阻止经常用于欺骗性攻击的(RFC1918)地址空间
acl bogus-nets {
     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;
 };
  • 在 /etc/bind/named.conf.options 中使用定义的 acl_name 限制查询和响应
options {
 ......
 allow-query { our-nets; };
 allow-recursion { our-nets; };
 blackhole { bogus-nets; };
 ......
 };

相关文章:

Bind中定义和使用访问控制列表(ACL)》上有2条评论

  1. Pingback引用通告: Bind的安装与详细配置 | 精彩每一天

  2. Pingback引用通告: Bind中的 options 语句定义和用法 | 精彩每一天

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>