MySQL远程连接安全最佳实践:拒绝公网直连,SSH隧道才是标准方案


一、为什么公网直连MySQL是高危操作

1.1 常规直连配置(不推荐)

Navicat常规页面填写服务器公网IP、端口3306,安全组放行入方向3306端口,直接外网访问数据库。

主机:服务器公网IP
端口:3306
安全组规则:入方向允许0.0.0.0/0访问3306

1.2 三大安全隐患

  1. 端口全网暴露,极易被暴力破解
    3306是MySQL默认端口,全网扫描工具会7×24小时批量探测,持续尝试弱密码,一旦数据库账号密码简单,数据会直接泄露。

  2. 数据明文传输,抓包可窃取信息
    不开启SSL的前提下,SQL查询、账号密码、业务数据在公网明文传输,局域网、公共WiFi环境极易被抓包窃取。

  3. 扩大服务器攻击面
    多开放一个端口,就多一条入侵通道,黑客可利用MySQL漏洞入侵服务器,删除、篡改全部业务数据。

常见报错:若关闭安全组3306放行,直连模式会直接弹出”Connection refused”,这也是很多人不愿关闭3306的原因,但本质是方案本身存在缺陷。

二、安全标准方案:SSH隧道连接MySQL

2.1 原理说明

不对外暴露数据库3306端口,仅通过SSH端口建立加密隧道:

  1. Navicat先通过SSH账号登录Linux服务器;
  2. 在服务器本地访问 127.0.0.1:3306 本地MySQL服务;
  3. 数据库流量全部封装在SSH加密通道中转回本地,外网无法直接接触数据库。

2.2 Navicat完整配置教程

① 常规标签页(数据库层配置)

  • 主机:127.0.0.1
  • 端口:3306
  • 用户名:MySQL数据库账号(如root)
  • 密码:MySQL数据库独立密码

② SSH标签页(服务器系统层配置)

勾选「使用SSH通道」

  • SSH主机:服务器公网IP
  • SSH端口:22(或自定义高位端口)
  • SSH用户名:服务器系统账号(阿里云默认root)
  • SSH密码:服务器实例登录密码

两层账号区分:SSH是服务器登录账号,常规是数据库登录账号,二者互相独立。

2.3 方案核心优势

  1. 数据库完全隐藏内网
    安全组无需放行3306入方向,外网无法扫描到数据库端口,从根源杜绝爆破攻击。

  2. 全程加密传输
    SSH通道自带高强度加密,所有SQL操作、数据交互不会明文泄露。

  3. 适配动态宽带IP
    家用、公司宽带公网IP不固定,无需DDNS脚本,仅放行SSH端口即可远程管理数据库。

  4. 不影响本地数据库操作
    SSH登录服务器后,依旧可以通过mysql -u账号 -p本地命令行操作数据库,兼顾可视化工具与命令行。

三、进阶加固:SSH自定义高位端口

3.1 改造思路

默认22端口是全网扫描重灾区,家用宽带为动态公网IP无法限制访问来源,因此将SSH监听端口修改为高位22022,大幅减少暴力爆破流量。

区分两个关键配置文件

  • /etc/ssh/ssh_config:SSH客户端配置,控制本机向外连接的参数,无需修改;
  • /etc/ssh/sshd_config:SSH服务端配置,控制外部访问服务器的准入规则,修改端口必须编辑此文件。

3.2 服务端配置修改

⚠️ 重要警告:修改期间请不要退出当前SSH连接!保持现有终端窗口打开,使用新终端测试新端口,确保新端口可用后再关闭原连接。

  1. 编辑sshd服务配置
vim /etc/ssh/sshd_config

先搜索确认文件中是否已有 Port 配置:

grep "^Port" /etc/ssh/sshd_config

根据搜索结果选择配置方式

  • 如果已有 Port 22:在该行下方添加新端口,确保两个端口都监听:
Port 22
Port 22022
MaxAuthTries 3
  • 如果没有 Port 配置:在文件末尾添加,必须同时包含22和22022:
Port 22
Port 22022
MaxAuthTries 3

⚠️ 关键说明:如果只添加 Port 22022 而不保留 Port 22,重启后sshd将只监听22022端口,若防火墙/安全组未正确放行新端口,将导致无法登录!务必同时保留两个端口,待新端口测试成功后再关闭22端口。

  • Port 22:保持原有端口可用,作为兜底连接通道;
  • Port 22022:新增高位端口,后续切换为主连接端口;
  • MaxAuthTries 3:密码输错3次直接断开连接,限制爆破尝试次数。
  1. 配置防火墙放行新端口(CentOS/RHEL 7+ 使用 firewalld)
firewall-cmd --permanent --add-port=22022/tcp
firewall-cmd --reload

Debian/Ubuntu 用户(使用 ufw):

ufw allow 22022/tcp
ufw reload
  1. 校验配置语法(防止配置错误导致SSH彻底失联)
sshd -t

无报错再执行重启命令加载新配置:

systemctl restart sshd
  1. 验证端口监听是否生效
ss -tulnp | grep ssh

应同时显示0.0.0.0:220.0.0.0:22022两个端口监听,代表修改成功。

  1. 用新端口测试登录(关键步骤,确认新端口可用后再处理旧端口)
    打开新终端窗口,使用新端口测试连接:
ssh root@服务器公网IP -p 22022

⚠️ 重要提醒:此时sshd同时监听22和22022两个端口,原连接(22端口)仍保持可用。务必先用新端口登录成功后,再进行下一步。不要关闭原终端窗口,直到确认新端口完全可用。

  1. 确认新端口可用后,关闭原22端口
vim /etc/ssh/sshd_config

找到或添加的 Port 22 行,注释掉或删除:

# Port 22
Port 22022

保存后重启sshd:

systemctl restart sshd

验证22端口已不再监听:

ss -tulnp | grep ssh

只显示0.0.0.0:22022即为成功。

⚠️ 安全组同步调整:此时再到阿里云安全组将22端口规则改为「拒绝」,拦截恶意扫描流量。详见第4.3节。

3.3 配套工具同步修改端口

  1. SFTP工具(FileZilla)
    协议选择SFTP,主机填写服务器公网IP,端口手动填写22022,使用服务器root账号密码登录。

  2. Navicat MySQL SSH隧道
    SSH标签页内,SSH端口同步修改为22022,否则隧道建立失败,无法远程管理数据库。

3.4 方案优势

  1. 屏蔽默认22端口海量扫描请求,服务器登录日志大幅减少;
  2. 高位端口极少被自动化扫描工具探测,暴力破解攻击量下降90%;
  3. 无需固定公网IP、无需DDNS脚本,适配家用动态宽带环境;
  4. 操作简单无额外学习成本。

四、阿里云安全组落地配置(最简5条规则)

4.1 安全组规则清单

优先级 协议类型 端口 访问来源 用途
1 自定义TCP 8080 0.0.0.0/0 后台服务外网访问
1 TCP 443 0.0.0.0/0 网站HTTPS加密访问
100 TCP 80 0.0.0.0/0 网站HTTP基础访问
100 ICMP-IPv4 - 0.0.0.0/0 Ping测试服务器网络连通性
100 自定义TCP 22022 0.0.0.0/0 SSH远程登录、MySQL隧道专用通道

4.2 必须删除的高危规则

  1. 入方向3306 MySQL放行规则(核心高危端口,彻底移除)
  2. 闲置端口自定义TCP放行(例如未使用的8090端口)
  3. Windows远程桌面3389端口规则(Linux服务器完全无用)
  4. VPC内网网段全流量放行(单台服务器无多机互通需求,冗余规则)

4.3 安全组调整要点

⚠️ 执行前提:必须先完成第3.2节服务端配置,并确认使用22022端口能成功登录服务器后,再执行以下操作。

  1. 新增22022端口规则:添加一条入方向自定义TCP规则,端口范围22022/22022,访问来源0.0.0.0/0
  2. 拒绝22端口规则:原有系统自带「SSH远程连接Linux实例(22端口)」规则,无需删除,将授权策略改为拒绝,拦截所有访问22端口的恶意扫描流量。

4.4 极简安全组优势

  1. 无数据库公网暴露端口,从底层阻断MySQL外网攻击;
  2. 仅开放业务必需端口,最小化服务器攻击面;
  3. 仅依靠22022端口完成远程管理,适配家用动态IP;
  4. 规则分层设置优先级,业务访问逻辑清晰,无端口拦截冲突。

五、额外MySQL与SSH加固建议

  1. 禁止MySQL root账号外网访问:仅本地127.0.0.1授权;
  2. 设置高强度数据库密码:避免123456、root等弱密码;
  3. 定期备份数据库:防止误删、入侵导致数据丢失;
  4. SSH进阶加固:关闭密码登录,改用密钥登录,进一步降低爆破风险;
  5. 安装Fail2ban:自动封禁多次SSH登录失败的恶意IP:
dnf install fail2ban -y
systemctl enable --now fail2ban

六、总结

MySQL公网直连3306是最低成本、最高风险的偷懒方案,无论个人建站还是小型业务,都应放弃该方式。

SSH隧道连接无需额外成本、配置简单,搭配SSH高位端口+极简安全组规则,既能实现远程可视化管理数据库,又能彻底隐藏数据库端口,是兼顾易用性与安全性的最优选择。


文章作者: 弈心
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 弈心 !
评论
 本篇
MySQL远程连接安全最佳实践:拒绝公网直连,SSH隧道才是标准方案 MySQL远程连接安全最佳实践:拒绝公网直连,SSH隧道才是标准方案
MySQL远程连接安全最佳实践:拒绝公网直连,SSH隧道才是标准方案
2026-06-26
下一篇 
JavaScript十大设计模式详解 JavaScript十大设计模式详解
深入讲解JavaScript十大设计模式,包括工厂模式、单体模式、模块模式、代理模式、职责链模式、命令模式、模板方法模式、策略模式、发布订阅模式、中介者模式
  目录