2014-01-29 31 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));