Bind 高级应用ACL 、View 模块

2022-11-19 09:44:49 浏览数 (1)

Bind View原理

View在Bind中被称为视图功能,DNS最基本的功能就是响应域名的查询,然后返回该域名的地址数据。而view和常规的DNS不同,当用户访问某个域名时,DNS服务器上的view会先判断一下客户端的源IP地址,然后使用acl和内部IP表做匹配,再返回给用户查询请求(一个区域会有多个view,每个view的配置均不相同,当用户访问一个域名时,view会根据用户IP判断此用户IP属于哪个view,然后某个view再给用户返回查询请求)

网络环境

通过配置bind view 对局域网中不同网段或IP的客户端指定不同的forwarders dns,"www.jd.com" 使用dns"8.8.8.8”和"223.5.5.5" 解析为不同主机从而验证结果;

Bind ACL

acl主配置语句用于定义一个命名的访问列表,里面包含了一些用IP表示的主机,这个访问列表可以在其他语句使用,表示其所定义的主机。其格式如下:

代码语言:javascript复制
acl acl-name {   
    address_match_list   

address_match_list表示IP地址或IP地址集。其中,none、any、localhost和localnets这4个内定的关键字有特别含义,分别表示无主机、任何主机、本地网络接口IP和本地子网IP。

  • none:没有一个主机
  • any:任意主机
  • localhost: 本机
  • localnet:本机的IP同掩码运算后得到的网络地址

vim /var/named/acl/named.acl

代码语言:javascript复制
acl "local.cernet" {
192.168.100.161/32;
192.168.100.234/32;
};
代码语言:javascript复制
acl  "source" {             //定义一个名为source的ACL    
  10.0.0.1; 192.168.23.1; 192.168.23.15;      //包含3个单个IP    
 };    
acl "source_lan" {                //定义一个名为source_lan的ACL    
  "someips";                   //可以包含其他ACL    
  10.0.15.0/24;                 //包含10.0.15.0子网中的所有IP    
  !10.0.16.1/24;                //非10.0.16.1子网的IP    
  {10.0.17.1;10.0.18.2;};         //包含了一个IP组    
  localhost;//本地网络接口IP(含实际接口IP和127.0.0.1)    
 };

访问控制指令

代码语言:javascript复制
allow-query {};允许查询的主机:白名单
allow-transfer{};允许区域传送的主机:白名单
allow-recursion{};允许递归的主机,建议全局使用 
allow-update{};允许更新区域数据库中的内容

Bind view 配置

视图(view)语句的定义

代码语言:javascript复制
view view_name [class] {
match-clients { address_match_list } ;
match-destinations { address_match_list } ;
match-recursive-only { yes_or_no } ;
[ view_option; ...]
zone-statistics yes_or_no ; ]
[ zone_statement; ...]
};

Bind 配置文件

vim /etc/named/named.conf

代码语言:javascript复制
include "/var/named/acl/named.acl";
view "in.local" {
   match-clients { local.cernet; };
   zone "." IN {
     type hint;
     file "named.ca";
 };
   forward first;
   forwarders { 8.8.8.8; };
include "/etc/named/named.rfc1912.zones";
 };
view "out.local" {
   match-clients { !local.cernet;any; };
   zone "." IN {
     type hint;
     file "named.ca";
 };
   forward first;
   forwarders { 223.5.5.5; };
include "/etc/named/named.rfc1912.zones";
 };

vim /etc/named/named.rfc1912.zones

代码语言:javascript复制
zone "zabbix.com" IN {
  type master;
  file "zabbix.com.zone"; 
  allow-update { none; };
};
zone "rpztest.local" {
  type master;
  file "rpz.test.local";
  allow-update { none; };
};
zone "100.168.192.in-addr.arpa" IN {
  type master;
  file "100.168.192.loopback";
};

注意

(1)启用view,所有的zone都只能定义在view中

(2)仅在允许递归请求的客户端所在view中定义根区域

(3)客户端请求到达时,是自上而下检查每个view所服务的客户端列表

客户端测试

Client IP 192.168.100.161

Client IP 192.168.100.235

BINd 日志

8-Oct-2022 11:39:16.938 queries: info: client @0x7fc1480a1ae0 192.168.100.161#51765 (www.jd.com): view in.local: query: www.jd.com IN A E(0)K (192.168.100.161)

18-Oct-2022 11:42:09.811 queries: info: client @0x7fc14400fc90 192.168.100.161#43833 (www.jd.com): view in.local: query: www.jd.com IN A E(0)K (192.168.100.161)

18-Oct-2022 11:44:36.697 queries: info: client @0x7fc144070630 192.168.100.235#35406 (www.jd.com): view out.local: query: www.jd.com IN A E(0) (192.168.100.161)

18-Oct-2022 11:45:11.754 queries: info: client @0x7fc1480b0540 192.168.100.235#58196 (www.jd.com): view out.local: query: www.jd.com IN A E(0) (192.168.100.161)

0 人点赞