第一步:编辑防火墙规则,开放MySQL端口。使用命令 sudo ufw allow 3306/tcp 来允许3306端口的TCP连接,这样MySQL服务就能正常对外访问了。接下来,重载防火墙:sudo ufw reload。检查状态:sudo ufw status,确保规则生效。
配置MySQL绑定IP
MySQL配置文件通常在/etc/mysql/mysql.conf.d/mysqld.cnf,找到bind-address = 127.0.0.1这一行,改为bind-address = 你的服务器IP,或者0.0.0.0允许所有IP连接,但不推荐后者,重启MySQL:sudo systemctl restart mysql。
iptables设置
使用iptables -A INPUT -s 允许的IP -p tcp --dport 3306 -j ACCEPT,然后iptables -A INPUT -p tcp --dport 3306 -j DROP,保存规则iptables-save > /etc/iptables.rules。这样只允许指定IP访问MySQL端口。
firewalld配置
firewall-cmd --permanent --add-port=3306/tcp,firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="3306" accept',然后firewall-cmd --reload。只有特定网段能连。
阿里云安全组
在阿里云控制台,进入ECS实例的安全组,添加入站规则,协议TCP,端口3306,授权对象0.0.0.0/0或指定IP段,立即生效,云上数据库防火墙就这样简单设置好了。
用户权限控制
在MySQL里创建用户时指定host,如CREATE USER 'user'@'允许IP' IDENTIFIED BY '密码'; GRANT ALL ON 数据库.* TO 'user'@'允许IP'; FLUSH PRIVILEGES; 双重防护,防火墙外加权限。
CentOS防火墙
systemctl start firewalld,firewall-cmd --zone=public --add-port=3306/tcp --permanent,firewall-cmd --reload。简单几步,MySQL端口就安全开放了。
FAQ
Q: 防火墙开放3306后MySQL还连不上?
A: 检查MySQL bind-address是否绑定正确IP,重启服务,并确认ufw或firewalld已reload。
Q: 如何只允许本地访问?
A: 将bind-address设为127.0.0.1,不开放3306端口。
Q: 云服务器怎么配?
A: 除了本地防火墙,还要设置安全组规则,放行3306。
Q: iptables规则丢了怎么恢复?
A: 用iptables-restore < /etc/iptables.rules加载。