DNS基本安全控制、view功能的应用

一、DNS基本安全控制

在DNS基本安全控制中,常常需要对某些网段内的主机做匹配,并对这些匹配到的主机做安全控制。在这个过程中,匹配这一过程可以由acl来控制。什么是acl?简单来说,acl就是访问控制列表,可以将一个或多个地址归并为一个命名的集合,随后通过此名称即可对该集合内的所有主机实现统一调用。

在bind程序中,acl的配置建议写在/etc/named.conf的全局配置段之前。acl格式如下:

acl acl_name {
    ip;
    ipnet/prelen;
};

其中,acl_name是自定义名称,ip指的是IP地址,ipnet/prelen指的是IP网段。

示例,将192.168.10.0/24和127.0.0.0/8这两个网段做acl归并起来,并命名这个集合为mynet.

acl mynet {
    192.168.10.0/24;
    127.0.0.0/8;
};

这里的‘mynet‘是我们自定义的acl,而在bind中有四个内置的acl,它们分别是:

none:没有一个主机
any:任意主机
local:本地
localnet:本机所属IP所在的网络

做好acl之后,就可以借助于acl匹配到的主机地址做基本安全控制了。基本安全控制可由访问控制指令来控制,常用的访问控制指令有:

allow-query {};    //设置允许哪些主机向当前DNS服务器查询(“白名单”)。
allow-transfer {};    //设置允许向哪些主机做区域传送,默认是允许向所有主机做区域传送,应
                      //该配置为仅允许从服务器做区域传送。
allow-recursion {};    //允许哪些主机向当前DNS服务器发起递归请求。
allow-update {};    //配置DDNS时使用,即允许动态更新区域数据库文件中的内容。一般情况下所 
                    //有zone都应该配置为‘allow-update { none; };‘。

allow-recursion {};‘的应用

如果在公司内有服务器要向互联网上的主机提供服务时,那就需要在公司中搭建DNS服务器。通常会将这个DNS服务器设置为仅允许为公司内部其他主机在访问互联网时做递归查询,而对于互联网上外来的DNS查询请求则分情况处理:①如果外来主机要查询的主机是本地(即公司)所负责管理的服务器,则返回查询结果;②如果外来主机要查询的主机不是本地(即公司)所负责管理的服务器,则拒绝为其做递归查询。

具体做法一般是先用acl归并公司内的所有主机地址,内部主机地址归并的acl名称可自定义为internal,而外部主机地址归并的acl名称可自定义为external,这样的好处是容易识别和记住。假如公司内部主机所在网络为192.168.10.0/24,分别为内部主机和外部主机做acl,具体操作如下:

acl internal { 192.168.10.0/24; };    //针对内部主机的来源IP做acl.
acl external { ! 192.168.10.0/24; any; };    //针对外部主机的来源IP做acl,加上感叹号(!) 
                                              //表示反选的意思。

option {
    ... ...
    allow-recursion { internal; };    //仅允许内部主机向当前DNS服务器发起递归查询请求。
//  recursion yes;    //如果在全局配置段中有这一项就用(//)注释掉。
    ... ...
};

二、DNS view功能的应用

假设有这样一个场景:在我的公司内部有一台DNS服务器(这里暂不做主从),另外还有一台Web服务器,这两台服务器都能向外提供服务。其中DNS服务器有两个接口,分别是192.168.10.140(对内)和10.1.1.140(对外);Web服务器也有两个接口,分别是192.168.10.100(对内)和10.1.1.100(对外)。现在有两台主机想要基于主机名访问公司的Web服务器,这两台主机一部来自公司内部(192.168.10.128),另一部来自互联网上的外部主机(10.1.1.128),它们都向同一台DNS服务器查询。问题是,如何使得公司内部的这部主机(192.168.10.128)查询DNS服务器之后获取到的Web服务器IP地址为192.168.10.100,而外部的主机(10.1.1.128)查询DNS服务器之后获取到的Web服务器IP地址为10.1.1.100呢?

我们不妨假设,内部主机(192.168.10.128)查询DNS服务器之后获取到Web服务器的IP地址是10.1.1.100,这时就需要跨网段访问了,另外,不仅访问时需要进行NAT地址翻转,还会导致访问速度变慢。应该如何解决这一问题?为了准确地根据客户端的不同来源将主机名解析为不同的结果或解析为不同范围内的专用结果,可以使用DNS view(DNS视图)技术。

问题场景图:

这里实验环境准备三台主机,分别作为上图中的test1, test2, test3,且IP地址分别对应,因为是实验环境,所以这里直接使用网络接口别名来代替其他网络接口。

实验步骤:


(1)为各个主机配置IP地址。


test1:

[[email protected] ~]# ifconfig ens33 192.168.10.140/24
[[email protected] ~]# ifconfig ens33:0 10.1.1.140/24

test2:

[[email protected] ~]# ifconfig ens33 192.168.10.128/24

test3:

[[email protected] ~]# ifconfig ens33:0 10.1.1.128/24

(2)配置test1为DNS服务器。


修改配置文件/etc/named.conf:

[[email protected] ~]# vim /etc/named.conf
# 修改如下内容。

options {
    listen-on port 53 { any; };
    directory   "/var/named";
    allow-query     { any; };
    dnssec-enable no;
    dnssec-validation no;
};

(3)定义acl,分别将192.168.10.0/24和外部网络地址归并为集合。

可在/etc/named.conf或/etc/named.rfc.1912.zones中定义:

[[email protected] ~]# vim /etc/named.conf
# 添加或修改如下内容。

acl internal { 192.168.10.0/24; };    //针对内部主机的来源IP做acl.
acl external { ! 192.168.10.0/24; any; };    //针对外部主机的来源IP做acl.

option {
    ... ...
    allow-recursion { internal; };    //仅允许内部主机向当前DNS服务器发起递归查询请求。
//  recursion yes;    //如果在全局配置段中有这一项就用(//)注释掉。
    ... ...
};

# 对于此处option段中的配置,可以全部注释掉,而在view中用recursion这个子参数直接实现。

(4)定义view,分别匹配公司内部和外部地址,并在view中定义区域。


在配置文件/etc/rfc1912.zones中定义如下内容:

[[email protected] ~]# vim /etc/named.rfc1912.zones

view INTERNAL {                     //定义INTERNAL视图,用于匹配内部网络。
    match-clients { internal; };    //匹配内部网络。
    recursion yes;             //允许为内部主机做递归查询。
    zone "." IN {              //必须包含根域,这样才可以解析其他域(非itab.com)的主机名。
        type hint;
        file "name.ca";
    };
    zone "itab.com" IN {        //针对match-client匹配到的主机定义itab.com正向解析区域。
        type master;
        file "itab.com/internal";    //区域数据库文件路径。
    };
};

view EXTERNAL {                //定义INTERNAL视图,用于匹配内部网络。
    match-clients { any; };    //匹配外部网络。
    recursion no;            //如果外部主机想要解析的主机不属于本地负责的itab.com域,则不
                             //允许为之做递归查询。所以这里可以不需要根域的定义。
    zone "itab.com" IN {     //针对match-client匹配到的主机定义itab.com正向解析区域。
        type master;
        file "itab.com/external";    //区域数据库文件路径。
    };
};

注意:在配置文件/etc/named.conf和/etc/named.rfc1912.zones中的所有zone都必须包含在view中!这里只是实验环境,为了避免占用太多篇幅,所以直接把无关紧要的zone注释掉了。

(5)分别为不同view中(内部和外部)的itab.com这个域的正向区域定义区域数据库文件。

区域所在的VIEW:INTERNAL

[[email protected] itab.com]# vim /var/named/itab.com/internal 

$TTL 3600
$ORIGIN itab.com.
@       IN      SOA     ns1.itab.com.       dnsadmin.itab.com.  (
                2017040301
                1H
                10M
                2H
                1W )
        IN      NS      ns1
        IN      NS      ns2
ns1     IN      A       192.168.10.140
ns2     IN      A       192.168.10.130
www     IN      A       192.168.10.100

区域所在的VIEW:EXTERNAL

[[email protected] itab.com]# vim /var/named/itab.com/external

$TTL 3600
$ORIGIN itab.com.
@       IN      SOA     ns1.itab.com.       dnsadmin.itab.com.  (
                2017040301
                1H
                10M
                2H
                1W )
        IN      NS      ns1
        IN      NS      ns2
ns1     IN      A       10.1.1.140
ns2     IN      A       10.1.1.130
www     IN      A       10.1.1.100


(6)检查语法错误。

检查配置文件是否有语法错误:

[[email protected] itab.com]# named-checkconf 
[[email protected] itab.com]#

检查区域数据库文件是否有语法错误:

[[email protected] itab.com]# vim /var/named/itab.com/internal
[[email protected] itab.com]# named-checkzone itab.com /var/named/itab.com/internal 
zone itab.com/IN: loaded serial 2017040301
OK
[[email protected] itab.com]# vim /var/named/itab.com/external 
[[email protected] itab.com]# named-checkzone itab.com /var/named/itab.com/external 
zone itab.com/IN: loaded serial 2017040301
OK

(6)这一步容易被忘记!要把/var/named/itab.com/目录及其目录下的所有文件的属组设置为root,属组设置为named,否则named进程无法加载定义的区域数据库文件。

为view中定义的区域的目录/var/named/itab.com设置特殊权限:

[[email protected] ~]# mkdir /var/named/itab.com
//因为此时还未加载区域数据库文件,需要自行创建此目录。

[[email protected] ~]# chown root.named /var/named/itab.com
//将该目录属主属组对应改为root和named.

[[email protected] ~]# chmod g+s /var/named/itab.com
//为了确保在该目录下创建的文件的属组为named,可以使用特殊权限SGID.

[[email protected] ~]# ll /var/named/itab.com -d    //查看目录权限。
drwxr-sr-x. 2 root named 38 4月   3 16:16 /var/named/itab.com

(7)重载DNS服务。


[[email protected] ~]# rndc reload

以上为配置test1这台DNS服务器的所有步骤,test1是公司的DNS服务器。现在假如内部主机(test2:192.168.10.128)和外部主机(test3:10.1.1.128)都想要基于主机名www.itab.com访问公司的Web服务器,并且都向公司的test1这台DNS服务器查询www.itab.com的IP地址。在正常情况下,内部主机取得的Web服务器IP地址应该是192.168.10.100,而外部主机取得的Web服务器IP地址应该是10.1.1.100。并且,内部主机可以向公司的DNS服务器(test1)发起递归查询请求,而外部主机则不被允许向公司的DNS服务器(test1)发起递归查询请求。测试过程如下。

在内部主机(test2:192.168.10.128)上

查询公司内Web服务器的IP地址:

[[email protected] ~]# dig -t A www.itab.com @192.168.10.140

;; ANSWER SECTION:
www.itab.com.		3600	IN	A	192.168.10.100    //结果正确!

内部主机发起递归请求:

[[email protected] ~]# dig -t A www.baidu.com @192.168.10.140

;; ANSWER SECTION:    //发起递归请求成功!
www.baidu.com.		1200	IN	CNAME	www.a.shifen.com.
www.a.shifen.com.	300	IN	A	14.215.177.37
www.a.shifen.com.	300	IN	A	14.215.177.38

在外部主机(test3:10.1.1.128)上

查询公司的Web服务器的IP地址:

[[email protected] ~]# dig -t A www.itab.com @10.1.1.140

;; ANSWER SECTION:
www.itab.com.		3600	IN	A	10.1.1.100    //结果正确!

外部主机发起递归请求:

[[email protected] ~]# dig -t A www.baidu.com @10.1.1.140

; <<>> DiG 9.9.4-RedHat-9.9.4-37.el7 <<>> -t A www.baidu.com @10.1.1.140
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 7980
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available        //发起递归请求失败!

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.baidu.com.			IN	A

;; Query time: 0 msec
;; SERVER: 10.1.1.140#53(10.1.1.140)
;; WHEN: Tue Apr 04 02:54:09 CST 2017
;; MSG SIZE  rcvd: 42

测试完毕,谢谢观看^_^

时间: 2024-10-25 23:25:29

DNS基本安全控制、view功能的应用的相关文章

Linux之DNS正向反向解析以及主从复制、子域授权、转发和view功能

关于DNS服务器我想大家并不陌生,通常情况下我们都只知道DNS服务器是域名解析用的,如果我们没有DNS服务器那么我们想要访问互联网上的网站什么的就不得不去记忆这些网站的IP地址了.对于我们而言众多的IP地址是很难记忆的而且也不方便.所以就出现过了DNS服务器.主要实现把主机名解析成IP地址,这样就方便我们在网上通信. 通常情况下我们之用到了DNS服务器的正向解析功能,而DNS还有方向解析功能,就是把IP地址解析成主机名的. 那么接下来就来跟大家分享一下DNS的工作方式. DNS是基于C/S架构的

Linux DNS acl、view、日志系统使用

本节以前面主.从DNS为实验环境,讲解DNS acl.view.日志系统相关使用 一.配置DNS acl访问控制列表 acl定义格式: acl string { address_match_element; ... }; 常用几钟类型格式: allow-transfer {}; 允许做区域传送主机 allow-query {};   允许做查询限定 allow-recursion {}; 允许做递归查询列表,通常只给本地客户端做递归 allow-update {}; 允许DNS动态更新,但只能由

linux下DNS主从复制,view视图,转发,子域授权

我们知道相同网段内各网络设备之间是基于mac通信,而跨网络的不同主机之间是基于IP地址通信.随着世界主机数量爆炸式的增长,对于记住数目众多IP和想访问未知对方IP的主机成为一个痛点.通过基于人们熟知的文字访问主机应运而生. DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串.通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析). DNS是一项

学习笔记 DNS 子域授权 view

DNS 是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串. 它负责把域名转换为ip地址,人们习惯记忆域名,但机器间互相只认IP地址,域名与IP地址之间是一一对应的,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,整个过程是自动进行的. DNS最主要实现方式 是FQDN 向IP地址解析.由根域,顶级域,二级域,子域,主机名组成.整个域名空间是以倒置树形.结构组成 正向解析: 

linux下DNS服务器视图view及日志系统详解

DNS服务器ACL:在named.conf文件中定义ACL功能如同bash当中定义变量,便于后续引用 ACL格式: acl ACL名称 { IP地址1或子网段1; IP地址2或子网段2; }; 例如:将内网172.17.0.0/16及192.168.1.0/24,127.0.0.0/8写成ACL acl intra { 172.17.0.0/16; 192.168.1/0/24; 127.0.0.0/8; }; 引用ACL: allow-recursion { intra; }; 2.视图vie

DNS的view视图功能

在一个庞大的网络中,由于网络的复杂性等原因造成的,我们访问某些互联网资源时,速度会非常慢,而这些资源的提供商,比如购物网站,他们为了让客户访问速度提升,于是会将多个业务服务器会放在不同的网络中,而我们期望访问到离我们最近的服务器,以达到最快的速度访问,这个时候我们的DNS服务器解析的功能就要能指向到不同网络中的对应的固定的服务器,这种功能的实现就需要用到DNS的view功能,这个时候DNS服务器起到的是分网的效果. DNS的View功能,需要在DNS服务配置文件中来定义,在视图中需要最先需要定义

DNS的视图功能以及日志系统

实验环境:RHEL5.8 32Bit DNS的视图功能以及日志系统详解 DNS的主配置文件中的allow-recursion参数用来定义能够和DNS服务器进行递归的客户端来源,allow-query参数用来定义允许到DNS服务器上面发起查询请求的客户端,allow-transfer参数用来定义允许和DNS服务器进行区域传送的客户端,区域传送主要有两种方式,axfr和ixfr,使用dig命令也可以模拟实现区域传送: 如果我们的DNS服务器允许进行递归.发起查询请求以及进行区域传送的客户端比较多的话

DNS服务器综合实验(包含view下主从+子域授权+转发域)

说明:本文并不是一上来就搭建包含view下主从+子域授权+转发域的实验环境,我们按照先易后难的顺序逐渐深入搭建的.特此说明. ===============================实战======================================= 规划: 主DNS:192.168.0.10 从DNS:192.168.0.11 其他地址:192.168.0.13.192.168.0.14 子域DNS:192.168.0.12 注意:所有工作之前,将所有的主机进行如下设置 [

DNS各种基本配置(正向解析区域、反向解析区域;主/从;子域;基本安全控制)

DNS服务器所提供的服务是完成将主机名和转换为IP地址的工作.为什么需要将主机名转换为IP地址的工作呢?这是因为,当网络上的一台客户机访问某一服务器上的资源时,用户在浏览器地址栏中输入的是人类便于识记的主机名和域名.而网络上的计算机之间实现连接却是通过每台计算机在网络中拥有的惟一的IP地址来完成的,这样就需要在用户容易记忆的地址和计算机能够识别的地址之间有一个解析,DNS服务器便充当了地址解析的重要角色. 域名严格意义上的称呼为FQDN(Full Qualified Domain Name).域