场景
涉及多人操控同一数据库,且数据库数据热更新,表结构有修改可能的开发场景。
团队相关成员分别自建本地不合时宜(数据更新,表更新同步繁琐),故一个公开的云数据库成为需求。
风险
裸露的3306端口数据库+弱密码成为众矢之的。
下面就是赤裸裸的勒索

All your data is backed up.
You must pay 0.0126 BTC to bc1q7r3d6xrq05zeu20ldylphzw6cj03ztlpxg82s
In 48 hours, your data will be publicly disclosed and deleted.
(more information: go to https://is.gd/yotqu)
After payment send mail to us: mailto:dzen+2p6on@onionmail.org and
we will provide a link for you to download your data.
Your DATAID is: 2P6ON
防卫
单独设置公网数据库账号,最小权限化,修改数据库默认端口、限制ip访问、限制密码试错频率。
给予用户web_user访问数据库mydb的权限
-- 创建外网用户
CREATE USER 'web_user'@'%' IDENTIFIED BY '密码';
-- 禁止 root 远程(核心安全)
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost','127.0.0.1');
FLUSH PRIVILEGES;
安全模式(不能建表)
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'web_user'@'%';
开发模式(能建表、最常用)
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, DROP ON mydb.* TO 'web_user'@'%';
限制密码试错频率
ALTER USER 'web_user'@'%'
FAILED_LOGIN_ATTEMPTS 3 -- 连续错3次
PASSWORD_LOCK_TIME 120; -- 锁定120分钟
封ip(1天)
cat > /etc/fail2ban/jail.d/mysql-docker.conf << EOF
[mysql-docker]
enabled = true
port = 3308
filter = mysqld-auth
logpath = /var/lib/docker/volumes/*/_data/*.log
maxretry = 3
bantime = 86400
findtime = 60
EOF
systemctl restart fail2ban
systemctl enable fail2ban
结论
由于需要公网访问,私有vpn方案并关闭数据库公网端口的方案并无采用。目前方案,能在一定程度上防止暴力数据库入侵。
