我想我的网站使用MongoDB作为它的数据存储。 我在开发环境中使用了MongoDB,不用担心,但是我担心公共服务器的安全性。
我的服务器是运行Arch Linux的VPS。 Web应用程序也将在其上运行,所以它只需要接受来自本地主机的连接。 没有其他用户(通过SSH或其他)将直接访问我的服务器。
我应该怎样保护我的MongoDB实例?
Mongo只支持非常基本的安全性:
安全性和身份validationMongoDB文档 。
这是一个很好的清单
启用身份validation – 即使您已经将Mongodb服务器部署在可信networking中,启用身份validation也是很好的安全措施。 如果您的networking受到威胁,它将为您提供“深度防御”。 编辑您的mongodconfiguration文件以启用身份validation
不要将生产数据库暴露给互联网 – 限制对数据库的物理访问是安全性的一个重要方面。 如果没有必要,不要将您的生产数据库暴露给互联网。 如果攻击者无法物理连接到MongoDB服务器,那么数据安全得多。 如果您在AWS上,则可以将您的数据库放置在VPC专用子网中。 阅读博客文章在VPC中部署MongoDB以获取更多信息。
使用防火墙 – 使用防火墙限制哪些其他实体可以连接到您的mongodb服务器。 最佳做法是只允许您的应用程序服务器访问数据库。 如果您在AWS上托pipe,请使用“安全组”来限制访问。 如果您托pipe在不支持防火墙结构的提供程序上,则可以使用“iptables”轻松地自行configuration它。 请参阅mongodb文档为您的schemeconfigurationiptables。
使用密钥文件设置副本集 – 指定共享密钥文件以启用副本集中mongodb实例之间的通信。 要启用它,请将keyfile参数添加到configuration文件中,如下所示。 所有机器上的文件内容必须相同。
禁用HTTP状态接口默认情况下,Mongodb提供了一个默认运行的端口28017,它提供了“home”状态页面。 此接口不build议用于生产,最好禁用。 使用“nohttpinterface”configuration设置来禁用http接口。
禁用REST接口不build议将monogdb REST接口用于生产。 它不支持任何身份validation。 它默认closures。 如果您使用“rest”configuration选项打开它,则应该closures生产系统。
configurationBind_ip如果您的系统有多个networking接口,您可以使用“bind_ip”选项来限制您的mongodb服务器仅侦听相关的接口。 默认情况下,mongodb会绑定到所有的接口
启用SSL – 如果您不使用SSL,您的数据将在未encryption的Mongo客户端和Mongo服务器之间传输,并且容易受到窃听,篡改和“中间人”攻击。 如果您通过不安全的networking(如Internet)连接到Mongodb服务器,这一点尤其重要。
基于angular色的授权 – MongoDB支持基于angular色的身份validation,可以对每个用户可以执行的操作进行细化控制。 使用基于angular色的结构来限制访问,而不是让所有的用户pipe理员。 有关更多详细信息,请参阅angular色文档。
企业mongodb和Kerberos企业mongodb与Kerberos集成进行身份validation。 有关更多详细信息,请参阅mongodb文档。 用户名/密码系统本质上是不安全的 – 如果可能的话,使用基于路边的authentication。
https://scalegrid.io/blog/10-tips-to-improve-your-mongodb-security/
免责声明:我是scalegrid.io的创始人
同样的查询已经在这里讨论过了〜https ://security.stackexchange.com/questions/7610/how-to-secure-a-mongodb-instance/7655#7655
很less有最初始要记住的事情是:
Remove IP Binding from all to just the IP (private or localhost), you expect to get Connection Request Change the default Port Bindings Give only required permissions (like no update/delete permissions to select query users) Setup ssh keys for required master-slave connection, removing involvement of passwords You can even setup an encrypted tunnel for connection between your application and mongodb
实际上它们适用于所有的DataStorage服务
PS:非常有限的mongodb经验
为了安全起见,最好防止对MongoDB节点的任何外部访问。 您可以在不同的节点上运行应用程序和MongoDB。 应用程序节点可以从外部访问,而MongoDB节点只能打开应用程序节点的MongoDB端口。
同时遵循MongoDB官方安全清单来保护MongoDB。
FireCamp在Cloud上为您自动执行此操作,例如AWS。 FireCamp强制执行安全性。 1)AppAccessSecurityGroup是唯一一个被允许访问MongoDB的人。 请在AppAccessSecurityGroup和MongoDB节点上运行的VPC上创build您的应用程序节点。 2)一个堡垒节点被创build,并且是唯一一个可以连接到MongoDB节点的节点。 3)启用了一个副本集成员之间的MongoDB用户authentication和访问控制。