微信公众号
扫描关注微信公众号

远程访问内网MySQL数据库的3种安全方法

原创 来源:博客站 阅读 0 今天 07:33:39 听全文 分类:服务器

你是不是遇到过这种情况?公司MySQL数据库在内网,但你需要在家加班查数据,或者给异地同事开放临时访问权限。直接暴露数据库到公网?太危险!不开放?工作又没法推进。别急,我来分享几种既安全又实用的远程访问方案。

为什么直接开放3306端口是作死行为

上周我帮朋友处理了个数据库入侵事件,他们图省事直接把MySQL的3306端口映射到公网,结果被黑客扫到,整个用户表被加密勒索。这不是个例,Shodan搜索引擎上每天都能抓到成千上万暴露的MySQL实例。

安全访问内网数据库的核心原则就两点:

  1. 不让数据库直接暴露在互联网
  2. 所有传输数据必须加密

方法一:SSH隧道 - 程序员最爱的方式

这就像给你的数据库连接套了个防弹衣。假设你的内网数据库IP是192.168.1.100,公司跳板机公网IP是203.0.113.5:

ssh -L 3307:192.168.1.100:3306 user@203.0.113.5 -N

这个命令会在本地创建3307端口,所有发往这个端口的数据都会通过SSH加密隧道传到内网数据库。用Navicat或DBeaver连接时,主机填127.0.0.1,端口填3307,账号密码还是内网那套。

优点

  • 全程加密,不怕抓包
  • 不用改MySQL配置
  • 临时用完关掉就行

缺点

  • 需要有个公网跳板机
  • 网络延迟可能增加

方法二:VPN接入 - 团队协作首选

我们团队用WireGuard组建了虚拟内网,所有设备就像在同一个局域网。配置好之后,直接连192.168.1.100:3306就像在公司一样。

相比传统VPN,WireGuard的优势很明显:

  • 配置简单,客户端一个配置文件搞定
  • 性能损耗小,我测试延迟只增加3-5ms
  • 支持动态IP,出差换网络自动重连

记得设置防火墙规则,只允许VPN网段访问3306端口:

GRANT ALL ON *.* TO 'vpn_user'@'10.8.0.%' IDENTIFIED BY '强密码';

方法三:MySQL SSL连接 - 数据库专家的选择

如果必须让数据库能被直接连接(比如云数据库),务必启用SSL加密:

  1. 生成证书(MySQL 8.0+自带自动生成功能)
  2. 修改my.cnf:
    [mysqld]
    ssl-ca=/etc/mysql/ca.pem
    ssl-cert=/etc/mysql/server-cert.pem
    ssl-key=/etc/mysql/server-key.pem
    
  3. 强制用户使用SSL:
    ALTER USER 'remote_user'@'%' REQUIRE SSL;
    

连接时客户端也要配置证书,这样即使流量被截获也无法解密。用这个命令测试SSL是否生效:

SHOW STATUS LIKE 'Ssl_cipher';

重要安全提醒

无论用哪种方法,都要做好这三件事:

  1. 定期更换密码和密钥
  2. 设置数据库账号的IP白名单
  3. 开启MySQL的查询日志审计

最近帮客户做安全审计时发现,有个开发账号密码三年没改,离职员工还能随时访问,吓得客户连夜改了所有凭证。

该选哪种方案?

  • 个人临时用 → SSH隧道
  • 固定团队 → VPN
  • 必须开放公网 → SSL+IP白名单

上周我用SSH隧道+本地Navicat成功帮上海分公司的同事解决了报表问题,整个过程就像直接连内网一样流畅,还不用折腾网络组开权限。

你有更好的远程访问方案吗?欢迎在评论区分享你的实战经验!遇到具体问题也可以留言,我会挑典型案例在下期详细解答。

12321 远程访问内网MySQL数据库的3种安全方法
内容由AI生成仅供参考和学习交流,请勿使用于商业用途。
出处地址:http://www.dongblog.com/tech/1239.html,如若转载请注明原文及出处。
版权声明:本文来源地址若非本站均为转载,若侵害到您的权利,请及时联系我们,我们会在第一时间进行处理。