同时存在 CNAME 和 A 记录的 DNS 答案错误

同时存在 CNAME 和 A 记录的 DNS 答案错误

我们有一位客户为他的域名设置了 CNAME 记录。不知何故,他也设法设置了 A 记录,这应该是不可能的,也是 DNS 所禁止的。但结果是:

$ dig @ns1.your-server.de tippspiel-bl1.unternehmen-frische.de 
...
;; ANSWER SECTION:
tippspiel-bl1.unternehmen-frische.de. 7200 IN CNAME www.kicktipp.de.
tippspiel-bl1.unternehmen-frische.de. 7200 IN A 78.46.10.156

第二条记录是非法的。但这导致其他缓存 DNS 服务器78.46.10.156在被询问时返回了一些混乱www.kicktipp.de。但这是完全错误的。

另一台 DNS 服务器使用了这两个答案,并将它们混合在一起。最终结果:访问 www.kicktipp.de 的用户被发送78.46.10.156unternehmen-frische.de

似乎在为具有 CNAME 和 A 记录的域设置 DNS 时,我可以劫持域。这是一个已知错误吗?我该如何保护我的域免受此攻击?

答案1

具体回答您的问题:

  • 不,这不是经常遇到的问题。话虽如此,中毒发生,但它通常依赖于欺骗性回复,而不是A与 共存的记录CNAME。DNSSEC 在设计时就考虑到了中毒攻击。
  • 如果 DNSSEC 在此处实施,验证解析器就会清楚该A记录不是由您签名的。您在自己的区域内所做的其他任何事情都不会对这个问题产生影响。

由于您缺乏更多信息,您必须向您的 ISP 提出此问题。最适用的标准定义 RFC 是RFC2181因为它比RFC1034关于 CNAME 与其他数据共存的问题。(RFC1034 对此表示反对,RFC2181 禁止这样做,除非记录与 DNSSEC 相关)

尽管如此,我还是有点怀疑问题是否正如你所描述的那样。如果tippspiel-bl1.unternehmen-frische.de. IN A发生碰撞,那将是一个非常奇怪的错误www.kicktipp.de. IN A

答案2

如果您自己管理 DNS 服务器,可以启用自定义检查来保护这些内容。请阅读下面直接取自 RFC 的要点。这只是人为错误,可以使用一些脚本或在重新加载区域配置之前进行检查来避免。

CNAME 记录

CNAME 记录不允许与任何其他数据共存。换句话说,如果 suzy.podunk.xx 是 sue.podunk.xx 的别名,您就不能同时拥有 suzy.podunk.edu 的 MX 记录、A 记录,甚至 TXT 记录。尤其不要尝试像这样组合 CNAME 和 NS 记录!:

   podunk.xx.      IN      NS      ns1
                   IN      NS      ns2
                   IN      CNAME   mary
   mary            IN      A       1.2.3.4

缺乏经验的管理员通常会尝试这样做,作为一种明显的方式,让您的域名也可以成为主机。但是,BIND 等 DNS 服务器将看到 CNAME 并拒绝为该名称添加任何其他资源。由于不允许其他记录与 CNAME 共存,因此 NS 条目将被忽略。


不要将 CNAME 与指向其他名称(如 MX、CNAME、PTR 和 NS)的 RR 结合使用。(如果您想实现无类地址内委派,则 PTR 是一个例外。)例如,强烈不建议这样做:

       podunk.xx.      IN      MX      mailhost
       mailhost        IN      CNAME   mary
       mary            IN      A       1.2.3.4

[RFC 1034]在第 3.6.2 节中说不应该这样做,并且[RFC 974]明确规定 MX 记录不得指向 CNAME 定义的别名。这会导致访问数据时出现不必要的间接性,DNS 解析器和服务器需要做更多工作才能获得答案。如果您确实想这样做,可以通过在主机文件上使用预处理器(例如 m4)来实现相同的目的。

此外,拥有指向 CNAME 的 CNAME 等链接记录可能会使管理问题变得更容易,但众所周知,这会导致某些解析器出现错误,无法正确检查循环。因此,某些主机可能无法解析此类名称。

让 NS 记录指向 CNAME 是不好的,并且可能与当前的 BIND 服务器严重冲突。事实上,当前的 BIND 实现将忽略此类记录,可能会导致授权不充分。BIND 中进行了一定程度的安全检查,以防止欺骗 DNS NS 记录。此外,据报道,较旧的 BIND 服务器将陷入无限查询循环,试图找出别名名称服务器的地址,从而导致连续发送 DNS 请求流。

相关内容