【问题标题】:How to disable MongoDB TCP port?如何禁用 MongoDB TCP 端口?
【发布时间】:2021-06-25 00:25:55
【问题描述】:

如何禁用 TCP 端口?

仅配置 unix 套接字。

用于隔离本地用户。

【问题讨论】:

  • 它只适用于 TCP。使用防火墙阻止其他访问。
  • 它也适用于 unix 套接字
  • Stackoverflow 是开发人员的交流网站。但这是一个关于配置和管理的问题。这样的问题更适合dba.stackexchange.com

标签: mongodb nosql


【解决方案1】:

这是一个至少有 5 年历史的错误。我发现的唯一问题是作为 WONTFIX 和 RTFM 关闭的,但是这里针对 2.4 记录的这个问题在某种程度上与这个问题有关:https://jira.mongodb.org/browse/SERVER-9383

MongoDB 将拒绝创建 unix 域套接字,除非 IPV4 IP 地址是 127.0.0.1 或 0.0.0.0。您不能在一个界面上运行它或禁用它(原因未说明)。对我来说,这反映了 MongoDB 代码的质量。

我将代码追溯到 2011 年,我认为这是一种粗略的技巧,可以防止您意外地让 2 个 mongodb 进程尝试创建相同的套接字文件。如果您在 192.168.1.1:27017 和 192.168.1.2:27017 上运行一个实例,它们都会尝试在 /tmp/mongod-27017.sock 处创建相同的套接字文件。由于 10gen 没有人知道为什么要进行检查,因此自 2011 年以来没有人修复它。很容易检查 127.0.0.1:27017 是否已在使用,因为 EADDRINUSE,但很难检查您的套接字文件已过时,或者如果另一个进程创建了它。我不确定他们为什么不只是以不同的方式命名套接字文件。

在此处查看代码:https://github.com/mongodb/mongo/blob/r2.2.4/src/mongo/util/net/listen.cpp#L91

if (useUnixSockets && (sa.getAddr() == "127.0.0.1" || sa.getAddr() == "0.0.0.0")) // only IPv4
               out.push_back(SockAddr(makeUnixSockPath(port).c_str(), port));

【讨论】:

    【解决方案2】:

    我可以理解您在这里关心的是设置中的安全性,但值得考虑的是,MongoDB 是按设计构建的,可以在集群系统中进行交互,因此 TCP 网络是该设计的一部分。也就是说,正如您所知,默认情况下,您可以使用 unix 域套接字连接进行本地访问。

    您可以使用“--bind_ip”配置选项仅绑定到环回(“127.0.0.1”)或仅绑定到您希望使用的接口,因为 mongod 默认绑定到所有可用接口。有关启动选项的完整列表,您可能需要查看 manual page 以确定您需要什么。

    有关其他安全性,您可以参考您的防火墙规则。

    【讨论】:

      【解决方案3】:

      游戏晚了,但对于未来的观众,您可以通过对套接字文件使用 bindIP 来禁用 tcp。

      例如:

      net:
          port: 8080
          # socket filename has port in it
          bindIp: /var/tmp/mongodb/mongodb-8080.sock
          unixDomainSocket:
              pathPrefix: /var/tmp/mongodb
      

      如果我启动 mongo 并运行 lsof -i :8080,我看不到 mongo 在该端口上侦听。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-10-26
        • 2011-05-19
        • 2016-01-10
        • 2011-12-30
        • 2018-12-27
        • 1970-01-01
        相关资源
        最近更新 更多