最近一个多月,朋友苍何哥全身心投入到 「开源项目」 中,其中踩了很多的坑,今天分享的是 「数据库被勒索」 的经历,希望大家足够重视数据库的安全防护。
因为是开源项目嘛,为了控制成本,数据库使用的是阿里云 1 核 2G 的 ECS 服务器自己搭建的。
想着还在测试阶段,密码干脆就设置的比较简单,没错,就是 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
开启数据库服务器33706 端口:
sudo ufw enable
ufw allow 80/tcp
ufw allow 22/tcp
ufw allow 33706/tcp
3、限制数据库用户权限
一般不适用 root 用户来随意操作数据库,需要单独 「新建一个用户」 来操作,特别是开放远程连接,一定不能是 root 用户。
先用 docker logs mysql,看下日志,看下有没有启动报错,然后进入容器直接看:
默认 root 用户有最高权限:
新增一个开发用户,并设置相应权限:
#切换到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 连接,
4、准备数据库服务器
我被黑的 Mysql 数据库是和应用服务器(代码打包后部署的服务器)安装在一起的(为了省钱😂),为了安全正式环境应该 「把数据库单独放一台服务器」 ,只允许让应用服务器IP来访问数据库服务器,通过独立两者,就算其中一台发生问题,另一台也是好的,进一步 「降低了危险性」 。
于是买了个新的小内存的服务器专门用来做数据库。开源不易啊,等项目上线, 「还望大家多多支持」 。
另外对于数据库, 「最好不要用 docker 安装」 ,硬是要 docker,也一定要做好 「磁盘挂载」 才行,否则 docker 挂了,数据都不见了,磁盘挂载还可以把数据放在磁盘上永久保存。
5、定时备份数据库数据
可以定时的备份数据库,开发定时备份功能,每天晚上备份一下数据库,如果没有备份服务器,可以把备份数据存在应用服务器上。
我用的是阿里云自带的 「云盘快照」 解决:
6、服务器安全加固
观察下服务器是否存在异常进程占用过多的服务器资源,可以参考这个文档做下操作系统加固:另外安全组不要放行不必要的端口,修改安全组规则。
总之还是那句忠告:不要觉得攻击不会发生在自己身上,安全防护意识很重要。
👇🏻 点击下方阅读原文,获取鱼皮往期编程干货。
往期推荐