我希望我的网站使用 MongoDB 作为数据存储。我在开发环境中使用 MongoDB 毫无顾虑,但我担心公共服务器的安全性。
我的服务器是运行 Arch Linux 的 VPS。Web 应用程序也将在其上运行,因此它只需接受来自本地主机的连接。并且其他用户(通过 ssh 或其他方式)都无法直接访问我的服务器。
我应该怎么做才能保护我的 MongoDB 实例?
答案1
Mongo 仅支持非常基本的安全性:
- 配置身份验证。创建具有强密码的用户(数据库上下文中的一个用户名和密码)
- 将 MongoDB 绑定到 127.0.0.0(环回接口)
- 更改默认端口
答案2
这是一份很好的清单
启用身份验证 – 即使您已将 Mongodb 服务器部署在受信任的网络中,启用身份验证也是一种很好的安全做法。如果您的网络受到威胁,它可以为您提供“纵深防御”。编辑您的 mongod 配置文件以启用身份验证
不要将生产数据库暴露在互联网上——限制对数据库的物理访问是安全性的一个重要方面。如果没有必要,请不要将生产数据库暴露在互联网上。如果攻击者无法物理连接到您的 MongoDB 服务器,您的数据就会更加安全。如果您使用 AWS,则可以将数据库放在 VPC 私有子网中。阅读博客文章在 VPC 中部署 MongoDB 以了解更多信息。
使用防火墙 – 使用防火墙来限制允许哪些其他实体连接到您的 mongodb 服务器。最佳做法是仅允许您的应用程序服务器访问数据库。如果您托管在 AWS 上,请使用“安全组”来限制访问。如果您托管在不支持防火墙构造的提供商上,您可以使用“iptables”轻松地自行配置它。请参阅 mongodb 文档以为您的场景配置 iptables。
使用密钥文件设置副本集 – 指定共享密钥文件以启用副本集中的 mongodb 实例之间的通信。要启用此功能,请将 keyfile 参数添加到配置文件中,如下所示。文件的内容在所有机器上都需要相同。
禁用 HTTP 状态接口 Mongodb 默认提供了一个在端口 28017 上默认运行的 http 接口,该接口提供“主页”状态页面。不建议将此接口用于生产,最好禁用。使用“nohttpinterface”配置设置禁用 http 接口。
禁用 REST 接口 monogdb REST 接口不推荐用于生产环境。它不支持任何身份验证。默认情况下,它是关闭的。如果您使用“rest”配置选项将其打开,则应在生产系统中将其关闭。
配置 Bind_ip 如果您的系统有多个网络接口,您可以使用“bind_ip”选项来限制您的 mongodb 服务器仅监听相关的接口。默认情况下,mongodb 将绑定到所有接口
启用 SSL – 如果您不使用 SSL,您的数据将以未加密的形式在 Mongo 客户端和 Mongo 服务器之间传输,并且容易受到窃听、篡改和“中间人”攻击。如果您通过互联网等不安全的网络连接到 Mongodb 服务器,这一点尤其重要。
基于角色的授权 – MongoDB 支持基于角色的身份验证,让您可以精细控制每个用户可以执行的操作。使用基于角色的构造来限制访问,而不是让所有用户都成为管理员。有关更多详细信息,请参阅角色文档。
企业 mongodb 和 Kerberos 企业 mongodb 与 Kerberos 集成以进行身份验证。有关更多详细信息,请参阅 mongodb 文档。用户名/密码系统本质上是不安全的 - 如果可能,请使用基于 kerb 的身份验证。
https://scalegrid.io/blog/10-tips-to-improve-your-mongodb-security/
免责声明:我是 scalegrid.io 的创始人
答案3
安全和身份验证MongoDB 文档。
答案4
为了安全起见,最好阻止任何外部访问 MongoDB 节点。您可以在不同的节点上运行应用程序和 MongoDB。应用程序节点可从外部访问,而 MongoDB 节点仅向应用程序节点开放 MongoDB 端口。
还可以关注MongoDB 官方安全检查表保护 MongoDB。
火营在云(例如 AWS)上为您自动执行此操作。FireCamp 强制执行安全性。1) AppAccessSecurityGroup 是唯一允许访问 MongoDB 的组。请在 AppAccessSecurityGroup 和 MongoDB 节点运行的 VPC 上创建您的应用程序节点。2) 创建了 Bastion 节点,并且是唯一可以通过 SSH 连接到 MongoDB 节点的节点。3) 启用了 ReplicaSet 成员之间的 MongoDB 用户身份验证和访问控制。