【网络架构】DNS最佳实践:权威指南
这是这个星球上DNS最佳实践和技巧最全面的列表。
在本指南中,我将分享我在DNS安全性、设计、性能等方面的最佳实践。
目录:
- DNS最佳实践
- 至少有两个内部DNS服务器
- 使用活动目录集成区域
- 域控制器上的最佳DNS顺序
- 加入域的计算机应仅使用内部DNS服务器
- 将客户端指向最近的DNS服务器
- 配置DNS记录的老化和清除
- 设置PTR记录
- 根提示vs转发(哪一个是最好的)
- 启用调试日志记录
- 对别名使用CNAME记录(而不是记录)
- DNS最佳实践分析器
- Bones:DNS安全提示
警告:我不建议在未经您的组织测试和批准的情况下对DNS等关键服务进行更改。对于这些类型的更改,您应该遵循更改管理流程。
至少有两个内部DNS服务器
在小到大的环境中,应该至少有两个DNS服务器用于冗余。DNS和Active Directory是关键的服务,如果它们失败了,您将遇到重大问题。拥有两台服务器将确保DNS在另一台服务器出现故障时仍能正常工作。
在一个Active Directory域中,一切都依赖DNS来正常工作。甚至浏览互联网和访问云应用程序都依赖于DNS。
我经历了一个完整的域控制器/DNS故障,我不是在开玩笑,当我说几乎所有的工作都停止了。
在上图中,我的站点有两个域控制器和DNS服务器。客户端配置为使用DHCP,DHCP服务器将自动为客户端配置主DNS服务器和辅助DNS服务器。如果DC1/DNS关闭,客户端将自动使用其辅助DNS来解析主机名。如果DC1关闭,并且没有内部辅助DNS,客户端将无法访问电子邮件、应用程序、internet等资源。
一句话:通过拥有多个DNS/Active Directory服务器,确保有足够的冗余。
使用活动目录集成区域
为了使多个DNS服务器的部署更容易,您应该使用Active Directory集成区域。只有在域控制器上配置了DNS,才能使用AD集成区。
AD集成区具有以下优势:
- 复制:AD集成区域将数据作为容器对象存储在AD数据库中。这允许将区域信息自动复制到其他域控制器。区域信息被压缩,允许将数据快速、安全地复制到其他服务器。
- 冗余:由于区域信息是自动复制的,这可以防止DNS出现单点故障。如果一个DNS服务器失败,另一个服务器具有DNS信息的完整副本,并且可以解析客户端的名称。
- 简单性:AD集成区域自动更新,无需配置区域传输。这简化了配置,同时确保冗余到位。
- 安全性:如果启用安全动态更新,则只有经过授权的客户端才能更新其在DNS区域中的记录。简而言之,这意味着只有DNS域的成员才能在DNS服务器上注册自己。DNS服务器拒绝来自不属于域的计算机的请求。
域控制器上的最佳DNS顺序
我看过很多关于这个话题的讨论。在域控制器上DNS次序的最佳做法是什么?
如果你自己搜索,你会发现不同的答案,但大多数人建议配置如下。
这也是微软的建议。
- 主DNS:设置为站点中的另一个DC
- 辅助DNS:使用环回地址设置为自身
让我们看一个真实的例子。
在上图中,我在纽约站点有两个域控制器/DNS。我已将DC1主DNS设置为其复制伙伴DC2。然后使用环回地址将辅助DNS设置为其自身。然后DC2主DNS设置为DC1,它的次DNS使用环回地址设置为自己。
Microsoft声称此配置提高了性能并增加了DNS服务器的可用性。如果首先将主DNS指向自身,则可能会导致延迟。
来源: https://technet.microsoft.com/en-us/library/ff807362(v=ws.10).aspx
加入域的计算机应仅使用内部DNS服务器
加入域的计算机应将主DNS和辅助DNS都设置为内部DNS服务器。外部DNS服务器无法解析内部主机名,因此这可能导致连接问题并阻止计算机访问内部资源。
让我们看一个例子,为什么这是一个糟糕的设置。
- 客户端向内部服务器VEGAS发出请求。
- 客户端决定联系其第二个DNS服务器,即8.8.8.8。它询问服务器主机维加斯的IP地址是什么。
- 外部DNS对这个主机一无所知,因此不能提供IP地址。
- 这将导致客户端无法访问VEGAS文件服务器。
通常,如果主DNS服务器可用,它将首先使用,但它可能没有响应,这可能导致使用辅助DNS。可能需要重新启动计算机才能切换回主DNS,这可能会导致用户受挫和呼叫帮助台。
建议的解决方案是有两个内部DNS服务器,并始终将客户端指向它们,而不是指向外部服务器。
将客户端指向最近的DNS服务器
这将最小化跨广域网链路的通信量,并为客户端提供更快的DNS查询。
在上图中,客户端计算机被配置为使用其站点上的DNS服务器。如果纽约的客户机被错误地配置为使用伦敦的DNS服务器,这将导致DNS性能下降。这将影响用户的应用程序、互联网访问等。我保证你的用户会抱怨一切都有多慢。
自动配置正确DNS服务器的最佳方法是使用DHCP。您应该为每个站点设置不同的DHCP作用域,其中包括该站点的主DNS服务器和辅助DNS服务器。
配置DNS记录的老化和清除
DNS老化和清除允许自动删除旧的未使用的DNS记录。这是一个分为两部分的过程:
- 老化:新创建的DNS记录将应用时间戳。
- 清除:根据配置的时间删除具有过时时间戳的DNS记录。
为什么需要这个?
有时计算机会用不同的IP地址注册多个DNS条目。这可能是由于计算机移动到不同的位置,计算机被重新映像,计算机被丢弃并添加回域。
有多个DNS条目将导致名称解析问题,从而导致连接问题。DNS老化和清除将通过自动删除未使用的DNS记录来解决此问题。
老化和清除仅适用于动态添加的DNS资源记录。
资源:
为DNS区域设置PTR记录
PTR记录将IP地址解析为主机名。除非您正在运行自己的邮件服务器,否则可能不需要PTR记录。
但是…它们对故障排除和提高安全性非常有帮助。
有些系统(如防火墙、路由器和交换机)只记录IP地址。以windows防火墙日志为例。
在本例中,helpdesk正在排除打印机问题,并认为10.1.2.88是一台被防火墙阻止的打印机。因为我有PTR记录设置,所以可以使用nslookup命令快速查找它。
10.1.2.88解析为nodaway.ad.activedirectorypro.com,我知道这是服务器而不是打印机。如果我没有一个PTR记录设置,我会一直在调查清单,试图找到更多关于这个IP的信息。
没有理由不设置PTR记录,它很容易设置,并且不会在服务器上造成额外的资源。请参阅关于设置反向查找区域和ptr记录的完整指南。
其他资源:
根提示(Root Hints)与DNS转发器(哪一个是最好的)
默认情况下,Windows DNS服务器配置为使用根提示服务器进行外部查找。外部查找的另一个选项是使用转发器。
基本上,这两个选项都是解析内部服务器无法解析的主机名的方法。
哪一个是最好的?
通过我自己的经验和研究,这真的可以归结为个人喜好。
以下是一些一般准则,它们将帮助您决定:
- 如果主要关注可靠性,请使用根提示(windows默认设置)
- 转发器可能提供更快的DNS查找。您可以使用基准测试工具来测试查找响应时间,该链接包含在资源部分中。
- 转发商还可以提供安全增强功能(更多信息见下文)
- 必须在每个DC上手动配置转发器
多年来,我使用默认设置(根提示),然后在一次安全会议上介绍了Quad9。Quad9是一个免费、递归、选播的DNS平台,为最终用户提供强大的安全保护、高性能和隐私。简言之,如果客户端向列表中的某个域发出请求,则Quad9将根据坏域列表检查DNS查找。
我使用这项服务已经一年多了,没有任何问题。由于安全性一直是我的一个大问题,所以我个人倾向于从根提示切换到Quad9转发器。它提供快速可靠的查找,并增加了安全性。
Quad9不提供任何报告或分析。被阻止的请求将记录在Windows服务器DNS调试日志中,因此请确保阅读有关如何启用它的下一节。drops将与NXDomain一起记录,因此您可以通过在日志中查找来构建报告。
其他资源:
OpenDNS 是另一家提供这项服务的公司,它的成本很高,但包括其他功能和报告。
How Quad9 Works 的工作原理–此页显示如何在单独的计算机上设置Quad9,如果您有自己的DNS服务器,则不执行此操作。您将要使用您的DNS服务器并添加quad9作为转发器。本页提供了一些额外的详细信息,这也是我将其包括在内的主要原因。您可以将这些步骤用于家庭计算机或只需要访问internet的设备。
DNS Benchmark tool -免费工具,允许您测试任何名称服务器的响应时间。这可能有助于您确定是否要坚持根提示或使用转发器。
启用DNS调试日志记录
DNS调试日志可用于跟踪DNS查询、更新和其他DNS错误的问题。它还可用于跟踪客户活动。
使用splunk之类的日志工具,您可以在顶级域、顶级客户端上创建报告,并查找潜在的恶意网络流量。
Microsoft有一个日志分析器工具,可以生成以下输出:
您应该能够将调试日志拉入任何日志工具或脚本中,以创建自己的报告。
如何启用DNS调试日志
步骤1:在DNS控制台上右键单击DNS服务器并选择“属性”
步骤2:单击调试日志记录选项卡
如果需要,请更改默认路径和最大大小。
其他资源:
对别名使用CNAME记录(而不是记录)
记录将名称映射到IP地址。
CNAME记录将一个名称映射到另一个名称。
如果你使用一个记录来创建别名,你将得到多个记录,随着时间的推移,这将成为一个大混乱。如果您配置了PTR记录,这也将在该区域中创建其他记录,这将增加混乱并产生更大的问题。
如果需要创建别名,最好使用CNAME记录,这将更容易管理并防止创建多个DNS记录。
如何创建别名CNAME记录
我有一个名为file1的文件服务器的记录设置,它解析为IP 192.168.0.201
我们的开发团队希望将服务器重命名为Paris,以使其更易于用户使用。我将创建一个CNAME记录,而不是重新命名服务器。
右键单击区域并单击新别名(CNAME)
化名,我要去巴黎
别名解析为文件1,因此我将其添加到目标主机框中:
单击“确定”即可完成!
现在我可以通过解析为file1的主机名访问巴黎
很容易吧?
这将保持DNS干净,并有助于防止DNS查找问题。
使用DNS最佳实践分析器
Microsoft最佳实践分析器是一个扫描服务器角色的工具,可根据Microsoft指南检查配置。这是一种快速解决和发现潜在问题的方法配置问题。
可以使用GUI或PowerShell来运行BPA,下面给出了这两种方法的说明。
如何使用GUI运行BPA DNS
打开服务器管理器,然后单击DNS
现在向下滚动到“最佳实践分析器”部分,单击“任务”,然后选择“启动BPA扫描”
扫描完成后,将显示结果。
如何使用PowerShell运行BPA DNS
您首先需要角色的ID。运行此命令以获取ID
Get-BPaModel
我可以DNS的ID是Microsoft/Windows/DNSServer。我获取这个ID并使用这个命令为DNS运行BPA。
调用BPAModel“Microsoft/Windows/DNSSerer”
你可能会出错,这很正常
上面的命令只运行分析器它不会自动显示结果。
要显示结果,请运行以下命令:
获取BpaResult Microsoft/Windows/DNSServer
附加:DNS安全提示
我想我们都同意DNS是一项重要的服务。没有了它,任何东西将如何运作?现在让我们来看看保护这项服务的几种方法,其中一些功能在Windows服务器上是默认启用的。
- 筛选DNS请求(阻止坏域)
- 安全DNS转发器
- DNS缓存锁定
- DNS套接字池
- DNSSecFilter DNS请求(阻止坏域)
筛选DNS请求(阻止坏域)
防止病毒、间谍软件和其他恶意流量的最佳方法之一是在流量到达您的网络之前阻止它。
这可以通过一个安全设备来过滤DNS流量来实现,该设备根据坏域列表检查域名。如果域在列表中,则将丢弃通信量,以防止坏域和客户端之间的任何进一步通信。这是下一代防火墙、IPS系统(入侵防御系统)和其他安全设备上的常见功能。
我一直在使用思科的防火墙来提供这项服务。Cisco提供了一个feed(坏域列表),它会定期自动更新。此外,我可以添加额外的feed或手动将坏域添加到列表中。自从我过滤DNS请求以来,病毒和勒索软件类型的威胁已经大大减少。我一直很惊讶,有多少坏流量检测和阻塞,令人惊讶的是非常少的误报!
其他资源:
Cisco Next Generation Firewall official site
https://www.cisco.com/c/en/us/products/security/firewalls/index.html
Paloalto – Another popular firewall/IPS system
https://www.paloaltonetworks.com/products/secure-the-network/next-generation-firewall
安全DNS转发器
安全DNS转发器是过滤和阻止DNS查询的另一种方法。
除了阻止恶意域外,一些转发服务还提供web内容筛选。这允许您根据成人内容、游戏、毒品等类别阻止请求。与防火墙这样的内部设备相比,它的一大优势是可以在设备脱离网络时为它们提供保护。它可能需要在设备上安装客户端,但如果设备位于内部或外部网络上,它将通过安全DNS转发器引导所有DNS流量。
DNS转发筛选器列表:
DNS缓存锁定
DNS缓存锁定允许您控制何时可以覆盖DNS缓存。
当DNS服务器对客户端执行查找时,它会将该查找存储在缓存中一段时间。这允许DNS服务器在以后更快地响应相同的查找。如果我去了espn.com,DNS服务器将缓存该查找,因此如果有人在以后访问它,它将已经被缓存,允许更快的查找。
一种类型的攻击是用错误的记录填充缓存查找。例如,我们在缓存中有espn.com,攻击者可以更改此记录以重定向到恶意站点。下一次有人访问espn.com时,它会将他们发送到恶意站点。
DNS缓存锁定阻止缓存中的记录被更改。默认情况下,Windows Server 2016已启用此功能。
额外资源
https://nedimehic.org/2017/04/25/how-to-deploy-and-configure-dns-2016-p…
DNS套接字池
DNS套接字池允许DNS服务器使用源端口随机化进行DNS查找。通过使用随机端口,DNS服务器将从可用套接字池中随机选择一个源端口。与反复使用同一端口不同,它将从池中随机选择一个端口,这使得攻击者很难猜测DNS查询的源端口。
默认情况下,Windows server 2016也会启用此功能
额外资源
Microsoft配置套接字池
DNSSEC
DNSSEC添加了一个安全层,允许客户端验证DNS响应。此验证过程有助于防止DNS欺骗和缓存poising。
DNSSec使用数字签名来验证响应的真实性。当客户端执行DNS查询时,DNS服务器将向响应附加数字签名,这允许客户端验证响应并证明其未被篡改。
其他资源:
你也可能喜欢…
推荐工具:SolarWinds服务器和应用程序监视器(SAM)
此实用程序旨在监视活动目录和其他关键应用程序。它将快速发现域控制器问题,防止复制失败,跟踪失败的登录尝试等等。
我最喜欢SAM的地方是它易于使用仪表板和警报功能。它还可以监视虚拟机和存储。
讨论:请加入知识星球【首席架构师圈】
- 511 次浏览