拥有你的 DNS 数据

作者: Kyle Rankin

我真的认为大多数人根本没有意识到他们在日常使用电脑时泄露了多少个人数据。即使他们对此有所了解,我仍然认为许多人认为他们泄露的数据仅仅是单独的事实,例如他们的名字或他们在哪里吃的午餐。 很多人没有意识到的是,当这些单独的、看似无辜的事实被组合、过滤和分析时,会变得多么具有揭示性。

手机元数据(你呼叫了谁,谁呼叫了你,通话时长以及通话发生的时间)属于这一类别,你在互联网上输入的所有搜索查询也属于这一类别。

在本文中,我将讨论一个常见但经常被忽视的数据来源,它过于具有揭示性:你的 DNS 数据。 你看,虽然你每次输入搜索查询时可能会向 Google 提供大量个人营销数据,但这仍然无法捕捉到你在 Google 搜索之外访问的所有站点,无论是直接访问、通过 RSS 阅读器还是通过朋友发送给你的链接访问。 这就是为什么 Google 在 8.8.8.8 和 8.8.4.4 上实现的免费 DNS 服务如此巧妙——搜索查询具有揭示性,但是当你捕获某人的所有 DNS 流量时,你就可以完整地了解他们访问的每个互联网站点,甚至包括每个非 Web 服务(电子邮件、FTP、P2P 流量和 VoIP),前提是该服务使用主机名而不是 IP 地址。

让我稍微回顾一下。 DNS 是互联网上运行的核心服务之一,它的工作是将主机名(如 www.linuxjournal.com)转换为 IP 地址(如 76.74.252.198)。 如果没有 DNS,我们今天所知的互联网将无法运行,因为基本上我们在 Web 浏览器中访问的每个站点,以及我们在互联网上使用的几乎每个服务,我们都是通过其主机名而不是 IP 地址访问的。 也就是说,我们在互联网上实际访问主机的唯一方法是通过其 IP 地址,因此当你决定访问一个站点时,其主机名会转换为 IP 地址,然后你的浏览器会打开一个连接。 请注意,通过 DNS 缓存和 TTL(生存时间)设置,你可能不必每次访问站点都发送 DNS 查询。 尽管如此,如今 TTL 已经足够短(通常在一分钟到一两个小时之间——www.linuxjournal.com 的 TTL 为 30 分钟),如果我捕获你一天的所有 DNS 流量,我就能告诉你你访问的每个网站以及你当天第一次访问的时间。 如果 TTL 足够短,我可能可以告诉你你每次访问的时间。

大多数人倾向于使用他们被提供的任何 DNS 服务器。 在公司网络中,当你连接到网络时,你很可能通过 DHCP 获得一组 DNS 服务器。 这很重要,因为许多公司网络都有内部资源和内部主机名,只有当你与内部名称服务器通信时,你才能解析这些主机名。

虽然许多人认为在工作中几乎没有隐私,但家庭情况就不同了。 在家时,你最有可能使用你的 ISP 提供给你的 DNS 服务器,而其他人则使用 Google 的 DNS 服务器,因为 IP 地址很容易记住。 这意味着,即使其他人无法拦截你的流量(也许你正在通过 VPN 发送流量,或者也许那种线路窃听需要更多的法律依据),如果他们可以访问你的 DNS 日志(我可以看到有些人认为这符合元数据的条件),他们将对你访问的所有站点有一个相当完整的了解,而你却永远不知道。

这不仅是从监控角度或隐私角度来看的有价值的数据,而且从营销角度来看也是如此。 即使你可能不介意政府知道你浏览哪些色情网站、你在哪里购物、你在哪里获取新闻以及你使用哪个电子邮件提供商,你可能也不希望营销公司拥有这些数据。

递归 DNS 与 DNS 缓存

拥有你的 DNS 数据并保持其私密性的关键是运行你自己的 DNS 服务器并将其用于你的所有出站 DNS 查询。 虽然许多人已经运行某种 DNS 缓存程序,例如 dnsmasq 来加速 DNS 查询,但你想要的不仅仅是一个 DNS 缓存,而是一个可以充当递归 DNS 解析器的东西。 在 dnsmasq 的情况下,它被配置为使用上游递归 DNS 服务器来完成所有 DNS 繁重的工作(文档建议你使用当前在 /etc/resolv.conf 中拥有的任何 DNS 服务器)。 因此,你对 www.linuxjournal.com 的所有 DNS 查询都将发送到你的 DNS 缓存软件,然后被定向到例如你的 ISP 的 DNS 服务器,然后它们执行传统的递归 DNS 过程,即从根名称服务器开始,然后转到 com,最后转到 linuxjournal.com 的名称服务器。 因此,你的所有查询仍然会在外部递归 DNS 服务器上记录。

你想要的是一个本地 DNS 服务,它可以为你执行完整的递归 DNS 查询。 在请求 www.linuxjournal.com 的情况下,它将直接与根、com 和 linuxjournal.com 名称服务器通信,而无需中间人,并最终像任何其他 DNS 缓存服务器一样缓存结果。 对于外部方来说,要捕获你的所有 DNS 日志,他们要么必须入侵你家庭网络上的本地个人 DNS 服务器,要么设置一个窃听器来收集你的所有互联网流量,要么在所有根名称服务器上设置一个窃听器。 这三种选择要么是非法的,要么需要大量的法院监督。

安装和配置你的 DNS 服务器

因此,即使你排除了纯 DNS 缓存软件,你仍然可以选择许多不同的 DNS 服务器,包括 BIND、djbdns 和 unbound 等。 我个人在 BIND 方面经验最丰富,所以这是我的首选,但任何一个都可以完成这项工作。 BIND 的优点,特别是在 Debian 和 Ubuntu 软件包的情况下,是你只需要运行


$ sudo apt-get install bind9

安装软件后,BIND 会自动配置为充当你的内部网络的本地递归 DNS 服务器。 如果你要在运行 Raspbian 发行版的备用 Raspberry Pi 上进行设置,则过程也相同。 在其他 Linux 发行版上,该软件包可能就称为 bind。

如果 BIND 在你的特定 Linux 发行版上没有自动配置为本地递归 DNS 服务器,并且似乎无法开箱即用,只需找到你的 BIND 配置的 options 部分(通常在 /etc/bind/named.conf、/etc/bind/named.conf.options 或 /etc/named/named.conf 中,具体取决于发行版),如果你似乎无法执行递归查询,请在 options{} 部分下添加以下行


options {
  allow-recursion { 10/8; 172.16/12; 192.168/16; 127.0.0.1; };
. . .
}

此更改允许这些网络上的任何主机(内部 RFC1918 IP 地址)在你的名称服务器上执行递归查询,而不会允许世界这样做。

安装 BIND 后,你将需要对其进行测试。 如果你在本地机器上安装了 BIND,你可以使用 dig 命令进行测试


$ dig @localhost www.linuxjournal.com
; <<>> DiG 9.8.1-P1 <<>> @localhost www.linuxjournal.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17485
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 0

;; QUESTION SECTION:
;www.linuxjournal.com.         IN   A

;; ANSWER SECTION:
www.linuxjournal.com.   1800   IN   A   76.74.252.198

;; AUTHORITY SECTION:
linuxjournal.com.       30479  IN   NS  ns66.domaincontrol.com.
linuxjournal.com.       30479  IN   NS  ns65.domaincontrol.com.

;; Query time: 31 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Wed Dec 18 09:37:13 2013
;; MSG SIZE  rcvd: 106

否则,请将 localhost 替换为你的 Raspberry Pi 或安装 BIND 的任何机器的 IP 地址。 要将此名称服务器用于你的所有请求,请更新你的 /etc/resolv.conf 文件,使其包含


nameserver 127.0.0.1

作为其唯一的 nameserver 行。 如果它不在同一台机器上,请将 127.0.0.1 替换为你安装 BIND 的机器的 IP 地址。 在某些现代发行版中,有一些外部工具可以为你调整 /etc/resolv.conf,因此在这些情况下,你可能必须编辑你的 dhclient.conf 或其他网络配置文件,以便你可以覆盖提供的名称服务器列表。 一旦你完成该操作,实际上就完成了所有操作。 现在你可以使用 DNS,并且知道你的所有 DNS 搜索数据都位于你控制的机器上。

Kyle Rankin 是 Linux Journal 的技术编辑和专栏作家,也是 Purism 的首席安全官。 他是 Linux Hardening in Hostile NetworksDevOps TroubleshootingThe Official Ubuntu Server BookKnoppix HacksKnoppix Pocket ReferenceLinux Multimedia HacksUbuntu Hacks 的作者,也是许多其他 O'Reilly 书籍的贡献者。 Rankin 经常在安全和开源软件方面发表演讲,包括在 BsidesLV、O'Reilly Security Conference、OSCON、SCALE、CactusCon、Linux World Expo 和 Penguicon 上。 你可以在 @kylerankin 上关注他。

加载 Disqus 评论