2014-01-29 32 views
4

如何禁用TCP端口?如何禁用MongoDB TCP端口?

仅配置unix套接字。

对于本地用户的隔离。

+1

它只能通过TCP。使用防火墙阻止其他访问。 – WiredPrairie

+3

它可以在unix套接字上工作 – user3188101

+0

Stackoverflow是一个开发人员的交流网站。但这是一个关于配置和管理的问题。这些问题在http://dba.stackexchange.com上适合得多 – Philipp

回答

1

我能理解你的关心这里是用安装安全性,但它是值得考虑的MongoDB是设计建造在集群系统进行交互,因此TCP网络是设计的一部分。这就是说,正如你所知道的那样,默认情况下有一个你可以用于本地访问的unix域套接字连接。

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

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

1

这是一个至少5岁的bug。我发现的唯一问题是关闭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年以来没有人进行修复。由于EADDRINUSE,很容易检查127.0.0.1:27017已被使用,但很难检查你的套接字文件是陈旧的,或者如果另一个进程创建它。我不知道他们为什么不只是以不同的方式命名套接字文件。

在这里看到的代码: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));