大家好,我是苍何。

最近一个多月,全身心投入到开源项目中,其中踩了很多的坑,今天给大家分享的是数据库被勒索的经历,希望大家足够重视数据库的安全防护。

因为是开源项目嘛,为了控制成本,数据库使用的是阿里云 1 核 2G 的 ECS 服务器自己搭建的。

27z3.jpg

想着还在测试阶段,密码干脆就设置的比较简单,没错,就是 123456 😂。并且怎么简单怎么来,用的 docker 快速就搭建了,并没有设置好权限。

搭建好后过了一晚,一直在重启,看了下日志,以为是内存不足导致,又给 MySQL 加了内存限制和内存保留

过了一天又发现,还是重启,且数据都不见了,查了下数据库,只有这一张表,且看了下要我支付 5825.97 元,直接就给我整无语了。

勒索信息

于是用 AI 查了下,发现原来是被黑客勒索了,一直关注开发,对运维、安全和备份确实有失关注了,还好只是测试数据,于是针对于此,做了很多数据库安全加固,给大家做个分享。

解决措施

1、复杂化数据库密码

原先的 root 密码是:123456,现在需要更复杂才行,由于是跑在 docker 中,启动命令设置强密码。密码尽量包含大小写及特殊字符,特别是对于线上环境,一定要把 root 密码设置的复杂些。

2、修改数据库默认端口

有经验的开发人员,项目部署到正式环境,会把 Mysql 数据库的默认端口替换成不常见的端口,例如:33706

docker run -p 33706:3306 --name mysql \
-v /home/mysql/log:/var/log/mysql \
-v /home/mysql/data:/var/lib/mysql \
--memory 1.5g \
--restart=always \
-e MYSQL_ROOT_PASSWORD=填密码 -d mysql:5.7

原先应用服务器端口要删除 3306 端口,并增加 33706 端口,安全组设置如下:

安全组设置

并关闭关闭应用服务器防火墙端口:

sudo ufw delete allow 3306/tcp

image.png

开启数据库服务器33706 端口:

sudo ufw enable

ufw allow 80/tcp
ufw allow 22/tcp
ufw allow 33706/tcp

3、限制数据库用户权限

一般不适用 root 用户来随意操作数据库,需要单独新建一个用户来操作,特别是开放远程连接,一定不能是 root 用户。

先用 docker logs mysql,看下日志,看下有没有启动报错,然后进入容器直接看:

image.png

默认 root 用户有最高权限:

image.png

新增一个开发用户,并设置相应权限:

#切换到mysql库,mysql库里存放着user表
use mysql;
#查看user表现有
select host,user password from user;
#创建开发阶段所需临时用户:dev_laigeoffer,自定义密码,尽量复杂化
create user 'dev_laigeoffer'@'%' identified by '设置密码';

#如果密码设置错了还可以修改
ALTER USER 'dev_laigeoffer'@'%' IDENTIFIED BY '更改密码';


#给开发用户分配访问权限,暂时允许任何主机连接,授权用户除了将权限授予其他账户的能力
GRANT ALL PRIVILEGES ON *.* TO 'dev_laigeoffer'@'%';

# 修改后刷新权限
flush privileges;
#退出mysql数据库
exit;

mysql -u dev_laigeoffer -p

本地用 navicate 连接,

image.png

4、准备数据库服务器

我被黑的 Mysql 数据库是和应用服务器(代码打包后部署的服务器)安装在一起的(为了省钱😂),为了安全正式环境应该把数据库单独放一台服务器,只允许让应用服务器IP来访问数据库服务器,通过独立两者,就算其中一台发生问题,另一台也是好的,进一步降低了危险性

于是买了个新的小内存的服务器专门用来做数据库。开源不易啊,等项目上线,还望大家多多支持

另外对于数据库,最好不要用 docker 安装,硬是要 docker,也一定要做好磁盘挂载才行,否则 docker 挂了,数据都不见了,磁盘挂载还可以把数据放在磁盘上永久保存。

5、定时备份数据库数据

可以定时的备份数据库,开发定时备份功能,每天晚上备份一下数据库,如果没有备份服务器,可以把备份数据存在应用服务器上。

我用的是阿里云自带的云盘快照解决:

image.png

image.png

6、服务器安全加固

观察下服务器是否存在异常进程占用过多的服务器资源,可以参考这个文档做下操作系统加固:另外安全组不要放行不必要的端口,修改安全组规则

以上是数据库被勒索踩坑经历,如果你也喜欢开源和独立开发,喜欢 AI,不妨关注苍何。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐