当前位置:当前位置:首页 > 百科 > 添加防火墙3306端口 正文

添加防火墙3306端口

[百科] 时间:2026-10-17 04:21:10 来源:力不从心网 作者:热点 点击:180次

添加防火墙3306端口

昨天下午,添加我同事老张的防火MySQL连不上了。他盯着Navicat报错“Can't connect to MySQL server (10060)”,墙端一脸茫然——服务明明在跑,添加端口也监听正常,防火防火墙规则里甚至能看到3306的墙端放行记录。我过去看了一眼,添加笑了:他加的防火是TCP入站规则,但系统里还开着个“专用网络”的墙端配置文件,规则全写在“公用网络”里。添加这种事太常见了,防火所以咱们今天直接说怎么正确加这个端口。墙端

先分清你用的添加是哪套防火墙。Linux上,防火CentOS/RHEL系的墙端用firewalld,Ubuntu/Debian系默认是ufw,但很多云服务器厂商(阿里云、腾讯云)还会在系统外层再套一层安全组。这三层少一个,你就连不上。别一上来就敲命令,先问自己一句:现在卡在哪层?

如果是firewalld,直接操作。检查3306是否已经在运行区里:
firewall-cmd --list-ports
没有的话,执行:
firewall-cmd --permanent --add-port=3306/tcp && firewall-cmd --reload
这里有个坑——很多人漏了--permanent,结果规则当时生效,重启后没了。要是你只想临时测一下,不加也行,但别指望它活过下次重启。

ufw那边更简单:
sudo ufw allow 3306/tcp
然后sudo ufw status确认。不过ufw默认可能没启用,没启用的话你加规则等于白加。先sudo ufw enable再操作,但注意——启用ufw会把你当前SSH连接也纳入管控,别把自己关在门外,最好先确保22端口是放行的。

真正让人头疼的是云安全组。老张的问题就出在这:他的服务器是阿里云的,系统防火墙全放开了,但控制台里安全组的入方向规则压根没加3306。你本地测telnet 公网IP 3306,通不了;但在服务器本机mysql -h127.0.0.1却正常。这种内外不一致的现象,八成就是安全组拦着。登录云控制台,找到“安全组” → “配置规则” → 添加入方向,协议选TCP,端口填3306,授权对象别偷懒填0.0.0.0/0——除非你确定要让全世界都能连你的数据库。我一般建议填你办公网的固定IP,比如203.0.113.0/24,哪怕写错也得填,安全第一。

加完规则别急着高兴。用netstat -tlnp | grep 3306确认MySQL确实在监听0.0.0.0或::,而不是只绑了127.0.0.1。很多发行版默认配置只监听本地,你就算把防火墙全关了也连不上。改/etc/mysql/mysql.conf.d/mysqld.cnf里的bind-address,改成0.0.0.0,然后重启服务。这一步是另一个重灾区,我见过有人折腾防火墙两小时,最后发现是bind-address没改。

还有个细节你容易忽略——端口冲突。3306被别的进程占了?lsof -i:3306看看。占用的进程不一定是MySQL,可能是某个Java程序或自己起的服务。如果是,你得改MySQL端口,或者杀掉那个进程,这比调防火墙麻烦多了。

最后提醒一句:加完规则后,从外部机器测一次真实连接。别在服务器上自己连自己,那测不出防火墙问题。用另一台机器执行mysql -h你的公网IP -P3306 -u用户名 -p,能通才算完。老张后来就是照这个流程排查,最后发现是安全组里他把入方向规则写成了“出方向”——界面下拉框选错了,这种低级错误谁都会犯,但排查起来真能急死人。

(责任编辑:休闲)

相关内容
精彩推荐
热门点击
友情链接