公共DNS中的私有IP地址


62

我们在防火墙后面有一个仅SMTP的邮件服务器,该服务器将具有公用的A邮件记录。 访问此邮件服务器的唯一方法是从同一防火墙后面的另一台服务器。我们没有运行自己的私有DNS服务器。

将私有IP地址用作公共DNS服务器中的A记录是一个好主意-还是最好将这些服务器记录保留在每个服务器的本地主机文件中?

Answers:


62

有人会说,任何公共DNS记录都不应公开私有IP地址。...以为是让潜在的攻击者可以利用一些利用私有系统可能需要的信息。

就我个人而言,我认为混淆是一种较差的安全性形式,尤其是在我们谈论IP地址时,因为总的来说无论如何它们都很容易猜到,因此我不认为这是现实的安全性折衷。

这里更大的考虑是确保您的公共用户不要将此DNS记录作为托管应用程序的常规公共服务的一部分。即:外部DNS查找以某种方式开始解析为他们无法到达的地址。

除此之外,我看不出将私有地址A记录放入公共空间是否有问题的根本原因…………尤其是当您没有备用DNS服务器来承载它们时。

如果确实决定将此记录放入公共DNS空间,则可以考虑在同一服务器上创建一个单独的区域来保存所有“私有”记录。这将使它们更加明确地表明它们是私有的。...但是对于一个A唱片,我可能不会打扰。


+1,查看对womble答案的评论,原因如下:)
MihaiLimbăşan2009年

2
这是一个有这样想法的好例子:merit.edu/mail.archives/nanog/2006-09/msg00364.html
sucuri 2009年

如果您的敏感服务器具有公用IP地址,但是在防火墙后面限制了访问权限,那么此建议是否仍然适用?如果公用IP地址的公用DNS给出了基础架构的路线图,那么攻击者难道不是有什么用吗?主机识别?
肯尼,

@Kenny是的,从理论上讲,确实有一定用处,但这并不是很难获得的信息,因为公共IP地址的范围很容易被发现。我会在回答中解决这个问题,然后再补充一点,我会认为,如果您依赖隐藏IP地址或主机名作为任何实质性的防线,那么您已经遇到了很多大问题。
高大的杰夫,

1
@Kenny就您的观点而言,当然希望将公开可发现的信息量减到最少,并且您不想披露不需要或至少没有某种良好的成本/收益交易的信息-脱下来考虑一下。那里没有争论。除此之外,我的意思(我认为我们同意)的核心只是,混淆是一种较差的安全形式,没有绝对的好/坏,只有成本/收益权衡的连续性考虑根据具体情况逐案根据您的风险承受能力,等等
高大的杰夫·

36

不久前,我在NANOG列表上就此主题进行了长时间的讨论。尽管我一直认为这是一个坏主意,但事实证明,这在实践中并不是一个坏主意。困难主要来自rDNS查找(用于私有地址,只是在外部环境中不起作用),当您通过VPN或类似方式提供对地址的访问时,确保正确保护VPN客户端免受访问很重要VPN断开时“泄漏”流量。

我说去吧。如果攻击者能够从解析名称到内部地址的过程中获得有意义的意义,那么您将面临更大的安全问题。


1
+1,感谢您在FUD对这个问题的所有答复中都表达理智。我的下背部区域存在“安全风险”,看到路由问题和DNS问题合而为一地成为“不要这样做”的反应,这使我想知道各地运行网络的人员的能力。
MihaiLimbăşan,2009年

1
更正:使“发现路由问题和DNS问题以及身份验证/身份问题合谋”。
MihaiLimbăşan2009年

8

通常,在将来的某个时候,将RFC1918地址引入公共DNS会引起混乱(即使不是真正的问题)。使用您区域的IP,主机记录或私有DNS视图来使用防火墙后面的RFC1918地址,但不要将它们包括在公共视图中。

为了根据其他提交的响应澄清我的响应,我认为将RFC1918地址引入公共DNS是一个人造问题,而不是安全问题。如果有人打电话给我解决问题,而我偶然发现了DNS中的RFC1918地址,我的谈话速度就会非常缓慢,并询问他们最近是否重新启动。我不知道这也许对我来说很势利。但是就像我说的那样,这不是必须要做的事情,并且在某些时候可能会引起混乱和沟通不畅(人,而不是计算机)。为什么要冒险呢?


1
这些是什么真正的问题?人们会以什么方式感到困惑?
womble

2
因此...有礼貌...不将1918年地址放入公共DNS中?我遇到了许多由“隐藏”和“水平分割” DNS区域引起的问题,但是由公共DNS中的私有IP引起的问题不是那么多。我只是看不到问题。
womble

2
@womble,如果计算机由于某种原因试图连接到网络外部的主机,而他们没有获得SMTP服务器,而是期望它们在当前连接的LAN上的IP地址上生活着什么,则它们可能会感到困惑。甚至可能是您的一个在远程使用笔记本电脑的员工可能开始以纯文本格式在其他人的网络上吐出用户名和密码,只是因为它们碰巧也有192.168.1.1
Zoredache,2009年

16
我的回答是,您提到了问题,但未提供任何细节。如果有理由不这样做,我想了解一下,以便就此问题做出充分的理性决定。
womble

1
@Zoredache:为什么有人解析一个他们无法访问的名字?无论如何,DNS并不是唯一可以获取私有地址的地方-HTML可以使用IP文字,例如...
womble

5

不,不要将您的私有IP地址放在公共DNS中。

首先,它泄漏信息,尽管这是一个相对较小的问题。

如果您的MX记录指向该特定主机条目,则更糟糕的问题是,任何尝试向其发送邮件的人最多将获得邮件传递超时。

根据发件人的邮件软件,它们可能会反弹。

更糟糕的是,如果您使用的是RFC1918地址空间(您应该在网络内部),而发件人也是如此,那么他们很有可能会尝试将邮件传递到自己的网络中。

例如:

  • 网络具有内部邮件服务器,但没有拆分的DNS
  • 管理员因此将公用和内部IP地址都放入DNS
  • 和MX记录都指向:

 $ORIGIN example.com
 @        IN   MX    mail.example.com
 mail     IN   A     192.168.1.2
          IN   A     some_public_IP

  • 有人看到这可能会尝试连接到192.168.1.2
  • 最好的情况是反弹,因为他们没有路线
  • 但是如果他们也有使用192.168.1.2的服务器,则邮件将转到错误的位置

是的,这是一个损坏的配置,但是我已经看到了这种情况(而且更糟)。

不,这不是DNS的错,它只是在执行所告知的操作。


如何将邮件传递到错误的机器是DNS问题?您应该验证SMTP服务器。那是一个与DNS完全无关的SMTP配置问题。您甚至没有在这里将苹果与橙子进行比较,而是将放射性黄油吐司与一根棍子上五毫克的拉格朗日衍生物进行了比较。如果您担心获得错误的MX或A,则应该使用DNSSEC而不是让DNS对其不负责的内容负责,并且如果您错误地将SMTP传递到错误的RFC1918号,则说明网络配置错误或设计错误。
MihaiLimbăşan,2009年

(澄清转贴表彰)
米哈伊Limbăşan

如果您网络上的某人“组成”了一个IP号码,则IP协议的功能完全符合设计的要求,即不考虑安全性。您要问的是“我怎么能相信我实际上正在与应与之交谈的人交谈?” IP和/或DNS无法提供的答案,DNSSEC和/或SSL / TLS和/或应用层机制可以提供答案。
MihaiLimbăşan,2009年

只需阅读您对Dave帖子的评论-您的帖子现在更有意义了:)我仍然不同意前提,但我认为这不再是不合理的了……
MihaiLimbăşan2009年

2
不,这根本不是关于身份验证,只是关于连接在错误的位置结束。当Verisign于2001年决定通配* .com时,我看到了很多
Alnitak

3

尽管可能性很小,但我认为您可能已经准备好接受MITM攻击。

我担心的是这个。假设您有一个配置了指向该邮件服务器的邮件客户端的用户,将他们的笔记本电脑带到其他网络。如果其他网络也恰好使用相同的RFC1918,将会发生什么情况。该笔记本电脑可能会尝试登录到smtp服务器,并将用户的凭据提供给不应该包含该服务器的服务器。尤其是因为您说的是SMTP,而没有提到您需要SSL。


如果用户在您的办公室以及其他地方拥有一台笔记本电脑,则他们很可能已经将自己的主机文件配置为指向MTA的内部IP,或者直接在其MUA配置中使用了该IP。最终结果相同。带来IPv6和RFC1918的废止,这是确保……的唯一途径……
womble

优秀的点Zoredache。这是一个有趣的攻击媒介。根据MUA的不同,它可能会显示通常的“令人讨厌的事情,请首先单击我以执行您要我做的事情”对话框,否则,如果ssl证书不匹配,它可能会完全失败。
戴夫·切尼

如果有效网络中的所有服务器(即Web / HTTPS,IMAP和SMTP)都需要基于SSL / TLS的客户端连接,是否可以有效消除这种攻击情形?
约翰尼·犹他州

@JohnnyUtahh,那么您需要所有服务器都支持具有有效证书的TLS,并且需要配置所有客户端以验证证书,并且永远不要尝试使用非TLS连接。现在是10年前的更常见的默认设置。但是仍然有旧的/愚蠢的软件可以尝试非tls连接。
Zoredache

是的,一切都有道理,谢谢@Zoredache。
约翰尼·犹他州

3

您的两个选项是/ etc / hosts,并在您的公共区域中放置一个私有IP地址。我建议前者。如果这表示大量主机,则应考虑在内部运行自己的解析器,这并不难。


1
那当然是一种选择,但是为什么呢?运行内部解析器或使用诸如BIND视图之类的工具(更聪明),除了管理开销和维护负担之外还能获得什么?那是我不明白的。
MihaiLimbăşan,2009年

1
运行自己的名称服务器并不是科学。如果您的网络足够大,以至于您考虑将/ etc / hosts用作hack或非常耗时,则需要在网络中设置一对解析器。作为一项附带好处,您可以减少离开网络的dns流量,并可以加快常见查询的解决速度。
戴夫·切尼

3
我知道这不是火箭科学,但这是维护费用和潜在的安全风险。当然,与泄漏RFC1918网络的存在相比,更高的安全风险。DNS流量完全可以忽略不计-我在工作中的DNS上托管了80多个中等大小和繁忙的区域文件,每周DNS流量不到Youtube的2分钟。加快查询分辨率实际上是DNS中针对RFC1918数字的第一个中肯理智的论据,我在这里已经看到:)赞成实际思考超出通常的直觉“哦,是的,这是安全隐患”的反应:)
Mihai Limbăşan09年

1
@Alnitak:我知道您来自哪里,但这仍然不是DNS问题,并且我认为尝试解决通过DNS源自其他地方的问题根本不是一个好主意。问题应该从源头解决,而不是由DNS黑客修补-黑客使网络脆弱。
MihaiLimbăşan2009年

2
好吧,是的,我同意。将私有主机的信息放入公共DNS中是解决内部没有DNS服务器问题的解决方案... :)问题是高层不知道此信息应该是“私有”的。
Alnitak

2

可能有一些细微的问题。一种是针对DNS重新绑定攻击的常见解决方案会过滤从公共DNS服务器解析的本地DNS条目。因此,您要么开放自己以重新绑定攻击,要么本地地址不起作用,或者需要更复杂的配置(如果您的软件/路由器甚至允许的话)。


+1 DNS重新绑定是错误的!medium.com/@brannondorsey/...
辖施耐德

1

最好将其保留在hosts文件中。如果始终只有一台计算机连接到该计算机,那么将其放入公共DNS会获得什么收益?


在云中工作,您可能拥有数千个私有计算机。几年前,Netflix表示他们拥有2,000多个Cassandra节点。使用该/etc/hosts文件不切实际,因为然后所有2,000台计算机都需要管理这些IP /名称对...
Alexis Wilke

1

如果私下里是10.0.0.0/8、192.168.0.0/16或172.16.0.0/12,那么请不要。大多数Internet路由器以它的本质来识别它- 不能以直接方式路由到公共Internet 的私有地址,这有助于NAT的普及。任何尝试联系您的公共DNS服务器的人都将从DNS检索私有IP地址,只是将数据包发送到....无处。当他们的连接尝试将Internet遍历到您的专用地址时,沿途的某些(配置合理)路由器会简单地吞噬该数据包。

如果您希望从“外部”获取电子邮件,而从“内部”获取电子邮件,则在某些时候,数据包必须穿过防火墙。我建议设置一个DMZ地址来处理此问题-一个单一的公共IP地址,该地址由您安装的任何路由器/防火墙严格控制。您描述的现有设置听起来确实可以做到这一点。

编辑:意图的澄清...(请参阅下面的评论)。如果这没有意义,我将投票删除自己的帖子。


3
很好,这是事实,但是您还没有给出为什么不应该在DNS中发布RFC1918地址的实际原因。您刚刚描述了RFC1918地址是什么,并且可能没有到其中一些地址的路由。与其他IP地址有什么不同?可能没有通往198.41.0.4的路由-这是否意味着在DNS中发布198.41.0.4是错误的?DNS是一个名称解析系统。它与路由无关,两者是正交的。您正在合计两类问题,这些问题基本上等于FUD。
MihaiLimbăşan,2009年

1
讨论的上下文是在公共 DNS服务器中使用私有IP地址。该帖子的目的是表明,默认情况下,路由器不路由私有IP地址。我并不是试图表明您不能在DNS服务器中使用私有IP地址,只是您不应该将这些IP地址“提供给外部”。如果还不够清楚,我将很乐意撤回该职位。否则,我不同意,该职位是100%即时提供的-此人的最终结果是/他们将遇到问题/如果他们这样做。
艾利·佩恩

点头在Alnitak的帖子下,您的评论已被清除:)谢谢。
MihaiLimbăşan,2009年

“任何尝试联系您的公共DNS服务器的人都会从DNS检索私有IP地址,只是将数据包发送到...。无处。” -不,您实际上已经描述了DNS重新绑定,它可以在某些最安全的路由器上工作在那里,包括我的PepWave Surf SOHO:rebind.network/rebind
Ohad Schneider

0

我到达这里的原因是我在寻找类似的信息,但感到惊讶的是,许多人说泄漏您的私有IP地址很好。我想就被黑客入侵而言,如果您处于安全的网络中并没有太大的区别。但是,DigitalOcean可以使用完全相同的电缆来传输所有本地网络流量,而每个人实际上都可以访问其他人的流量(可能对“中间人攻击”是可行的。)如果您只是将一台计算机放在同一数据中心,信息无疑可以使您更进一步地窃取我的流量。(现在,每个客户端都有自己的保留专用网络,就像其他云服务(例如AWS)一样。)

话虽如此,利用您自己的BIND9服务,您可以轻松定义公共IP和私有IP。使用view包含条件的功能可完成此操作。这样,仅当您从自己的内部IP地址中进行查询时,才可以查询一个DNS并获得有关内部IP的答案。

该设置需要两个区域。选择使用match-clients。这是使用BIND9二合一DNS服务器进行设置的示例:

acl slaves {
    195.234.42.0/24;    // XName
    193.218.105.144/28; // XName
    193.24.212.232/29;  // XName
};

acl internals {
    127.0.0.0/8;
    10.0.0.0/24;
};

view "internal" {
    match-clients { internals; };
    recursion yes;
    zone "example.com" {
        type master;
        file "/etc/bind/internals/db.example.com";
    };
};
view "external" {
    match-clients { any; };
    recursion no;
    zone "example.com" {
        type master;
        file "/etc/bind/externals/db.example.com";
        allow-transfer { slaves; };
    };
};

这是外部区域,我们可以看到IP不是私有的

; example.com
$TTL    604800
@       IN      SOA     ns1.example.com. root.example.com. (
                     2006020201 ; Serial
                         604800 ; Refresh
                          86400 ; Retry
                        2419200 ; Expire
                         604800); Negative Cache TTL
;
@       IN      NS      ns1
        IN      MX      10 mail
        IN      A       192.0.2.1
ns1     IN      A       192.0.2.1
mail    IN      A       192.0.2.128 ; We have our mail server somewhere else.
www     IN      A       192.0.2.1
client1 IN      A       192.0.2.201 ; We connect to client1 very often.

至于内部区域,我们首先包括外部区域,这就是它的工作方式。即,如果您是内部计算机,则只能访问内部区域,因此您仍然需要外部区域定义,因此$include命令:

$include "/etc/bind/external/db.example.com"
@       IN      A       10.0.0.1
boss    IN      A       10.0.0.100
printer IN      A       10.0.0.101
scrtry  IN      A       10.0.0.102
sip01   IN      A       10.0.0.201
lab     IN      A       10.0.0.103

最后,您必须确保所有计算机现在都使用该DNS及其从属服务器。假设网络是静态的,则意味着编辑/etc/network/interfaces文件并使用该nameserver选项中的DNS IP 。像这样:

iface eth0 inet static
    ...
    nameserver 10.0.0.1 10.0.0.103 ...

现在您应该已经准备就绪。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.