如何制作一个安全的 MongoDB 服务器?

Ear*_*rlz 8 security arch-linux mongodb

我希望我的网站使用 MongoDB 作为数据存储。我在我的开发环境中使用了 MongoDB 没有任何后顾之忧,但我担心公共服务器的安全性。

我的服务器是运行 Arch Linux 的 VPS。Web 应用程序也将在其上运行,因此它只需要接受来自 localhost 的连接。并且没有其他用户(通过 ssh 或其他方式)可以直接访问我的服务器。

我应该怎么做才能保护我的 MongoDB 实例?

Dha*_*han 14

这是一个很好的清单

  1. 启用身份验证 - 即使您已将 Mongodb 服务器部署在受信任的网络中,启用身份验证也是一种很好的安全做法。如果您的网络受到威胁,它会为您提供“深度防御”。编辑您的 mongod 配置文件以启用身份验证

  2. 不要将您的生产数据库暴露在互联网上——限制对数据库的物理访问是安全的一个重要方面。如果没有必要,请不要将您的生产数据库暴露给 Internet。如果攻击者无法物理连接到您的 MongoDB 服务器,那么您的数据就会更加安全。如果您在 AWS 上,您可以将您的数据库放在 VPC 私有子网中。阅读博客文章在 VPC 中部署 MongoDB,了解更多信息。

  3. 使用防火墙 – 使用防火墙来限制允许哪些其他实体连接到您的 mongodb 服务器。最佳实践是只允许您的应用程序服务器访问数据库。如果您托管在 AWS 上,请使用“安全组”来限制访问。如果您托管在不支持防火墙结构的提供商上,您可以使用“iptables”轻松地自行配置它。请参阅 mongodb 文档为您的场景配置 iptables。

  4. 使用密钥文件设置副本集 - 指定共享密钥文件以启用副本集中 mongodb 实例之间的通信。要启用此功能,请将 keyfile 参数添加到配置文件中,如下所示。该文件的内容在所有机器上都必须相同。

  5. 禁用 HTTP 状态接口 Mongodb 默认提供了一个默认运行在端口 28017 上的 http 接口,它提供了“home”状态页面。不建议将此接口用于生产用途,最好禁用。使用“nohttpinterface”配置设置来禁用http 接口。

  6. 禁用 REST 接口 Monogdb REST 接口不推荐用于生产。它不支持任何身份验证。默认情况下它是关闭的。如果您使用“rest”配置选项打开它,您应该为生产系统关闭它。

  7. 配置 Bind_ip 如果您的系统有多个网络接口,您可以使用“bind_ip”选项来限制您的 mongodb 服务器仅侦听相关的接口。默认情况下 mongodb 将绑定到所有接口

  8. 启用 SSL – 如果您不使用 SSL,您的数据将在您的 Mongo 客户端和 Mongo 服务器之间以未加密的方式传输,并且容易受到窃听、篡改和“中间人”攻击。如果您通过互联网等不安全网络连接到 Mongodb 服务器,这一点尤其重要。

  9. 基于角色的授权——MongoDB 支持基于角色的身份验证,让您可以对每个用户可以执行的操作进行细粒度控制。使用基于角色的构造来限制访问,而不是让所有用户都成为管理员。有关更多详细信息,请参阅角色文档。

  10. Enterprise mongodb & Kerberos Enterprise mongodb 与 Kerberos 集成以进行身份​​验证。有关更多详细信息,请参阅 mongodb 文档。用户名/密码系统本质上是不安全的——如果可能,使用基于遏制的身份验证。

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

免责声明:我是 scalegrid.io 的创始人


mak*_*eji 11

安全和身份验证MongoDB 文档


oos*_*hro 5

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

  • 配置身份验证。创建具有强密码的用户(数据库上下文中的一个用户名和密码)
  • 将 MongoDB 绑定到 127.0.0.0(环回接口)
  • 更改默认端口