一 背景

最近在一台阿里云购买的 Ubuntu 22.04 服务器上就碰到了一个棘手的状况:服务器重启后,原本正常运行的 MySQL 数据库无法通过 3306 端口进行远程访问。接下来,我将详细记录整个排查与解决的过程,希望能为遇到类似问题的小伙伴提供一些参考。

二 问题初现

服务器重启后,尝试使用客户端远程连接 MySQL 数据库,却发现连接失败。第一反应是检查阿里云的安全组设置,确认 3306 端口已开放。为了进一步定位问题,在服务器内部使用127.0.0.1进行连接,发现能够正常连接,这说明 MySQL 服务本身运行是正常的,问题出在远程访问的环节。

三 排查过程

使用nmap工具对服务器进行端口扫描,命令为nmap <服务器IP>,扫描结果显示:

PORT     STATE    SERVICE
3306/tcp filtered mysql

filtered状态表明端口可能被防火墙或其他安全机制拦截。
接着,查看 Ubuntu 系统的防火墙状态,执行ufw status,结果显示Status: inactive,说明 Ubuntu 自带的防火墙ufw并未启用,那么问题可能出在iptables上。
执行iptables -nL命令查看iptables规则,输出结果如下:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:443
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:3306
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0            icmptype 8
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:443
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:3306
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0            icmptype 8

从输出中可以清晰看到,iptables的INPUT链中存在针对3306端口的DROP规则,这正是导致远程无法连接 MySQL 的原因。

四 问题解决

明确问题后,解决起来就简单了。执行以下命令在INPUT链中插入一条允许3306端口通过的规则:

iptables -I INPUT -p tcp --dport 3306 -j ACCEPT

执行完这条命令后,再次尝试远程连接 MySQL 数据库成功连接。

五 总结与建议

问题排查思路:遇到服务无法访问的问题时,要逐步缩小排查范围。先检查外部网络设置(如安全组),再检查服务器内部的防火墙和服务配置,这样可以更高效地定位问题。
规则持久化:上述解决方法中添加的iptables规则在服务器重启后会丢失。如果希望规则永久生效,可以用iptables-persistent工具将规则保存,或者使用systemd服务管理来实现规则的自动加载。


汤青松
5.2k 声望8.3k 粉丝

《PHP Web安全开发实战》 作者