当前位置:  开发笔记 > 编程语言 > 正文

通过公共互联网保护MongoDB

如何解决《通过公共互联网保护MongoDB》经验,为你挑选了1个好方法。

随着最近对Mongo数据库的攻击,我看到了很多关于如何对数据库进行密码保护的指南.我已经浏览了每个指南,我已经设置了一个带有root角色的'superAdmin'和另一个具有读/写权限的basicAdmin.我重新启动mongo使用

mongo --auth

并使用我的superAdmin登录进行身份验证,但这会导致我的网站使用此数据库出现问题.当我启动我的节点应用程序时,我无法访问任何页面,因为它无法连接到数据库,因为它已启用身份验证.如果在我的config/database.js文件中,我有:

module.exports = {
    'database': 'mongodb://myWebsite.com/myDatabase'
};

我如何允许我的网站访问我的MongoDB并在用户注册时读/写,但也限制任何勒索软件组只是一次又一次地放弃并丢弃每个集合?



1> georoot..:

您可以使用三种主要方法来保护数据库.

用户名和密码

这是更简单的一个.正如您所提到的,您已经使用密码保护了服务器,您可以使用mongoose as连接到数据库

mongoose.connect('mongodb://username:password@host:port/database');

我可能会在此建议您将mongoDb的默认端口更改为其他内容.可以在文件中找到更改端口/etc/mongodb.conf.

绑定到私有IP并使用防火墙

再次引用文件/etc/mongodb.conf更改bind_ip到您的网络的本地IP.大多数服务确实提供了这一点.同样更好地设置防火墙.您可以使用的简单防火墙是UFW.仅允许来自您正在使用的服务器的流量.如果使用共享vpn服务,此方法可能无效.

SSH隧道访问数据库

这是最可靠的方法,我建议你使用最后一种方法.这是如何工作的.设置bind_ip127.0.0.1.我们假设您在5000上运行端口.为了设置隧道使用

ssh \
-L 4000:localhost:5000 \
-i ~/.ssh/key \
@mongo_db_ip

请记住ssh在运行mongodb数据库的实例中添加密钥.应在运行nodejs的服务器上发出上述命令.提到的5000是删除端口,4000是您需要在mongodb上连接的本地端口.所以你在mongoose中连接数据库的命令就是

mongoose.connect('mongodb://localhost:4000/');

摘要

正如您在几乎所有步骤中看到的那样,我专注于设置防火墙,这非常重要.

还应避免使用用户名和密码,最好使用ssh keys.从实际经验来看,它们还可以在您扩展服务的同时减轻很多负担.

希望这可以帮助你.

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有