AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 4458
Accepted
Geoff Dalgas
Geoff Dalgas
Asked: 2009-05-05 18:21:38 +0800 CST2009-05-05 18:21:38 +0800 CST 2009-05-05 18:21:38 +0800 CST

公共 DNS 中的私有 IP 地址

  • 772

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

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

domain-name-system
  • 11 11 个回答
  • 101515 Views

11 个回答

  • Voted
  1. Best Answer
    Tall Jeff
    2009-05-05T18:37:04+08:002009-05-05T18:37:04+08:00

    有些人会说,任何公共 DNS 记录都不应该公开私有 IP 地址……他们的想法是,您正在为潜在的攻击者提供一些信息,这些信息可能需要利用私有系统。

    就个人而言,我认为混淆是一种糟糕的安全形式,尤其是当我们谈论 IP 地址时,因为通常它们很容易被猜到,所以我不认为这是一种现实的安全妥协。

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

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

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

    • 80
  2. womble
    2009-05-05T18:30:19+08:002009-05-05T18:30:19+08:00

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

    我说去吧。如果攻击者能够通过将名称解析为内部地址而获得任何有意义的东西,那么您就会遇到更大的安全问题。

    • 41
  3. jj33
    2009-05-05T18:29:38+08:002009-05-05T18:29:38+08:00

    一般来说,将 RFC1918 地址引入公共 DNS 会在未来的某个时候引起混淆,如果不是真正的问题的话。使用您区域的 IP、主机记录或私有 DNS 视图来使用防火墙后面的 RFC1918 地址,但不要将它们包含在公共视图中。

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

    • 7
  4. Zoredache
    2009-05-05T18:56:43+08:002009-05-05T18:56:43+08:00

    尽管可能性很小,但我认为您可能正在为某些 MITM 攻击做好准备。

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

    • 3
  5. Dave Cheney
    2009-05-05T20:32:00+08:002009-05-05T20:32:00+08:00

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

    • 3
  6. Alnitak
    2009-05-06T01:35:23+08:002009-05-06T01:35:23+08:00

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

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

    如果您的 MX 记录指向该特定主机条目,则更严重的问题是,任何尝试向其发送邮件的人充其量只能获得邮件传递超时。

    根据发件人的邮件软件,他们可能会被退回。

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

    例如:

    • 网络有内部邮件服务器,但没有拆分 DNS
    • 因此,管理员将公共 IP 地址和内部 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 的错,它只是按照它的指示行事。

    • 3
  7. Nikola Toshev
    2016-09-17T00:17:56+08:002016-09-17T00:17:56+08:00

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

    • 3
  8. Avery Payne
    2009-05-06T05:39:53+08:002009-05-06T05:39:53+08:00

    如果私有是指 10.0.0.0/8、192.168.0.0/16 或 172.16.0.0/12,则不要。大多数互联网路由器都认清了它的本质——一个永远不能以直接方式路由到公共互联网的私有地址,这有助于 NAT 的普及。任何试图联系您的公共 DNS 服务器的人都会从 DNS 中检索私有 IP 地址,只是将数据包发送到……无处可去。当他们的连接尝试通过互联网到达您的私人地址时,沿途的一些(配置合理的)路由器只会活着吃掉数据包。

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

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

    • 1
  9. sh-beta
    2009-05-06T07:13:18+08:002009-05-06T07:13:18+08:00

    最好将其保存在 hosts 文件中。如果无论如何都应该只有一台机器连接到它,那么将它放入公共 DNS 有什么好处?

    • 1
  10. Alexis Wilke
    2019-03-16T16:19:58+08:002019-03-16T16:19:58+08:00

    我来到这里是因为我正在寻找类似的信息,并且很惊讶许多人说泄露你的私人 IP 地址是可以的。我想就被黑客入侵而言,如果您在安全的网络上,这并没有太大的区别。然而,DigitalOcean 在完全相同的电缆上拥有所有本地网络流量,每个人都可以真正访问其他人的流量(可能可以通过中间人攻击来实现。)如果你只是想在同一个数据中心获得一台计算机,拥有那个信息无疑让您离破解我的流量更近了一步。(现在每个客户端都有自己的预留私有网络,就像 AWS 等其他云服务一样。)

    话虽如此,使用您自己的 BIND9 服务,您可以轻松定义您的公共和私有 IP。这是使用该view功能完成的,其中包括一个条件。这允许您查询一个 DNS 并仅在您从自己的内部 IP 地址之一询问时获得有关内部 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中使用您的 DNS IP 。nameserver像这样的东西:

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

    现在你应该准备好了。

    • 0

相关问题

  • 可以任意注册名字到同一个公网IP吗?

  • Linux 绑定服务器为 DHCP Windows 客户端提供地址,但不为 DHCP Linux 客户端提供地址

  • 如何使用 Windows Server 解析 http 域名

  • 动态更新 /etc/resolv.conf 中列出的解析器

  • 内部名称解析

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve