应限制MySQL监听地址为127.0.0.1或指定内网IP,配合iptables/ufw/firewalld防火墙控制3306端口访问,严格创建最小权限专用账号并禁用root@'%',必要时启用SSL加密连接。

限制MySQL监听地址
默认情况下,MySQL可能绑定到red">0.0.0.0(所有网卡),对外暴露端口。应修改配置文件my.cnf或mysqld.cnf中的bind-address参数,仅允许本地或指定内网IP访问:
- 仅本机访问:bind-address = 127.0.0.1
- 仅内网某段访问:bind-address = 192.168.1.100(需确保该IP已配置在服务器上)
- 重启服务生效:sudo systemctl restart mysql 或 sudo service mysqld restart
使用系统防火墙控制端口访问
即使MySQL只监听内网IP,也建议配合系统防火墙进一步收紧权限。以常用工具为例:
-
iptables(传统方式):
sudo iptables -A INPUT -p tcp --dport 3306 -s 192.168.1.0/24 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 3306 -j DROP -
ufw(Ubuntu推荐):
sudo ufw allow from 192.168.1.50 to any port 3306
sudo ufw enable -
firewalld(CentOS/RHEL 7+):
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="3306" protocol="tcp" accept'
sudo firewall-cmd --reload
严格管理MySQL用户与权限
防火墙是外层屏障,数据库账户本身必须最小权限化:
- 禁止使用root@'%'远程登录,删除或禁用该账号:
DROP USER 'root'@'%'; - 为应用创建专用账号,并限定来源IP:
CREATE USER 'app_user'@'192.168.1.200' IDENTIFIED BY 'strong_pass';
GRANT SELECT,INSERT ON mydb.* TO 'app_user'@'192.168.1.200'; - 及时刷新权限:FLUSH PRIVILEGES;
启用SSL加密连接(可选但推荐)
当必须开放远程访问时,强制SSL可防止明文传输密码和数据:
- 生成或配置SSL证书后,在my.cnf中启用:
ssl-ca = /var/lib/mysql/ca.pem
ssl-cert = /var/lib/mysql/server-cert.pem
ssl-key = /var/lib/mysql/server-key.pem - 强制某用户走SSL:
ALTER USER 'app_user'@'192.168.1.200' REQUIRE SSL; - 连接时需指定:mysql -u app_user -p --ssl-mode=REQUIRED










