校园网智能DNS配置实践与日志分析
2017-09-28云太真
云太真
(上海政法学院计算机教学部,上海201701)
网络通讯及安全
校园网智能DNS配置实践与日志分析
云太真
(上海政法学院计算机教学部,上海201701)
根据校园网普遍多出口的现状和服务器访问存在网络瓶颈的现实,利用bind9提供的view视图进行了DNS配置,对DNS的常见攻击手法进行了防范,利用Linux命令对DNS的日志进行了分析。
DNS;BIND;校园网;DNS配置;DNS安全
Abstract:Campus network often have multi exports,leading to external users access server bottlenecks.This article uses the view instruction provided by BIND9 to configure the DNS,and to guard against the common DNS attack methods.Finally,the DNS logs are analyzed using the Linux command.
Key words:DNS;BIND;Campus network;DNS configuration;DNS security
DNS是校园网基础服务之一,对网络性能和安全有很重要的影响。Bind是最常用的DNS服务器软件,支持智能解析。基于校园网应用实际和目前Dos攻击泛滥的现状,本文基于建立在Centos系统中的Bind软件,针对校园网多出口的现状进行了配置,讨论了应对Dos攻击的对策和DNS日志的分析方法。
1 校园网的多出口与性能优化
目前的高校校园网,除了接入CERNET以外,普遍还接入了电信、联通等广域网,主要原因是CERNET资源有限,互联网上多数资源位于电信、联通的范围,而这些广域网之间的互联存在“瓶颈”限制[1]。CERNET的国际出口虽然屡次升级,但仍不能满足需求。而其他网络不能提供EDU域名,这就迫使多数高校必须同时接入多个网络,结构如图1所示。
图1 校园网链路拓扑图
另一方面,由于历史原因,高校接入CERNET,可以获得比较多的IPv4地址,而电信、联通的IP地址资源非常紧张,所以只能分配给接入单位少量IP地址,主要用于接入、NAT地址转换、地址映射等。校园网通常采取的对策是,服务器、内部网络接入使用CERNET分配的地址,这些机器访问教育网资源,通过教育网线路时,采用路由方式;访问电信或联通的资源通过电信、联通出口时,采用NAT地址转换方式。
由于这些广域网之间资源的不对称,通过电信、联通网络访问教育网资源,或通过教育网线路访问电信、联通资源,都会降低用户的网络体验。为了保证这一点,学校网络通常根据目的地(例如CERNET地址列表[2])使用路由的方法,这样就保证了校园网内部访问外部资源的顺畅进行。
但是反过来,当外部电信用户访问学校网站等资源的时候,情况就发生了变化。虽然学校有多个出口,但是用户的目的地址是教育网地址,用户的数据报文必然沿着电信到教育网走进来,然后必须沿相反方向反馈回数据,这就无法保证外部用户的访问体验,如图2所示。
为了解决这个问题,就需要采用智能DNS解析的办法,通常利用BIND提供的VIEW指令,根据用户来源IP地址的不同,解析成不同的ip地址。同时,在出口路由器上进行IP地址映射,将部分外部用户访问最频繁的服务器的教育网地址映射为电信地址,这个服务器可以同时被教育网用户和电信网用户用不同的IP地址访问,并且路径最短,不跨越电信、教育网通道。这样,地址映射和智能DNS的配置结合起来,就满足了外网用户访问的性能要求[3]。
图2 广域网用户访问校园网资源的路径
2 BIND配置实践
本文基于Centos下自带的BIND 9.8.2进行配置,Centos是个很好的Linux发行版本,和Redhat保持一致,实际上比Redhat更容易使用,例如Centos安装时选择BIND,就自动实现了ch⁃root配置,免去复杂的配置过程,只要我们配置named.conf和解析域文件就行了。所谓chroot,就是说bind在启动时是以非root权限运行的,这对服务器的安全运行是很有利的[4]。
本文中的应用场景是校园网同时接入教育网和电信,部分服务器在出口路由器上进行了IP地址映射,如下表1。
表1 服务器IP地址映射表
根据实际需要,依据IP地址的来源把DNS用户分为三类:校园网内部用户,教育网用户,其他用户,目标是让三类用户看到的解析结果不一样。所谓其他用户,主要是来自电信和其他网络地址的用户,这些用户IP地址不好确定,所以我们放在最后判断。
BIND的主要配置文件是/etc目录下的named.conf文件。该文件由若干节组成,第一节是options{.......};第二节是con⁃trols{......}。每一节之间都用{}包含,各节之间用“;”分开。这里view指令要单独设置一节,本文设置了三个view节,具体如下
/*for SHUPL networks*/
view"SHUPL-Networks"
{match-clients
{222.204.192.0/20;
192.168.0.0/16;
10.0.0.0/8;
172.16.0.0/12;
};
recursion yes;
allow-query-cache{any;};
//部分代码省略
zone"shupl.edu.cn"IN
{type master;
file"shupl.edu.cn-inner.db";
};
zone"192.204.222.in-addr.arpa"IN
{type master;
file"192.204.222.in-addr.arpa";
};
};
这是一个针对校园网内部用户解析的view节。match-cli⁃ents{}包含的部分是校园网内部用户的IP地址集合,除了CER⁃NET给出的地址,还有INNA保留地址,校园网有些区域会使用保留地址,我们假设校园网NAT位于出口路由器上。
zone"shupl.edu.cn"IN{}部分指出校园网内部用户要求解析shupl.edu.cn域时的解析文件,即“shupl.edu.cn-inner.db”。zone"192.204.222.in-addr.arpa"描述服务器区域地址的反向解析,主要是要提供DNS服务和电子邮件服务器的反向解析。
下面是192.204.222.in-addr.arpa文件的内容
$TTL 86400
@IN SOA shupl.edu.cn.webmaster.shupl.edu.cn.(
80;
60;
60;
36000;
86400)
@ IN NS shupl.edu.cn.
129 IN PTR dns1.shupl.edu.cn.
130 IN PTR dns2.shupl.edu.cn.
146 IN PTR www.shupl.edu.cn.
161 IN PTR mail.shupl.edu.cn.
161 IN PTR smtp.shupl.edu.cn.
161 IN PTR pop3.shupl.edu.cn.
再看针对教育网用户的view节的设置。
/*for CERNET networks*/
view"edu-network"
{match-clients
{10.0.0.0/8;
58.154.0.0/15;
58.192.0.0/12;
59.64.0.0/12;
//此处省略部分代码
222.192.0.0/12;
};
recursion no;
allow-query-cache{none;};
//此处省略部分代码
zone"shupl.edu.cn"IN
{type master;
file"shupl.edu.cn-edu.db";
};
zone"192.204.222.in-addr.arpa"IN
{type master;
file"192.204.222.in-addr.arpa";
};
};
这里的match-clients{}中包含的是教育网的IP地址集合[2],注意到这个view中的域解析文件是shupl.edu.cn-edu.db。
针对其他用户,主要是电信用户的view配置如下
/*For Other Network except China Education Network*/
view"other"IN
{match-clients{any;};
recursion no;
allow-query-cache{none;};
//此处省略部分代码
zone"shupl.edu.cn"IN
{type master;
file"shupl.edu.cn-other.db";
};
zone"192.204.222.in-addr.arpa"IN{type master;
file"192.204.222.in-addr.arpa";
};
};
这里的match-clients{any;}实际上就是匹配所有IP地址,前面的两个view节已经匹配了内部网络用户和教育网用户,最后剩下的都由这个“other”view节来处理,对应的域解析文件为shupl.edu.cn-other.db。
在/var/named目录下我们可以看到一些系统默认的解析文件,这些是DNS解析的一些默认文件,但是这个目录是chroot假目录。把这些文件复制到/var/named/chroot/var/named目录下,然后再创建shupl.edu.cn-inner.db、shupl.edu.cn-edu.db、shupl.edu.cn-other.db三个解析域文件。
shupl.edu.cn-inner.db文件的大致内容如下:
$TTL 86400
$ORIGIN shupl.edu.cn.
@IN SOA dns1.shupl.edu.cn.webmaster.shupl.edu.cn.(
840;serial
10800;refresh
3600;retry
864000;expire
86400);ttl
@ IN NS dns1.shupl.edu.cn.
@ IN NS dns2.shupl.edu.cn.
@ IN MX 20 mail.shupl.edu.cn.
www IN A 222.204.192.146
mail IN A 222.204.192.161
kczx IN A 222.204.192.163
jiaowu IN A 222.204.192.168
shupl.edu.cn-edu.db文件和shupl.edu.cn-inner.db文件在本文中没有区别,分开设置两个view主要是增加灵活性,例如有些内部服务器进行了解析,外网用户根本也访问不到,只要在shupl.edu.cn-inner.db里设置就行了。
shupl.edu.cn-other.db大致内容如下
$TTL 86400
$ORIGIN shupl.edu.cn.
@IN SOA dns1.shupl.edu.cn.webmaster.shupl.edu.cn.(
840;serial
10800;refresh
3600;retry
864000;expire
86400);ttl
@ IN NS dns1.shupl.edu.cn.
@ IN NS dns2.shupl.edu.cn.
@ IN MX 20 mail.shupl.edu.cn.
www IN A 116.228.2.212
mail IN A 116.228.2.211
kczx IN A 116.228.2.207
jiaowu IN A 116.228.2.213
这些配置完成以后,重新启动BIND服务,运行命令
service named restart
如果正确重启了,基本可以说明配置无误。
然后在三个不同的区域,即校园网内部,教育网用户和其他用户处分别进行nslookup域名解析测试。测试通过,即说明设置正确。
3 BIND安全配置
DNS是一种无连接服务,客户端和服务器之间使用UDP报文进行通信。DNS服务器不能匿名,甚至也不好禁止PING报文,以便用户进行连通性测试。DNS是最基础的网络服务之一,这些特性导致DNS特别容易成为攻击的目标,危害很大[5]。
早期对DNS的攻击,主要是针对BIND软件本身的漏洞。由于BIND是开源软件,攻击者可以仔细阅读代码,找到代码编写上的漏洞,针对这些漏洞编写攻击工具,然后寻找对应版本的DNS进行攻击。BIND的版本可以使用dig工具查询。
近期对DNS的攻击,主要是缓存中毒攻击,方法是利用服务器所提供的递归解析功能,反复查询一些不存在的或不常用的域名。DNS递归解析的结果是从其他授权服务器里取得的,但是DNS报文传输依靠的是UDP,UDP是一种无连接的数据报文,这就很难保证收到的响应报文真是从权威服务器里来的,只能根据其发出的查询ID来判断,只要回复的查询ID和自己发出的报文查询ID相同,就认为真的是权威服务器发出的。接着dns服务器把权威服务器的解析交给客户端,并存入自己的缓存,下次其他客户端在TTL时间范围内再次请求解析时就把这个结果直接交给客户端[6]。这个过程可以用图3表示
图3 DNS递归查询原理
攻击者的应对方法是伪造授权服务器的响应报文,UDP是一种无连接的报文,网络只检查目的地址,以便送到合适的路径上,但是一般不检查源地址。攻击者伪造授权服务器的响应报文,只要抢在授权服务器之前到达,并且查询ID与服务器发出的查询ID相同,就可以欺骗dns,从而骗过DNS服务器,使其缓存中增加了一条解析[7],过程见图4。
图4 黑客攻击DNS缓存的基本方法
为了对抗这些攻击,有必要采取一些措施,就服务器本身的设置来说,我们可以采取以下措施:
(1)限制查询BIND版本
在named.conf中的options节中加入version指令,如下:
version“I don’t tell you the true version.”
这可以防止dig工具的版本查询。
(2)限制并发查询数
在named.conf中的options节中加入version指令,如下:recursive-clients 10000;
目前的服务器应该可以提供同时10000个查询的能力。限制并发,可以避免服务器受到过多请求包的冲击。
(3)只对本地用户开放递归解析
这个要在view节中进行设置,例如上文中的三个view,"SHUPL-Networks"中有两条指令:
recursion yes;
allow-query-cache{any;};
这两条指令是允许递归解析,也允许查询缓存。因为这个区域的用户是本地用户,必须允许递归解析。
对于另外两个view,即”edu-networks”和”other”则是这样的指令:
recursion no;
allow-query-cache{none;};
这两条指令禁止了递归解析,也禁止查询缓存。因为这些用户不是本地用户,只允许他们迭代解析,毕竟资源有限啊。
4 DNS日志的分析
Linux运行过程中,会产生大量日志信息,其中也包含了BIND的运行信息,尤其是解析错误。从linux日志中将bind日志取出,可以使用这样的命令
grep named/var/log/messages>dns-log.txt
其中/var/log/messages是Linux操作系统的日志文件,grep named则从这个文件中查找到包含named字样的行,通常bind进程的名字是named。最后将查找结果导出到文本文件中。
打开dns-log.txt这个文本文件,我们可以看到里面都是dns查询的错误信息,正常合法的查询请求这里是没有的,从这些日志中我们可以看到bind的运行情况。
这里,注意到query(cache)都是非法查询dns cache的记录,这些记录极有可能是一些攻击记录。我们想把这些IP地址都搜索出来,可以使用这样的命令
grep cache dns-log.txt|sed-nr's/(^|.*[^0-9])(([0-9]+.){3}[0-9]+).*/2/p'>dns-cache.txt
中间的sed命令也可以这样:
grep-Po"d{1,3}.d{1,3}.d{1,3}.d{1,3}"
注意到这样的查询日志里面有正向查询的,也有反向查询的,我们需要把反向查询的去掉,所以命令可以变成这样
grep cache dns-log.txt|grep-v in-addr|sed-nr's/(^|.*[^0-9])(([0-9]+.){3}[0-9]+).*/2/p'>ip.txt
有时候我们需要专门查看反向解析的ip来源,可以这样
grep cache dns-log.txt|grep in-addr|sed-nr's/(^|.*[^0-9])(([0-9]+.){3}[0-9]+).*/2/p'>ip2.txt
这样抽取以后的文件是把所有非法查询过cache的IP地址都简单列出来了,我们还想知道他们的访问次数,可以用这样的命令
sort ip.txt|uniq-c>dns-sort-log.txt
最后打开dns-sort-log.txt,如下
1 101.82.73.194
2 101.82.78.116
4 101.83.119.111
4 101.83.138.95
7 101.83.151.253
8 101.83.48.24
1 101.83.66.165
3 101.84.159.202
3 101.84.211.223
785 101.85.208.242
6 101.85.87.138
4 101.89.137.221
12 101.89.150.220
3 101.89.173.28
5 101.90.125.131
//其余部分省略
这个文件中,第一列是访问次数,后面是IP地址,对于访问次数特别多的IP地址,值得进一步分析其来源。
5 总结
根据目前校园网多出口的现状,进行网络优化,要考虑外网用户访问校园网资源的性能问题,必须根据用户来源提供解析。本文基于Centos系统和BIND软件,进行了多出口的智能配置,并根据目前安全现状进行了加强配置,提供了故障时分析日志的方法。
[1]石帮荣.智能DNS和线路跟随解析技术在多出口高校校园网中的应用[J].桂林师范高等专科学校学报,2014(10).
[2]CERNET IP地址统计聚类结果[EB/OL].https://www.nic.edu.cn/RS/ipstat/cernet-ipv4.txt
[3]王艳歌.一种基于智能DNS解析及静态地址映射的快速访问策略[J].科技通报,2012(12).
[4]吴阿亭.在Redhat 7.1下设置CHROOT DNS[J].微电脑世界,2002(05).
[5]何坤.DDOS对DNS的安全挑战[J].网络安全技术与应用,2010(01).
[6]靳冲,郝志宇,吴志刚.DNS缓存投毒攻击原理与防御策略[J].网络与信息安全,2009(11).
[7]程卫华.DNS缓存污染的攻击方式和防御策略[J].电信快报,2015(9).
Campus Network Intelligent DNS Configuration Practice and Log Analysis
YUN Tai-zhen
(Computer Education Department,Shanghai University of Political Science and Law,Shanghai 201701,China)
TP393.18
A
1009-3044(2017)24-0027-04
2017-07-15
云太真,男,河南巩义人,讲师,硕士,主要研究方向为计算机网络和软件工程。