Files
cmautobuy/docs/task/85-mysql公网白名单.md
T
2026-08-10 09:45:00 +08:00

2.9 KiB
Raw Blame History

85 Admin:为固定公网 IP 开放 MySQL 8 白名单直连

背景与目标

线上 MySQL 8.4 原来只监听 127.0.0.1:3307,远程数据库客户端必须建立 SSH 隧道。项目负责人确认仅对固定公网 IP 61.141.178.177/32 开放直连,同时禁止 全网访问、root 公网登录和跨库授权。

最终方案

  • MySQL 改为监听 0.0.0.0:3307,实际公网访问范围由服务器防火墙收紧。
  • iptables INPUT 链第 2 条允许 61.141.178.177/32 从公网接口访问 3307, 第 3 条丢弃该接口的其他 3307 流量;loopback 不受影响。
  • 新增 buy@61.141.178.177,只授权 autobuy.* 并设置 REQUIRE SSL。
  • root@localhost、buy@127.0.0.1 和 cmhub 的本机账号保持不变。
  • 运行规则已持久化到 /etc/sysconfig/iptables。
  • 变更前配置备份在 /root/cmautobuy-mysql-public-20260810_094201。

改了哪些

  • 服务器 /etc/mysql84.cnf:公网监听地址。
  • 服务器 /etc/sysconfig/iptables:固定 IP ACCEPT 和其他来源 DROP。
  • MySQL 权限表:来源限定、最小权限、强制 SSL 的公网 buy 账号。
  • admin/AGENTS.md:记录公网直连的强制安全条件。
  • admin/config.example.yaml:更新公网直连警告。
  • docs/admin/00-getting-started.md:区分 Admin SSH 隧道和数据库客户端白名单直连。
  • docs/admin/06-quality-security.md:增加公网 MySQL 安全门禁。

验收结果

验收标准 结果
当前固定公网 IP 可连接 185.216.248.75:3307 通过
公网 buy 登录身份与数据库范围正确 通过
公网连接使用 TLS 加密 通过,ECDHE-RSA-AES128-GCM-SHA256
其他公网来源命中 3307 DROP 通过,规则位于允许规则之后、通用规则之前
root 仍仅限 localhost,cmhub 本机账号不变 通过
MySQL、cmhub Web、Generate 和 66 个 worker 正常 通过
配置备份和 iptables 持久化有效 通过

测试

  • 执行的命令:

    Test-NetConnection 185.216.248.75 -Port 3307
    mysql --ssl-mode=REQUIRED -h 185.216.248.75 -P 3307 -u buy -p autobuy
    

    服务器执行 iptables-restore --test、SHOW GRANTS、SHOW STATUS LIKE 'Ssl_cipher'、systemd 状态和 cmhub HTTP 健康检查。

  • 结果:公网 TCP 和 MySQL 8.4.8 登录成功;登录身份为来源限定账号;TLS cipher 为 ECDHE-RSA-AES128-GCM-SHA256;持久化规则解析通过;cmhub Web/Generate HTTP 200, 图片 worker 66/66。

  • 没验证到的部分:没有第二个外部公网出口执行反向拒绝测试;已核对 INPUT 链中 白名单允许后紧跟公网接口 3307 DROP,且持久化文件顺序一致。

相关提交

  • ddce0f6 docs: 记录 MySQL 公网白名单规则 (#85)