it-swarm.cn

公共DNS中的私有IP地址

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

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

62
Geoff Dalgas

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

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

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

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

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

63
Tall Jeff

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

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

36
womble

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

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

8
jj33

不,不要将您的私有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的错,它只是在执行所告知的操作。

5
Alnitak

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

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

3
Zoredache

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

3
Dave Cheney

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

2
Nikola Toshev

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

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

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

1
Avery Payne

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

1
sh-beta

我到达这里的时候我一直在寻找类似的信息,但令我惊讶的是,许多人说泄漏您的私有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 ...

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

0
Alexis Wilke