假设您想要创建一个指向私有位置(可能是数据库的位置,或者是您不希望人们尝试通过 SSH 进入的计算机的 IP 地址)的子域,因此您添加一个名为如下内容的 DNS 记录:
private-AGhR9xJPF4.example.com
除了知道子域名确切 URI 的人之外,其他人是否都能看到这个信息?或者,是否有某种方法可以“列出”特定域名下所有已注册的子域名?
答案1
DNS 是否存在某种“子域名列表”查询?
没有针对此特定目的的查询,但有一些间接方法。
- 非增量区域传输(
AXFR
)。大多数服务器运营商将区域传输锁定到特定 IP 地址,以防止无关方窥探。 - 如果启用了 DNSSEC,则
NSEC
可以使用迭代请求走在区域.NSEC3
的实施是为了使区域行走的计算更加密集。
还有一个技巧可以让某人知道是否存在任意子域。
example.com. IN A 198.51.100.1
www.sub.example.com. IN A 198.51.100.2
在上面的例子中,www
位于 内sub
。查询sub.example.com IN A
不会返回 ANSWER 部分,但结果代码将是 NOERROR 而不是 NXDOMAIN,这表明树下还有记录。(只是不知道这些记录的名称)
我们是否应该依赖 DNS 记录的保密性?
不。向客户端隐藏数据的唯一可靠方法是确保客户端从一开始就无法获取数据。假设您的 DNS 记录的存在将通过口口相传或通过观察数据包传播给有权访问它们的任何人。
如果你尝试隐藏可路由 DNS 客户端的记录,你做错了™。确保数据仅暴露给需要它的环境。(例如,对私有 IP 使用私有路由域)即使您设置了这样的划分,也要假设 IP 地址的知识无论如何都会传播开来。
安全的重点应该放在当有人获取 IP 地址时会发生什么,因为这会发生。
我知道 IP 地址保密只是白日梦,原因可以列举得更多。IP 扫描、社会工程……这个清单无穷无尽,而我主要关注的是这个问题的 DNS 协议方面。归根结底,所有这些都属于同一范畴:有人会获取你的 IP 地址。
答案2
这取决于。
例如,当您在公共 DNS 区域中注册子域名时,Andrew B 的回答是正确的,该区域还托管您公司的 MX 记录和公共网站。
大多数公司都会有一个内部 DNS 服务器,该服务器不对外公开,您可以在其中注册内部 (秘密) 主机。
推荐的方法是注册一个专用域名供内部使用,或者在主域名中创建一个子域名供内部使用。
但从技术上讲,您也可以通过在您的域上创建内部视图来使用您的主域,其中根据 DNS 客户端的来源,DNS 区域的备用版本将可见。
答案3
此外到安德鲁·安沃瑟
AXFR
请求可以通过以下命令之一完成:
dig @8.8.8.8 mydomain.com. AXFR
nslookup -query=AXFR mydomain.com 8.8.8.8
host -l mydomain.com
还有一些暴力破解脚本(如 WS-DNS-BFX)使用字典来猜测其他 DNS 记录