mysql如何启用防火墙限制访问_mysql网络安全配置

来源:这里教程网 时间:2026-02-28 20:35:11 作者:

限制MySQL监听地址

默认情况下,MySQL可能绑定到0.0.0.0(所有网卡),对外暴露端口。应修改配置文件my.cnfmysqld.cnf中的bind-address参数,仅允许本地或指定内网IP访问:

仅本机访问:bind-address = 127.0.0.1 仅内网某段访问:bind-address = 192.168.1.100(需确保该IP已配置在服务器上) 重启服务生效:sudo systemctl restart mysqlsudo 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

相关推荐