DNS的重要性大家都知道,而企业内网的DNS服务对于企业本身的良好运行也是非常重要。一旦DNS服务出问题,内部应用环境可能就当场崩溃,比如2021年10月4日Facebook崩溃7小时的原因就是DNS失效。参见:
https://new.qq.com/omn/20211013/20211013A076PP00.html
当然大多数企业并没有那么复杂的内部DNS环境。但一旦部署有DNS服务,如何保持这种基础设施能健康运行,无疑也是需要有适当的实践和安全措施的指导。
笔者:国际认证信息系统审计师、软考系统分析师
由于DNS是网络应用程序的支柱,因此DNS基础设施需要具有高度的可用性。要达到基本的冗余能力,企业需要分别配置主要DNS和辅助DNS两台套DNS服务器。
两套DNS服务器之间应建立起高可用(HA)配置,如果一个DNS服务器遇到问题,另一个服务器会立即接管。终端管理员应将计算机终端配置为如果DNS主节点不响应就自动切换使用辅助DNS。
在建立起DNS服务器冗余设置后,DNS基础设施具备了基本的高可用性。高可用设置关键作用在于使主服务器和辅助服务器之间保持DNS记录持续同步,并能应对突发故障,使得最终用户不会没有可用的DNS服务。
并不是全部DNS服务器和信息都需要提供给所有用户使用。
首先,限制允许需要访问DNS服务器和需要使用DNS数据的人员和终端。尤其是如果域名需要对公众公开时,这一点非常重要。
其次,隐藏主DNS服务器。主服务器设置为不能对外部用户可见。主服务器本身的记录不应该在任何公共的DNS服务器数据库中可见。只有辅助DNS服务器负责处理来自查询最终用户的请求。
如果DNS服务器需要允许从企业外部访问,则该服务器需要设置为“仅限权威”的DNS服务器。正常情况下,外部用户不需要查询企业内部的递归DNS服务器。DNS服务器仅响应被授权的相应区域的迭代查询,是能实现高性能的配置。
最后,确保只有系统管理员和IT人员才可以访问企业组织内的主DNS服务器。如果让主DNS服务器对所有内部用户可见,这可能成为一个严重的安全问题。应该通过防火墙之类的手段,对不需要访问服务器的用户隐藏DNS服务器和数据。
显然,要允许一个域内的设备基于域名相互通信,需要将它们指向同一内部DNS服务器。外部DNS服务器无法解析内部设备的主机名。
在建立起DNS服务器高可用配置后,在企业内部环境中需要将各种终端设备的DNS设置,包括主DNS和辅助DNS,设置为同一内部服务器IP地址。在高可用配置的支持下,即使主DNS服务器发生故障,终端设备也不会出现查询失败的问题,因为辅助DNS服务器包含了所有记录,并作为主DNS服务器的透明备份。如果主DNS服务器出现问题,辅助服务器将自动接管响应所有查询,直到主服务器恢复运行。
而即使是掌握了大量B段地址,甚至A段地址的大型企业,使用内部DNS服务器实现信息隐藏,也是比使用外部DNS服务器更好的做法。
只有完全不使用域名方式实现内部通信的企业,才不需要使用内部DNS服务器。
大型企业组织通常在全球各地都设有办事处。如果基础设施条件允许,应该在每个区域的办公室中设置一个本地DNS服务器。
这种部署的好处是本地服务器减少了对DNS请求的响应时间。如果让用户的DNS查询通过WAN方式传输到远程名称服务器进行查询时,用户的等待时间会变得很长。
随着终端数量增加,DNS查询的数量也同时增加。虽然一组集中的DNS服务器可以处理所有请求,但延迟时间很长。通过将用户的机器指向本地或最近的名称服务器,响应时间就能减少到最小。
一般地,DNS查询的时间延迟不应超过50毫秒。在实际中这个数字通常远低于这个值,从而为用户带来更快的加载和访问速度。使用最近的DNS服务器可以提高所有机器的加载时间。通过这种方式,您还可以减轻总部的远程DNS服务器的负担,同时也提高了其性能。需要注意,本地DNS服务器同样应该配置服务器高可用性。
DNS服务器是频繁受到网络攻击的目标。保护DNS基础设施是防止黑客入侵组织的关键步骤。为了避免对DNS设置产生重大影响,请确保使用了下面描述的安全措施。
启用DNS日志记录
DNS日志记录是监视DNS活动的最有效的方法。这些日志会让管理员知道是否有人试图干涉DNS服务器的正常工作。除了使用人的查询活动之外,调试日志还能告知管理员是否出现有关DNS查询或更新的问题。
DNS日志可以显示是否存在高速缓存中毒的痕迹。在这种情况下,攻击者会更改存储在缓存中的域名解析数据,并导致使用人的网络访问偏离方向。最典型的做法是把热门网站的解析更改为恶意站点的IP地址,从而导致使用人访问到假冒的恶意网站,进而成为受害者。
尽管DNS调试日志记录可以将安全性提高到更高的级别,但某些系统管理员的决定是禁用它,主要原因是为了提高DNS服务器的性能。作为网络管理,监视网络活动可以帮助管理员检测到例如DDoS这种攻击行为,但无法检测DNS缓存中毒。因此,启用DNS调试日志是必须的。
锁定DNS缓存
每当有来自客户端的域名查询时,DNS服务器就会查找解析信息,并将其存储在缓存中,以备将来使用。通过缓存查找的结果,可以使得服务器更快地响应后续的相同查询。而攻击者则通过改变缓存的信息来利用这个特性实现攻击。
因此,对启用DNS调试日志更进一步的步骤是锁定DNS缓存。DNS服务器提供了这一功能特性去决定何时可以更改高速缓存的数据。服务器在TTL定义的生存时间期间保留查询结果。如果缓存锁定功能被禁用,则可以在TTL过期之前设法覆盖掉查询结果。这就为缓存中毒攻击提供了空间。
操作系统一般默认启用了缓存锁定功能。缓存锁定的规模是100%。这个数值的理解是,比如把该值设置为70,则70%的TTL时间内,缓存数据无法被覆盖。通过将缓存锁定设置定义为100,更改缓存信息的尝试将被阻止,直到TTL过期为止。
筛选DNS请求以拦截恶意域
DNS过滤是防止用户访问网站或域名的有效方法。如果已知该域名是恶意的,应阻止对该域名的名称解析。当客户端对被拦截的网站域名发送DNS查询时,DNS服务器可通过返回查询无效的方式拦截用户的通信。
DNS过滤可以大幅减少病毒和恶意软件到达企业组织内网的机会。只要用户接触不到恶意网站,风险威胁能在企业网络基础设施中潜伏和横向移动的可能性就大幅降低了。
除了安全性之外,企业组织还可能由于业务策略或生产原因想要阻止某些域名。被屏蔽的域名列表可以包括社交媒体、赌博、色情、视频流媒体页面或任何其他网站。DNS过滤功能同样可以实现这一点。
另一方面,现在大多数的安全设备、安全软件都把DNS过滤作为标准功能,并通过订阅服务提供定期更新的恶意域名列表。这些服务可以节省下管理员的大量时间以及人力成本,并充分提高整体安全性。
使用DNSSEC验证DNS数据的完整性
域名系统安全扩展(DNSSEC)确保客户端收到的查询响应是有效的。数据的完整性是通过DNSSEC功能对提供给名称服务器的DNS数据进行数字签名来实现的。当终端发送查询时,DNS服务器将对查询的响应结果提供数字签名。因此,终端能知道收到的查询响应是有效的。
DNSSEC作为后期增加的专门的安全实现层,有助于抵御DNS协议攻击。由于DNSSEC提供了数据完整性和来源证明,可以成功地避免DNS欺骗攻击和缓存中毒。使用人就能确信他们正在访问的页面是可靠的。
配置访问控制列表
访问控制列表(Access Control Lists,ACL)是保护DNS服务器免受未经授权的访问和欺骗攻击的另一种方法。只有IT管理员和系统管理员才能访问主DNS服务器。通过ACL配置,实现允许从特定主机到名称服务器的入站连接,可以确保只有预期的工作人员才能与服务器进行通信。
ACL还需要定义哪些服务器可以进行区域传输。攻击者可能会尝试通过辅助DNS服务器发送区域传输请求来确定区域设置。如果阻止辅助服务器上的所有区域传输请求,攻击者将无法获取区域信息。此配置能阻止第三方深入了解企业是如何组织内部网络。
企业内网DNS服务的规划设计是企业内网基础设施的安全性问题,需要持续改进,需要注意的是攻击者也同样会持续地潜伏和等待利用企业IT系统中的漏洞。
但最起码地,如果企业遵循了本文中列出的实践要点,企业内网DNS基础设施能实现同时保持安全和灵活性所需要的最关键的要点。
本站微信订阅号:
本页网址二维码: