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

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

限制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