前言:
由于是测试服务器,为了简单方便且能够远程连接并未开启认证且BindIP设置为了0.0.0.0。结果发生了意想不到的事。有不明人士,连接了服务器的mongoDB数据库,并清空了我的数据。且非常嚣张的留下了如下敲诈勒索信息:
威胁我,让我使用0.005比特币赎回我的数据,否则就要泄露公布我的数据,这明显是敲诈勒索。我这只是一台测试服务器,没有存储任何真实用户信息,数据丢了也影响不大,但倘若是线上环境,存储了大量用户数据,那么将会是一场巨大的灾难,无论是对于公司还是用户。所以做好安全防范,至关重要。
安全解决方案:
个人猜测此不明人士是通过脚本随机ip地址,程序尝试连接mongoDB的默认端口27017,倘若未设置认证能够连接上那么便拷贝数据至其服务器且清空被攻击服务器数据,然后插入勒索信息。这样的脚本写起来可谓是非常简单,但不得不防。想要避免此类情况,需要做好如下几个方面的设置:
1:修改mongoDB的配置文件,BindIP不要设置为0.0.0.0,设置为127.0.0.1.这样便只能够本服务器连接。
2:防火墙禁止mongoDB外网连接,与设置BindIP一样。
3:修改mongoDB的配置文件,更改mongoDB的默认端口。不使用默认端口。
4:增加用户,设置用户权限,修改mongoDB配置文件开启用户认证
mongoDB默认是无需设置用户权限,连接即可操作读写所有数据库的。这非常危险。我们应该打开认证,增加安全的权限用户。
4.0:cd 到MongoDB的bin目录下,执行./mongo
./mongo
4.1:选择数据库
use admin
4.2:查询是否存在用户
4.3:新增管理员用户
db.createUser({user:"admin",pwd:"youPassword",roles:["root"]})
4.4:连接认证,认证成功返回1,失败0
db.auth("admin","youPassword")
将配置文件中的authorization: disabled设置为:enabled。重启mongoDB。
此时连接mongoDB就需要输入用户名和密码认证用户。
mongoDB定时备份:
由于之前并未及时做数据的备份,导致此次事件还是对本人造成了一定的影响...需要重新花费10小时左右重录数据....数据库的备份至关重要,无论是mysql,sqlserver等关系型数据库还是redis、mongoDB这样的非关系型数据库。Linux下mongoDB自动备份数据库方式:
编写shell脚本:
#!/bin/bash
out_dir=/www/server/mongodb/dataBackups/`date +%Y_%m_%d_%H`
mkdir -p $out_dir
sudo mongodump -h 127.0.0.1:27017 -u admin -p 密码 -d 要备份的数据库名 -o $out_dir --authenticationDatabase admin
studio 3T认证连接:
如果你需要使用tudio 3T等客户端管理软件连接服务器的mongdoDB,那么还是需要把BindIP设置为0.0.0.0,否则是无法连接成功的。
1:填写服务器的Ip地址以及mongoDB的端口
2:填写认证信息(认证方式、用户名、密码、权限数据库)
3:检查是否打开了ssl连接,需要关闭,否则无法正常连接成功
PHP认证连接MongoDB:
new MongoDB\Client时添加上用户名和密码,需要注意的是此处填写的用户需要具备操作对应数据库的权限。
WIN系统下添加mongodb用户,开启认证
添加用户:
启动mongodb
打开studio 3T连接上mongodb
右键选择open IntelliShell,打开一个脚本窗口
use admin
show users
show collections
db.createUser({user:"admin",pwd:"youPassword",roles:["root"]})
db.auth("admin","youPassword")
开启认证:
修改conf配置文件