如何禁用MongoDB TCP端口?

时间:2014-01-29 03:24:02

标签: mongodb nosql

如何禁用TCP端口?

仅配置unix套接字。

用于隔离本地用户。

3 个答案:

答案 0 :(得分:2)

至少这是一个5岁的小虫。我发现的唯一问题是作为WONTFIX和RTFM关闭,但这个问题与2.4相关,这里涉及到问题:https://jira.mongodb.org/browse/SERVER-9383

除非IPV4 IP地址是127.0.0.1或0.0.0.0,否则MongoDB将拒绝创建unix域套接字。您无法在一个界面上运行它或禁用它(原因未说明)。对我而言,它反映了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));

答案 1 :(得分:1)

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

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

对于其他安全性,您可以参考防火墙规则。

答案 2 :(得分:0)

游戏后期,但对于未来的观众,您可以通过对套接字文件使用 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 在该端口上侦听。