如何禁用MongoDB TCP端口



如何禁用TCP端口?

仅配置unix套接字。

用于隔离本地用户。

这至少是一个5年的错误。我发现的唯一问题是作为Wontfix和RTFM关闭的,但是此问题针对2.4在这里有点与此问题有关:https://jira.mongodb.org/browse/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年以来没有人修复。您的套接字文件是陈旧的,或者如果其他进程创建了它。我不确定为什么他们不只是以不同的方式命名套接字文件。

请参阅此处的代码:https://github.com/mongodb/mongo/blob/blob/r2.4/src/src/mongo/util/net/listen/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));

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

您可以使用' - bind_ip'配置选项仅绑定到loopback('127.0.0.1')或仅您希望使用的接口,因为Mongod默认将绑定到所有可用的接口。有关启动选项的完整列表,您可能需要查看手动页面以确定您的需求。

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

游戏迟到了,但是对于将来的观众,您可以使用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,我看不到蒙古在那个端口上听。

最新更新