Security

如何製作安全的 MongoDB 伺服器?

  • August 29, 2017

我希望我的網站使用 MongoDB 作為它的數據儲存。我在我的開發環境中毫無顧慮地使用了 MongoDB,但我擔心公共伺服器的安全性。

我的伺服器是一個執行 Arch Linux 的 VPS。Web 應用程序也將在其上執行,因此它只需要接受來自 localhost 的連接。並且沒有其他使用者(通過 ssh 或其他方式)可以直接訪問我的伺服器。

我應該怎麼做才能保護我的 MongoDB 實例?

Mongo 僅支持非常基本的安全性:

  • 配置身份驗證。使用強密碼創建使用者(數據庫上下文中的一個使用者名和密碼)
  • 將 MongoDB 綁定到 127.0.0.0(環回介面)
  • 更改預設埠

這是一個很好的清單

  1. 啟用身份驗證 - 即使您已將 Mongodb 伺服器部署在受信任的網路中,啟用身份驗證也是一種很好的安全實踐。如果您的網路受到威脅,它會為您提供“深度防禦”。編輯您的 mongod 配置文件以啟用身份驗證
  2. 不要將您的生產數據庫暴露在網際網路上——限制對數據庫的物理訪問是安全性的一個重要方面。如果沒有必要,請不要將您的生產數據庫公開到 Internet。如果攻擊者無法物理連接到您的 MongoDB 伺服器,則您的數據會更加安全。如果您在 AWS 上,您可以將您的數據庫放在 VPC 私有子網中。閱讀博文在 VPC 中部署 MongoDB 以了解更多資訊。
  3. 使用防火牆——使用防火牆來限制允許哪些其他實體連接到您的 mongodb 伺服器。最佳實踐是只允許您的應用程序伺服器訪問數據庫。如果您託管在 AWS 上,請使用“安全組”來限制訪問。如果您託管在不支持防火牆結構的提供商上,您可以使用“iptables”輕鬆地自己配置它。請參閱 mongodb 文件為您的場景配置 iptables。
  4. 使用密鑰文件設置副本集 - 指定共享密鑰文件以啟用副本集中 mongodb 實例之間的通信。要啟用此功能,請將 keyfile 參數添加到配置文件中,如下所示。該文件的內容需要在所有機器上都相同。
  5. 禁用 HTTP 狀態介面 Mongodb 預設提供一個 http 介面,預設在 28017 埠上執行,該介面提供“首頁”狀態頁面。不建議將此介面用於生產用途,最好禁用。使用“nohttpinterface”配置設置禁用 http 介面。
  6. 禁用 REST 介面 Monogdb REST 介面不建議用於生產。它不支持任何身份驗證。預設情況下它是關閉的。如果您已使用“rest”配置選項將其打開,則應在生產系統中將其關閉。
  7. 配置 Bind_ip 如果你的系統有多個網路介面,你可以使用“bind_ip”選項來限制你的 mongodb 伺服器只監聽相關的介面。預設情況下,mongodb 將綁定到所有介面
  8. 啟用 SSL – 如果您不使用 SSL,您的數據在 Mongo 客戶端和 Mongo 伺服器之間傳輸時未加密,並且容易受到竊聽、篡改和“中間人”攻擊。如果您通過 Internet 等不安全的網路連接到 Mongodb 伺服器,這一點尤其重要。
  9. 基於角色的授權——MongoDB 支持基於角色的身份驗證,讓您可以對每個使用者可以執行的操作進行細粒度控制。使用基於角色的結構來限制訪問,而不是讓所有使用者成為管理員。有關更多詳細資訊,請參閱角色文件。
  10. Enterprise mongodb & Kerberos Enterprise mongodb 與 Kerberos 集成以進行身份驗證。有關詳細資訊,請參閱 mongodb 文件。使用者名/密碼系統本質上是不安全的——如果可能的話,使用基於限制的身份驗證。

https://scalegrid.io/blog/10-tips-to-improve-your-mongodb-security/

免責聲明:我是 scalegrid.io 的創始人

引用自:https://serverfault.com/questions/237762