随着最近对Mongo数据库的攻击,我看到了很多关于如何对数据库进行密码保护的指南.我已经浏览了每个指南,我已经设置了一个带有root角色的'superAdmin'和另一个具有读/写权限的basicAdmin.我重新启动mongo使用
mongo --auth
并使用我的superAdmin登录进行身份验证,但这会导致我的网站使用此数据库出现问题.当我启动我的节点应用程序时,我无法访问任何页面,因为它无法连接到数据库,因为它已启用身份验证.如果在我的config/database.js文件中,我有:
module.exports = { 'database': 'mongodb://myWebsite.com/myDatabase' };
我如何允许我的网站访问我的MongoDB并在用户注册时读/写,但也限制任何勒索软件组只是一次又一次地放弃并丢弃每个集合?
您可以使用三种主要方法来保护数据库.
这是更简单的一个.正如您所提到的,您已经使用密码保护了服务器,您可以使用mongoose as连接到数据库
mongoose.connect('mongodb://username:password@host:port/database');
我可能会在此建议您将mongoDb的默认端口更改为其他内容.可以在文件中找到更改端口/etc/mongodb.conf
.
再次引用文件/etc/mongodb.conf
更改bind_ip
到您的网络的本地IP.大多数服务确实提供了这一点.同样更好地设置防火墙.您可以使用的简单防火墙是UFW.仅允许来自您正在使用的服务器的流量.如果使用共享vpn服务,此方法可能无效.
这是最可靠的方法,我建议你使用最后一种方法.这是如何工作的.设置bind_ip
为127.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
.从实际经验来看,它们还可以在您扩展服务的同时减轻很多负担.
希望这可以帮助你.