Answers:
您需要了解以下几点:
希望建立这种类型的环境的大多数人是系统管理员。太酷了,我也是系统管理员!工作的一部分是了解您的责任在哪里结束,别人的责任在哪里开始,并相信我,这不是系统管理员可以自己解决的问题。原因如下:
设置面向Internet的DNS解析器非常容易。建立一个系统所需要的研究远远少于了解这样做所涉及的风险。这是善意无意中助长了他人的过失(和苦难)的情况之一。
有时有必要权衡现实与热情。以下是一些很难问自己的问题:
这是您想一时兴起的东西吗,还是您有几百万美元可以投资做的事情呢?
您有专门的安全团队吗?专门的虐待团队?他们两个都有处理新基础设施滥用的周期,以及是否会收到来自外部各方的投诉?
您有法律团队吗?
当所有这些事情都说完并完成后,所有这些努力会否甚至遥遥无期地开始为自己付出代价,为公司扭亏为盈,或者超过处理导致您朝这个方向带来的不便的金钱价值?
最后,我知道这个问题对于与该链接有关的大多数人来说,问答是一种失望。Serverfault是在这里提供答案的,通常认为“这是一个坏主意,不要这样做”的答案不是很有帮助。有些问题比一开始看起来要复杂得多,这就是其中之一。
如果您想尝试执行此工作,则在尝试实施这种解决方案时仍可以向我们寻求帮助。主要要意识到的是,问题本身太大,无法以方便的问答格式提供答案。您需要投入大量时间来研究该主题,并向您提供在实施过程中遇到的特定逻辑问题。此次问答的目的是使您更好地了解全局,并帮助您理解为什么我们不能回答这个问题。
帮助我们确保互联网安全!:)
无论您是运行开放的DNS递归服务器还是权威的DNS服务器,问题都是相同的,并且大多数可能的解决方案也是相同的。
最好的解决方案
DNS cookie是一项提议的标准,它为DNS服务器提供了一种要求客户端发送cookie的方式,以证明客户端IP地址未被欺骗。第一次查找将花费一次额外的往返,这是任何解决方案都可以提供的最低开销。
老年客户的后备
由于DNS cookie尚未标准化,因此现在和未来几年当然需要支持老客户。
您可以对没有DNS cookie支持的客户端的限制请求进行评分。但是速率限制使攻击者更容易对您的DNS服务器进行DoS。请注意,某些DNS服务器具有仅用于权威DNS服务器的速率限制功能。由于您正在询问递归解析器,因此此类速率限制实现可能不适用于您。设计上的速率限制将成为服务器的瓶颈,因此,与没有速率限制的攻击者相比,攻击者需要向您发送更少的流量才能导致合法请求被丢弃。
速率限制的优点之一是,如果攻击者确实向DNS服务器发送了DNS请求,则您更有可能留下剩余容量,使您可以通过SSH攻击服务器并调查情况。另外,速率限制可以设计为主要丢弃来自发送许多请求的客户端IP的请求,这可能足以保护您免受无法访问欺骗性客户端IP的攻击者的DoS攻击。
出于这些原因,将速率限制在实际容量之下是一个好主意,即使它实际上并不能防止放大。
使用TCP
可以通过发送错误代码指示客户端对于UDP太大而强制客户端使用TCP。这有两个缺点。它需要花费两个额外的往返时间。而且某些故障客户端不支持它。
使用此方法,可以将两次额外往返的成本限制为仅第一个请求:
当尚未确认客户端IP时,DNS服务器可以发送截断的响应以强制客户端切换到TCP。截短的响应可以和请求一样短(如果客户端使用EDNS0而响应不使用,则更短),这可以消除放大。
任何可以完成TCP握手并在连接上发送DNS请求的客户端IP都可以暂时列入白名单。一旦列入白名单,IP便可以发送UDP查询和接收UDP响应,最大512字节(如果使用EDNS0,则为4096字节)。如果UDP响应触发了ICMP错误消息,则会再次从白名单中删除IP。
该方法也可以使用黑名单来逆转,这意味着默认情况下允许客户端IP通过UDP查询,但是任何ICMP错误消息都会将IP列入黑名单,而需要进行TCP查询才能摆脱黑名单。
可以将覆盖所有相关IPv4地址的位图存储在444MB的内存中。IPv6地址将必须以其他方式存储。
我不知道是否有任何DNS服务器已实现此方法。
还据报道,某些TCP堆栈可用于放大攻击。但是,这适用于任何基于TCP的服务,而不仅仅是DNS。应该通过升级到内核版本来缓解此类漏洞,在该内核版本中,TCP堆栈已固定为响应SYN数据包不发送多个数据包。
Deliberately open recursive DNS servers are outside the scope of this document.
目前,我已经对此进行了警告。我应该测试是否甚至有可能对配置为递归解析器的Bind启用速率限制,以及它是否将正常运行。