众所周知,DNS作为一项互联网基础业务,对整个互联网的正常运行起着至关重要的作用。当然,别有用心的攻击者也同样明白这个道理,总是希望通过各种各样的攻击手段破坏DNS解析服务的正常开展。
如何从不同层面综合运营,保证DNS服务安全高效的运行,一直以来都是DNSPod每一位工程师不断思索的问题。我们认为,主要从应该从以下几个方面入手:
状态监控
DNS服务是一项实时性要求非常高的服务,准确全面的监控系统是整个DNS服务的运营基础。为此,我们设计了一整套的监控体系,包括网络流量监控、服务器内核监控模块、解析监控、服务器集群监控等等。从不同层面不同角度对DNS解析服务进行监控,保证工程师能第一时间了解其运行状态。在技术选型方面,我们一方面采用比较成熟的基于SNMP的nagios/cacti监控,一方面针对DNS的特点开发与解析服务紧密结合的监控模块,满足不同监控对象的需要。
信息告警
DNS服务运行过程中总会有各种各样的情况发生,同一个事件需要通知到不同的负责人,每个人需要知道的信息也不尽相同。例如在捕获到域名攻击事件后,会马上向运维工程师发出告警,提示各种层面的流量数据。向技术支持人员发送攻击情况概要和受影响的程度,以便用户询问情况时能得到最新信息。针对VIP客户,还会向相关的销售人员发送攻击相关数据和处理情况,由销售人员直接与客户取得联系。特别重大的攻击事件,还会向市场人员、开发人员、技术负责人甚至总经理发送,保证信息及时传递,事件能够及时处理。为了满足多样化的信息发送需求,我们建立了专门的通知系统平台,提供了一致的API接口供各个程序调用,能够提供邮件、微信、短信、语音等多种通知方式。
事件处理
为了及时响应并处理各种事件,为用户提供持续的优质服务,我们实行24小时值班制度。任何时间都会有经验丰富的技术人员准备应对突发情况。同时,为了进一步加强响应效率,自动化运维处理必不可少。例如,我们对DNS攻击做了长期的研究,开发了域名封禁/解封、防护算法、流量引导等多种防护手段,根据DNS攻击的实际情况自动开启,能在短时间内化解大流量的DNS攻击,将影响减到最小。
数据记录
当然,事件处理完成并不代表着结束,还需要做好各种记录,保证可以回顾分析。基本的数据包括交换机流量数据、网卡抓包数据、事件处理记录等等,我们对这些数据都做了完整的记录、备份、整理、归档,这样不但任何问题都有据可查,也为进一步的统计分析做好了准备。因为数据量大、种类多,我们比较多的使用了Redis和MongoDB,其存NoSQL的特点特别适用于这个情况。
综合运营数据分析
除了短时间的针对单个事件的应对策略,运营更需要长期的数据记录与分析。我们每天的运营情况都会以报表的形式呈现出来,对域名解析量、用户数量、攻击情况等数据更有长时间的追踪和趋势分析。如根据攻击趋势的分析加强防攻击投入,根据用户转入/转出情况联系销售人员跟进。这里我们使用了Graphite用于绘图,D3.js在绘制报表方面也有很好的表现。
总的来说,DNS服务有其复杂性和特殊性,DNSPod长期专注于DNS解析业务,在此领域有丰富的经验和深厚的积累,希望上述分享能给每一位关心DNS领域的朋友带来益处,共同创造更美好的互联网环境。