什么是开放的DNS解析器,我如何保护我的服务器免受黑客滥用?

我在计算机安全方面的背景并不是最强的,但昨天我的公司服务器之一被我们的主机关闭了。 这是一个分配了公共IP的服务器,我在上面托管了几个网络服务应用程序,包括网站和API。有人告诉我,我的服务器“正在运行一个开放的DNS解析器,被用来中继拒绝服务攻击到外部实体”。 这是什么意思?这种攻击是如何工作的?我该如何保护我的系统免受此类滥用? 在我具体的情况下,所涉及的服务器是运行在Windows Server 2012上的,并且它为一个Active Directory域提供DNS服务。

如果您告诉我们您使用的DNS服务器,有人可能会准确地告诉您需要设置哪种配置以及如何设置。如果没有这些信息,我只是猜测了BIND和所有私有IP地址空间,因为BIND是最常见的DNS服务器,而私有地址空间是安全的。如果适用的话,您可能还希望允许来自外部地址块的递归请求。 - HopelessN00b
@HopelessN00b 谢谢,你的回答非常有用。我没有使用BIND(我的主机也以为我在使用,并给了我一些要运行的命令);我在IIS中设置了一个DNS服务器角色。有趣的是,我并没有手动配置DNS服务器,而且我也不太明白为什么我需要它。如果禁用它会导致什么问题? - JSideris
嗯,在Windows环境中不要禁用DNS。这样很可能会破坏Active Directory。告诉我你使用的是哪个版本的Windows Server,我可以(很可能)编辑一些截图来向你展示如何保护Windows DNS服务器。 - HopelessN00b
好的。实际上我在这个周末刚刚设置了活动目录。它是Windows Server 2012标准版。 - JSideris
1个回答

“开放式DNS解析器”是一种愿意为互联网上的任何人解析递归DNS查询的DNS服务器。它类似于开放式SMTP中继,因为缺乏身份验证使得恶意第三方能够利用您的不安全设备传播其恶意负载。开放式SMTP中继的问题在于它们转发垃圾邮件,而开放式DNS解析器的问题在于它们允许进行一种被称为DNS放大攻击的拒绝服务攻击。 这种攻击的原理非常简单 - 因为您的服务器将解析任何人的递归DNS查询,攻击者可以通过向您的服务器发送一个递归DNS查询来导致其参与分布式拒绝服务(DDoS)攻击,该查询将返回大量数据,远大于原始的DNS请求数据包。通过欺骗(伪造)他们的IP地址,他们将把这些额外的流量定向到受害者的计算机而非他们自己,并且当然,他们会尽可能快地向您的服务器和其他开放式DNS解析器发送尽可能多的请求。通过这种方式,一个相对较小带宽的人可以利用他们的管道上的全部带宽,将大量流量引导到他们的受害者,从而“放大”了拒绝服务攻击的规模。

ArsTechnica最近对Spamhaus遭受的DNS放大式DDoS攻击进行了一篇不错的文章, 值得快速阅读以了解基本情况(并获得放大效果的良好视觉效果)。

保护您的系统免受滥用的最简单方法是将服务器执行递归查找的地址限制为本地子网。(当然,具体细节取决于您使用的DNS服务器)。


例如,如果我正在使用BIND 9,并且希望仅阻止来自外部地址的DNS递归,我将在我的配置中使用以下代码:
options {
    directory "/var/named/master";
    allow-recursion { 127.0.0.1; 10.0.0.0/8; 192.168.0.0/16; 172.16.0.0/12; };

这行代码告诉我的BIND服务器仅处理本地环回地址的递归DNS请求(我猜我可以/应该将其设置为本地环回块,即整个/8),以及3个私有IPv4地址空间。


对于您所说的使用Windows Server 2012,您有以下选项。 1. 将DNS服务器与IIS服务器分开。 至少在理想情况下,您没有理由将DNS运行在与IIS相同的服务器上。 将DNS放在一个内部不进行NAT转换的服务器上,这样外部世界就无法访问它,而让IIS驻留在面向外部世界的服务器上。您可以使用双重连接或防火墙规则来选择性地允许从IIS服务器访问您的DNS服务器。 2. 使用防火墙(如内置的Windows防火墙)阻止外部DNS请求。 令我惊讶的是,Windows DNS不允许您限制递归DNS请求所接受的地址,因此这实际上是微软推荐的方法。 选择DNS规则(TCP和UDP),进入“远程IP地址”部分,并添加您LAN中正在使用的子网,以及需要访问Active Directory的任何面向公众的服务器的IP地址。与BIND示例一样,IPv4私有地址空间为127.0.0.0/8、10.0.0.0/8、192.168.0.0/16和172.16.0.0/12。 3. 禁用递归。 我真的不确定这样做会对您的环境产生什么影响,因为您并没有说明您的环境中DNS和AD是如何配置的,因此这是最后的选择。 打开DNS管理器。 在控制台树中,右键单击适用的DNS服务器,然后点击属性。 在哪里? DNS/适用的DNS服务器 点击高级选项卡。 在服务器选项中,选中禁用递归复选框,然后点击确定。 由于我们拥有多森林环境,并且使用条件转发器使其正常工作,我不会勾选该复选框。这也许是您要考虑的事情。

非常好的回答! - Fred the Magic Wonder Dog
完美的、有良好文档支持的解决方案:)。 - JSideris
7那么8.8.8.8或1.1.1.1如何防止自己成为开放式递归解析器呢? - LinuxBabe
@LinuxBabe 你可以在https://developers.google.com/speed/public-dns/docs/security了解谷歌的工作原理。简单来说,他们会对每个客户端IP进行速率限制。 - Matthew Sharp
开放的DNS解析器和公共DNS服务器是一样的吗? - Wira Bhakti