MySQL弱口令扫描风险,公网3306端口严禁直接暴露互联网
MySQL是很多网站和业务系统的核心数据库,但不少服务器在部署时保留了最简单粗暴的状态:3306端口直连公网,root密码仍为弱口令。
这种情况下,扫描器可以批量探测IP段,尝试常见口令,一旦命中就能直接登录数据库读取或篡改数据。
本文不讨论复杂理论,直接按运维排查的思路,带你确认自己的服务器是否存在这类风险,并给出可执行的加固方案。
先确认你的3306端口是否暴露在公网
在动手改配置之前,先确认当前状态。
最简单的办法是本地电脑打开命令行,执行下面的探测命令:
telnet 你的服务器IP 3306
如果连接成功,说明3306端口可以直接从公网访问;
如果提示超时或被拒绝,说明网络层可能已有限制。
也可以使用在线的端口扫描工具辅助判断,但注意不要在未经授权的情况下扫描他人服务器。
下一步登录服务器,检查MySQL的实际监听地址:
ss -lntp | grep 3306
如果输出里的监听地址是 0.0.0.0:3306 或 ::3306,说明MySQL对所有网卡开放,公网可直接抵达;
如果只监听 127.0.0.1:3306,则本机之外无法连接,风险较小。
排查MySQL是否存在弱口令账号
端口暴露只是入口,弱口令才是被攻破的直接原因。
登录MySQL控制台:
mysql -u root -p
执行下面语句查看用户与主机授权信息:
SELECT user, host, authentication_string FROM mysql.user;
重点检查 host 为 % 的账号,以及是否出现 root、admin、test 这些常见用户名。
继续检查密码强度:
SELECT user, host, LENGTH(authentication_string) AS pwd_len FROM mysql.user;
这条语句能看出密码哈希长度,但判断实际强度仍需结合账号使用情况。
如果某些账号长期不用、密码为简单数字或拼音、而且允许任意主机登录,那就是高风险的弱口令账号。
收紧MySQL公网访问权限
第一步:把监听地址改回本地。 编辑MySQL配置文件,常见路径为 /etc/mysql/mysql.conf.d/mysqld.cnf 或 /etc/my.cnf:
[mysqld]
bind-address = 127.0.0.1
port = 3306
保存后重启MySQL:
systemctl restart mysql
再执行 ss -lntp | grep 3306,确认监听地址已变为 127.0.0.1:3306。
第二步:在服务器防火墙层面拦截外部请求。 以firewalld为例:
firewall-cmd --permanent --remove-port=3306/tcp
firewall-cmd --reload
如果你用的是宝塔面板,可以在“安全”菜单中删除3306端口放行规则,并确认系统防火墙状态为开启。
第三步:在云控制台安全组中删除入方向3306规则。 登录云服务商控制台,找到服务器关联的安全组,把入方向协议端口为TCP 3306的规则删除,或把源地址收紧为你的办公IP。
安全组的生效优先级高于服务器内部防火墙,很多入侵案例都是因为安全组放行过宽导致的。
把已有账号密码和授权调整到位
端口限制做好后,还要把账号本身的密码和授权调整到位。
重置root密码并限制只能本机登录:
ALTER USER 'root'@'localhost' IDENTIFIED BY '这里填一个长位复杂密码';
对于允许远程连接的业务账号,只给必要库表的最小权限,并设置独立强密码:
CREATE USER 'appuser'@'127.0.0.1' IDENTIFIED BY '独立复杂密码';
GRANT SELECT, INSERT, UPDATE ON 业务库.* TO 'appuser'@'127.0.0.1';
FLUSH PRIVILEGES;
如果业务确实需要远程访问数据库,不建议直接把3306公开。
更稳妥的方案是走VPN、跳板机或SSH隧道。
SSH隧道示例:
ssh -L 3307:127.0.0.1:3306 用户名@服务器IP
之后本地连接 127.0.0.1:3307 即可通过加密隧道访问数据库,公网不再暴露MySQL端口。
验证加固结果并留意后续告警
完成以上操作后,逐项做最终验证:
- 在本地再次执行
telnet 服务器IP 3306,应提示无法连接; - 在服务器上执行
ss -lntp | grep 3306,确认只有本机回环地址在监听; - 使用
mysql -u root -p在本机登录MySQL,确认密码修改后可以正常连接; - 尝试在本地用数据库客户端连接服务器IP的3306端口,应超时或拒绝。
另外建议开启云平台的安全告警或安装Fail2ban,监听MySQL日志中的异常登录行为,出现连续认证失败时自动封禁来源IP。
MySQL弱口令扫描是自动化攻击中最容易得手的一类,处理思路其实很清晰:端口别对公网开放、账号密码要强、远程访问走专用通道。
对照本文检查完再复查一遍,你的数据库暴露面就基本收住了。
如果服务器上还有其他数据库或中间件端口对外开放,建议同样按这个思路梳理一次。