基金项目:福建省中青年教师教育科研项目(JAT160019)
(Information & Network Center,Xiamen University,Xiamen 361005,China)
DOI: 10.6043/j.issn.0438-0479.201604023
备注
基金项目:福建省中青年教师教育科研项目(JAT160019)
域名系统(domain name system,DNS)是互联网的核心基础服务,服务的健壮性和安全性非常重要.针对高等学校的DNS配置中存在的问题,提出了一个基于开源软件的DNS查询日志分析系统,给出构建DNS集群自动化部署的方案,利用开源工具监控DNS的配置信息和运行状态,并利用大数据分析工具结合少量的编程生成查询日志的可视化图表.实际运用后表明,该系统通过横向扩展可应对每日上亿条数据的实时分析要求.DNS服务整体架构清晰,安全性提高,用户的上网日志可实时统计展示,为分析DNS服务的运行状态、攻击预警、网络性能调优等方面提供了帮助.
Domain name system is one of the most important parts of the Internet.Robustness and security of the service are extremely important.However,numerous problems exist in the University's DNS configuration.This paper,through the setup experience of Xiamen University,proposes a DNS query log analysis system based on open source software.This system gives the best practice of how to automatically build DNS cluster,the method of monitoring and examining the DNS configuration and running status by using open source tools.Additionally,the system offers the query log visualizations generated by using big data analysis tools combined with a small amount of programming.Furthermore,the system can deal with real-time analysis of more than one hundred million bits of data daily through horizontal expansion.After using the system,DNS service exhibits a clear structure and security.The query log statistics shows in real time.All these features offer great help for analyzing the running status of the DNS server,showing attack warning,and optimizing network performance.
引言
域名系统(domain name system,DNS)作为最古老的互联网服务存在,提供域名和服务器IP地址之间的相互映射,使得用户无需记忆物理服务器的IP地址而只通过直观的主机名即可访问互联网服务.由于其重要性,所以DNS协议设计得非常简单,并且一般客户端会设置至少两个DNS服务器地址以免其中某台出现故障.协议的简单和客户端的冗余配置使得DNS故障率较低,或者故障被冗余配置掩盖,导致管理员对DNS服务器疏于维护.实际上,随着上网客户端越来越多,网络攻击越来越普遍[1],黑客水平越来越高,BIND(Berkeley internet name daemon)等DNS软件特性开发导致默认配置参数的持续变更,使得DNS服务器需投入更多的维护工作,然而教育网内部分高等学校(简称高校)DNS系统尚存在着诸多安全隐患.
由于DNS日志量较为庞大,而且DNS服务器日志多台分散,一般只是利用错误日志进行分析,排查问题.随着技术的进步,存储价格下降,机器性能提高,通过大数据技术基于DNS日志数据进行分析变得可行.季成[2]对CN节点的DNS查询日志使用聚类和统计分布进行了分析.苏政[3]利用信息地理学对CN域名日志进行了多个尺度的空间分析,揭示了互联网访问在空间上的规律.章思宇[4]提出一套基于DNS流量评估各类恶意软件的方法.查诚吉[5]、董再旺[6]、王帅[7]、BEGLEITER R[8-9]、Jose[9]等应用大数据框架Hadoop对日志进行分析.以上文献均对DNS的查询日志做了各类有意义的挖掘,分析过程大多利用了Hadoop工具.然而,Hadoop在DNS日志分析方面显得过于复杂,需要较多的集群安装、配置和编程工作量,并且挖掘所得的结果不够直观.董再旺[6]对挖掘结果使用PHP语言实现的可视化分析监控系统也存在编程工作量稍大的问题.同时,以上文献只被动利用DNS日志的分析结果查找安全问题,对于实践中DNS集群的自动化部署和安全配置等最佳实践涉及较少.
本研究提出一个新的方法,通过开源Ansible软件自动化构建高效安全的DNS服务器集群,结合dig、tcpdump、bindgraph、Nagios对服务器进行监控,基于开源Filebeat、Logstash、Elasticsearch软件,提供比Hadoop更简单的安装配置和更实时的分析结果; 同时使用Kibana软件通过简单的编程和配置即可提供基于各种维度的可视化分析图表.
1 高校DNS系统的问题和解决思路
高校DNS系统常见问题包括以下几点:
1)操作系统没有更新到最新,没有安装必要的安全补丁.
2)没有配备或者配置防火墙.
3)DNS配置错误导致信息泄露.配置错误包括开放DNS查询,导致DNS不必要地对互联网提供服务,增加被攻击和被利用发起发射攻击的风险,包括没有配置严格的访问控制列表(access control list,ACL),错误配置权威记录传输协议(authoritative transfer,AXFR)导致整个域信息被恶意下载.
4)缺乏对DNS服务器运行状态的有效监控.
5)BIND软件没有更新到最新,导致存在内存泄露和拒绝服务攻击等问题.
6)DNS攻击发现手段缺乏,没有充分利用查询日志.
为解决以上问题,高校应使用最新的操作系统,部署最新的DNS软件,规划DNS服务器集群架构,按角色分开部署.集群内配置适当的防火墙策略,对外只提供必要的服务.对于有些高校,可限制缓存DNS只在校内提供服务,可在防火墙端设置或者使用ACL限制.
为了使得安装配置自动化,可采用开源运维自动化工具Ansible来部署整个DNS集群.Ansible可自动化部署应用软件,自动化管理配置项.配置DNS集群只需要定义各个角色,每个角色安装软件,修改配置,加入IP,这样,一个命令即可高效完成整个集群部署.
对于配置错误引起的问题,应通读DNS软件手册和更新记录,并使用监控或者自定义脚本定期运行核查配置.
对于DNS查询日志的分析可采用开源软件Elasticsearch,Elasticsearch是一个分布式的搜索和分析引擎,基于开源的Lucene轻量级全文索引引擎工具包,Lucene可对所有文档进行全文分词索引,通过自定义的查询语言可以实现对文档高性能的查询.索引的结果使用开源软件Kibana展示,既可实时分析日志,也可保存分析语句便于在任意时刻调用结果,甚至可跟监控系统对接实现某些指标超过阈值后自动报警.
2 系统设计方案及其功能
通过以上对高校DNS系统问题的研究,结合解决思路设计了如图1的系统整体架构.
图1中的所有角色均支持横向扩展,其中Logstash对CPU要求较高,内存和硬盘空间要求较低,而Elasticsearch集群内部负责数据存储的节点对硬盘空间要求较高,负责检索的节点对CPU和内存要求较高,应差异化配置服务器.
系统实现的源代码保存在版本控制系统内,分为以下4个主要模块:
1)Ansible脚本定义代码.编写Ansible配置文件定义图1所示的整个DNS集群和日志分析集群.Ansible脚本通过角色定义各个服务器配置,服务器的防火墙配置,服务器运行的软件和软件的配置,开源监控系统的配置.对于服务器的配置变更和增加修改均可通过修改Ansible脚本并运行一条命令完成.
2)DNS记录数据代码.DNS记录数据为文本格式,属于DNS软件的配置,本应在Ansible脚本定义代码内定义.然而由于记录的变更较为频繁,如果每次变更一个记录均需运行整个集群的Ansible脚本较为繁琐,所以把频繁修改的记录数据和整个集群定义脚本隔离开来,方便记录更新和使用自动化工具生成.
3)自定义脚本代码.自定义脚本代码包括一些对简单脚本的组合和保存常用脚本运行命令参数的搭配方式,方便自动化运行脚本检查和通过拷贝替换参数即可针对某些项目进行分析.
4)查询日志分析子系统代码.查询日志分析子系统的配置首先通过Kibana自带的GUI配置,该配置属于手工操作,本应无法自动化.然而由于配置信息以JSON文本形式存在于Elasticsearch内,所以配置变更后通过脚本自动下载配置信息保存到源代码,方便系统重建时快速建立整个查询日志分析子系统和对子系统变更历史的追朔.
查询日志分析子系统保存60 d内的DNS查询记录,可视化揭示用户上网行为、攻击行为的模式和趋势.通过分析厦门大学的需求,本子系统已实现以下功能:
1)结合Lucene查询语句可实现各类自定义查询统计,各个字段均可查询,可组合查询,可保存常用查询.
2)可按时间钻取(drill down)查询,提供各种时间粒度的查询结果,可合并集群内多个服务器的日志.
3)查询可视化,在单一仪表盘内一次性展示多个可视化图表.
4)按饼状图显示服务器域名查询量.
5)折线图显示各服务器域名查询量随时间分布情况.
6)显示查询量最大的前几个客户机.
7)显示校内域名被查次数最多的前几个站点列表.
8)显示IPv4和IPv6 DNS查询数量.
9)DNS查询请求类型分析.
10)旭日图显示校内用户对互联网内容提供商(internet content provider,ICP)访问的排名情况[10]
11)查询错误日志,展示十几类错误信息的数量.
3 DNS的选择和安装配置
3.1 DNS软件选型DNS软件可选较多,常见的有BIND、PowerDNS、Dnsmasq、Microsoft DNS、互联网DNS提供商提供的云DNS服务、硬件DNS产品等[11].Windows下的域名系统服务器可基于图形界面管理或者采用脚本管理,自动化程度较低,配置文件不如文本配置直观.云DNS服务使用较为简单,成本较低,但是对于DNS记录的变更控制力较弱.硬件DNS产品完整性较高,功能较多,使用也较为方便.然而硬件存在价格成本,产品化较高导致自定义功能较弱,同时软件的安全更新频率也较低.所以本文中选择当前互联网最为广泛使用的BIND9 DNS软件.
3.2 DNS整体架构首先将权威服务器和缓存服务器分开部署:权威服务器只负责面对互联网的缓存服务器查询厦门大学域名使用,又分为主服务器和从服务器.缓存服务器提供给本校师生使用,可安装任意多个.分开部署使得其中任何一个服务器即使遭受攻击也不会影响其他服务器,也有利于日志收集时对查询日志进行分类.
服务器可采用虚拟机和实体机混合,操作系统采用Windows和Linux混合、多个操作系统版本混合,并使用多个DNS软件,分布在不同的物理位置以提高多样性.
图1中的权威服务器为主从2台服务器,为了更为安全,可横向扩展为3台服务器:1台主服务器,2台从服务器,DNS记录在主服务器更新,主服务器在互联网隐藏起来,只允许管理员登陆,2台从服务器对外提供授权域名查询.
缓存服务器一般安装2台,并公布IP地址给师生使用.同时也可增加多台特殊用途的缓存服务器或转发服务器,比如图1中充当简单蜜罐角色的服务器.由于互联网的攻击存在无目的性,攻击前一般会扫描整个网段的DNS服务器,所以蜜罐缓存服务器对外不公布IP地址,如果蜜罐缓存服务器有任何查询则将查询方IP记录下来,作为可能的攻击源分析.
图1中多台DNS的更新机制为:在主权威服务器变更DNS记录后重新加载配置文件后,通过DNS notify机制通知从权威服务器立即更新主服务器变更的记录,并立即使用命令rndc flushtree远程通知缓存服务器刷新主权威服务器的Zone域.为了使得DNS记录变更能尽快传递到整个互联网,应根据需求动态调整不同DNS记录的存留时间(time to live,TTL).
对安全和高可用性要求更高的,可使用开源软件LVS(Linux virtual server)、Keepalived或者商业硬件产品在前端做负载均衡.
3.3 BIND软件安装和配置服务器需要最小化安装,剔除任何不需要的功能.BIND软件安装应当从包管理器安装,不建议自行编译源代码以防止安全更新较为困难.服务器应当配置防火墙,DNS集群内各个角色服务器的防火墙的配置可参考表1.
为了使得配置文件可读性更高,可使用$INCLUDE关键字拆封DNS配置文件,对于有相同功能的DNS记录,应放入同一个文件,与其他业务整合而自动生成的DNS记录也应放入同一个文件,通过$INCLUDE进入主配置文件,隔离各个不同功能的DNS记录,也为DNS记录版本控制带来好处.
BIND较为重要的几个配置项解析如下:
1)recursion:配置是否接受递归查询,权威服务器应当设置为否.
2)allow-recursion:接受哪些客户端的递归查询,一般设置为校内IP.
3)allow-transfer:AXFR重要配置,限制哪些IP可下载整个域信息.
4)max-cache-size:控制DNS服务器使用缓存内存的大小.
5)rate-limit:防止发射放大攻击.
6)recursive-clients:控制DNS服务器对外并发查询的数量,默认限制1 000.观察本数值可判断DNS查询的繁忙程度和是否正在被攻击.
如果需要部署智能DNS,即对于同一个域名,根据查询客户端的源地址提供离它最近的服务器IP,可参考多view的配置方法[12].
3.4 DNS检测工具和自定义脚本DNS软件安装完成后,为检测配置是否正确,可使用以下开源工具检查:
1)named-checkconf:用于在每次修改DNS配置后检查语法错误.
2)rndc:named的命令行管理工具,可用于DNS配置变更后刷新配置,收集BIND服务器状态,导出缓存数据分析等.
3)dig:DNS客户端工具,可用来检查本机和上下游DNS服务器的配置.DNS整体体系结构类似树形,对于高校来说,校内权威服务器的认定是由edu.cn DNS服务器授权的,所以可使用dig检查edu.cn对于本校DNS服务器配置的正确性.具体操作为可运行命令dig edu.cn得到edu.cn的所有权威服务器,再运行命令dig @dns.edu.cn xmu.edu.cn对每个权威服务器检索即可检查正确性.
4)tcpdump:实时截取DNS服务器网络中传输的数据包分析,并提供逻辑语句过滤出系统管理员想要分析的数据包,可在攻击时协助定位攻击源.配合dig,可检查服务器解析DNS记录是否正常.
5)Nagios:开源监控软件,可监控DNS服务器是否存活和服务器状态是否正常.
6)Fail2ban:Fail2ban可分析DNS查询日志,通过自定义规则,限制某些IP对DNS服务器的请求; 可以控制DNS客户端对服务器查询的频次,可部分抵挡恶意机器的攻击扫描.
7)grep,awk,sort,cut等命令行工具:可组合这些工具编写自定义脚本对DNS配置文件的序列号进行自动化增长,也可对DNS Log进行简单分析,为大规模日志分析做准备.
8)bindgraph:简单的开源可视化DNS日志分析工具.适合单服务器,可作为集群DNS日志分析的一种补充.
对于DNS管理员,应当熟练掌握以上工具的使用方法.DNS的攻击形式多样,新方法层出不穷,应当可通过组合以上工具分析DNS运行状态和排错,有识别攻击源或类型的能力.
3.5 DNS监控DNS单服务器的监控使用开源Nagios监控,通过插件check_ping监控服务器是否存活,通过check_tcp监控TCP53端口是否开放,通过check_udp监控UDP53端口是否开放,通过check_dns监控DNS请求是否正常.通过安装代理上报服务器的CPU、Load、内存占用、硬盘空间等数据.在系统状态出现异常情况下第一时间发送邮件报警到管理员邮箱.
通过开源软件Topbeat收集DNS服务器的CPU、内存、硬盘、进程数,进入Elasticsearch,可在事后追朔服务器的运行状态.
4 BIND查询日志分析子系统的实现
DNS日志存于文本文件,日志量庞大,集群内多个服务器日志分散,无法进行快速查询,所以需要使用采集工具中心化所有日志,并进行全文索引,方便分析.DNS日志的大小跟TTL有相当大的关系,统计出来某个站点的查询量大不一定代表这个站点的访问量就较大,有可能只是因为站点的TTL设置较小而已.黄振[13]提出了一种对DNS查询日志间接测量域名访问量的方法,并考虑了TTL的影响因素,进行加权调整.所以对DNS日志的分析应当参考TTL值,然而如果某个客户端的查询量非常大,则可直接以这个数据判断客户端是否中病毒.
由于DNS日志会记录访问者的上网记录,所以日志应当在一段时间后删除.如要提供给第三方分析,应当对IP地址进行不可逆哈希,防止用户的上网隐私泄露.
4.1 日志的采集查询日志分析子系统采用在DNS服务器安装开源软件Filebeat收集日志,对于采集工具的选择,需要对被采集服务器影响较小,Filebeat只需要一条命令即可安装,通过配置DNS日志保存目录,即可自动收集.收集完的日志通过网络传送给Logstash分析.
由于DNS日志较大,从Filebeat到Logstash到Elasticsearch,可能存在吞吐量问题,如果下一个步骤来不及处理数据会被简单丢弃.解决的方法是根据各个应用自身的日志信息,收集吞吐量和出错信息,横向扩展多台Logstash或者Elasticsearch,或者在中间加入队列服务器异步化处理.
4.2 日志的索引、保存Logstash的主要作用是对日志进行分析,预处理,分拆成不同字段,根据后期查询的要求提供数据源.DNS查询日志格式为:
09-Feb-2016 03:38:25.786 queries:client 127.0.0.1#9527(dog.xmu.edu.cn):query:dog.xmu.edu.cn IN A+(192.168.0.10)
如果整条记录不加处理直接存入Elasticsearch,Elasticsearch会对记录进行分词索引,查询速度虽然较快,但不利于分字段分析.所以我们需要把查询日志拆封,把各个字段分析出来,分别存入Elasticsearch.以上的查询日志,通过正则表达式,可以拆封得到查询时间、客户端IP地址、所查询的域名、查询的类型等信息.
为了更加精细化分析,对于IP地址,通过开源IP地理信息数据库,获得IP对应的国家、省份、城市和具体位置.而对于校内的IP地址,则不使用开源IP地理信息数据库,而是替换成校内自定义的片区楼宇数据库,在查询时即可根据片区楼宇来统计查询量.
对于查询的域名,可以根据域名使用点号进行分级的特点,通过正则表达式,拆封域名,得到二级、三级域名和主机名.
拆封的Logstash关键代码如下:
grok {
match=> {"message"=> "%{DATA:querydate} queries:client%{IP:clientip}#%{INT} \(%{DATA:queryhost}\):query:%{DATA} IN%{WORD:rrname} [+-]%{WORD}* \(%{IP}\)"}
}
#对DNS客户端进行地理信息定位,对权威服务器的查询使用开源IP地理信息数据库,而对于缓存服务器的查询应使用校内自定义的片区楼宇数据库
geoip {
source=> ["clientip"]
}
#由于已经将message全部拆封成字段保存到Elasticsearch,所以原始message已无必要保存,此举可节省近一半硬盘空间.
mutate {
remove_field=> ["message"]
}
if([queryhost]=~"^[^.]+\.[^.]+$"){
grok {
match=> {"queryhost"=> "^(?<domainname2>[^.]+)\.(?<domainname1>[^.]+)$"}
}
}
if([queryhost]=~"^[^.]+\.[^.]+\.[^.]+$"){
grok {
match=> {"queryhost"=> "^(?<domainname3>[^.]+)\.(?<domainname2>[^.]+)\.(?<domainname1>[^.]+)$"}
}
}
if([queryhost]=~"^.*?[^.]+\.[^.]+\.[^.]+\.[^.]+$"){
grok {
match=> {"queryhost"=> "^.*?(?<domainname4>[^.]+)\.(?<domainname3>[^.]+)\.(?<domainname2>[^.]+)\.(?<domainname1>[^.]+)$"}
}
}
Logstash预处理后的字段提交到Elasticsearch保存,由于日志量较大,而且由于查询日志保存了用户的上网记录,所以需要定期清理Elasticsearch数据库空间,本子系统的规则是自动清理60 d前的记录,清理使用curator脚本,放入crontab每日定期运行,运行命令为
/usr/local/bin/curator --host 127.0.0.1 delete indices --older-than 60 --time-unit days --timestring%Y.%m.%d --prefix dnslog
由于查询日志大小的不确定性,有可能某日攻击会导致生成非常大量的查询日志,所以管理员必须经常性观察Elasticsearch集群占用磁盘的情况.
4.3 日志可视化展现日志存储到Elasticsearch后,通过Kibana实现对日志的可视化查询,建立基于Lucene查询命令,对于需要经常性分析的,可保存以待随时调用查询.而对于需要可视化展示的,则构建相应的图表.
以创建校内用户对互联网ICP访问的排名情况的图2旭日图为例,具体步骤为:新建一个可视化图表,选择饼状图,使用新的搜索,饼状图的聚合度量metrics使用Count函数,buckets桶字段分别采用domainname1、domainname2、domainname3字段依次切片,为顶级域名、二级域名和三级域名.为了使结果更精确,通过搜索排除查询量较大的疑似攻击日志.
图2旭日图中最内层的圆表示校内用户对互联网诸如.com、.cn、.net、.org等顶级域名的总访问量对比,内层圆外的第1个圆环体现对应的顶级域名下的二级域名诸如qq.com、baidu.com、360.cn等的访问量对比.由于国内高校的域名一般为.edu.cn结尾,所以校内用户对国内其他高校的访问量对比体现在第2个圆环内.
通过以上方法,建立多个旭日图、折线图、柱形图、表格、地图等可视化图表,并放入Kibana的Dashboard,即可实现在一个页面查看服务器总的查询量、分服务器查询量、校内域名查询量排名、查询量最大的客户端排名、DNS查询请求类型、校内用户对互联网访问情况、查询客户端地理信息分布情况等各类统计分析信息.
5 结 论
应用本系统后,DNS集群内服务器职责清晰,服务器安全性提高,自动化程度提高,服务器的运行状况透明.本系统性能方面可承受厦门大学每日近40 GB的DNS查询日志总量和每日近3亿次的查询总数的日志分析.根据查询日志的统计,可以揭示用户对各类网站访问量的对比,揭示工作日和假期用户的访问行为习惯变化趋势.定期针对查询量最大的多台客户端和蜜罐服务器收集到的客户端,交由网络部通知用户检查是否中毒,为防病毒和识别网络攻击提供了新的渠道.针对内部模拟的反射攻击、大批量查询请求攻击,均可通过可视化图表快速定位,取得了良好的效果.不足之处在于由于没有排除TTL对DNS查询量的影响,所以无法得出域名准确的访问量.对上网日志的精确分析,应当直接获取交换机的上网日志,而本系统使用的开源大数据分析架构也同样适用于海量上网日志的实时分析,今后可继续在这方面进行研究.
- [1] 任立军.域名系统DNS安全增强的研究与设计[D].成都:电子科技大学,2013:1.
- [2] 季成.基于DNS查询日志的互联网访问模式分析[D].北京:清华大学,2009:56.
- [3] 苏政.基于日志数据的域名访问源多尺度分析[D].南京:南京师范大学,2013:9.
- [4] 章思宇.基于DNS流量的恶意软件域名挖掘[D].上海:上海交通大学,2014:14.
- [5] 查诚吉.基于DNS日志的移动互联网分析[D].北京:北京邮电大学,2014:14.
- [6] 董再旺.国家域名日志可视化分析监控系统设计与实现[D].北京:中国科学院大学,2014:3.
- [7] 王帅,汪来富,金华敏,等.网络安全分析中的大数据技术应用[J].电信科学,2015(7):145-150.
- [8] BEGLEITER R,ELOVICI Y,HOLLANDER Y,et al.A fast and scalable method for threat detection in large-scale DNS logs[C]∥2013 IEEE International Conference on Big Data.[S.l.]:IEEE,2013:738-741.
- [9] JOSE A S,B A.Automatic detection and rectification of DNS reflection amplification attacks with hadoop mapreduce and chukwa[C]∥2014 Fourth International Conference on Advances in Computing and Communications(ICACC).Cochin:IEEE,2014:195-198.
- [10] 季成,李晓东,袁坚,等.基于k-means算法的DNS查询模式分析[J].清华大学学报(自然科学版),2010(4):601-604,608.
- [11] WIKIPEDIA.Comparison of DNS server software[EB/OL].[2016-02-12].https:∥en.wikipedia.org/wiki/Comparison_of_DNS_server_software.
- [12] 张焕杰.多view的DNS服务器配置文件组织[J].中国教育网络,2009(5):75.
- [13] 黄振.基于DNS缓存的域名访问量估测[D].哈尔滨:哈尔滨工业大学,2013:21.