Files
cmautobuy/docs/task/129-mysql允许所有公网ip连接.md
T

3.7 KiB
Raw Blame History

129 Admin:允许所有公网 IP 连接生产 MySQL 业务账号

  • 类型:生产配置 / 安全例外
  • 父级大工单:#76
  • 所属 MVP / 版本:#77 / 生产数据库公网连接
  • 状态:已完成,用户验收通过
  • 日期:2026-08-11
  • Gitea 工单:#129

背景与目标

本地 Admin 的公网出口 IP 发生变化后,服务器原 /32 白名单会丢弃连接, run_admin.bat 在 5 秒连接超时后退出。项目负责人明确授权生产 MySQL 3307 接受所有公网来源,同时继续限制业务账号、数据库范围和 TLS。

最终方案

  • 在 INPUT 链的 3307 DROP 前增加全来源 NEW 连接 ACCEPT,并保存到 /etc/sysconfig/iptables;变更前规则备份为 /root/iptables-before-mysql-public-20260811T0900.rules。
  • 新增 buy@'%',克隆现有本机 buy 账号的密码哈希,权限限定为 autobuy.*,并设置 REQUIRE SSL;root 和其他数据库账号保持不变。
  • 因 MySQL 8.4 管理密码的既有保存副本均已失效,未重置 root 密码。改用一次性 init-file 完成账号 DDL,只重启 MySQL 一次;启动后立即删除初始化文件和配置项。 MySQL 配置备份为 /root/mysql84.cnf-before-buy-public-20260811T0912。
  • 更新 Admin 规则、配置示例、上手指南和安全基线,记录本次经用户批准的全网来源 例外;root 仅本机、TLS 和库级权限仍是硬性条件。

改了哪些

  • 服务器 /etc/sysconfig/iptables:持久化公网 3307 全来源 ACCEPT。
  • 生产 MySQL 权限表:新增 buy@'%',限定 autobuy.* 并强制 SSL。
  • admin/AGENTS.md:登记项目负责人批准的公网来源例外及保留门禁。
  • admin/config.example.yaml:同步公网连接说明。
  • docs/admin/00-getting-started.md:同步本地连接和风险说明。
  • docs/admin/06-quality-security.md:同步生产安全基线。
  • docs/task/129-mysql允许所有公网ip连接.md:记录实施和验收结果。

验收结果

验收标准 结果
公网 TCP 3307 连续连接稳定 通过,5/5 成功
公网登录身份为 buy@% 通过
账号权限只作用于 autobuy.* 通过
公网连接强制 SSL,关闭 TLS 会被拒绝 通过
Go Admin 使用 verify_ca 完成连接、schema 自检和页面冒烟 通过
root 未开放公网登录 通过,未修改 root 账号
防火墙规则已持久化且可解析 通过,iptables-restore --test 成功
MySQL、Admin、Nginx、cmhub 和图片 worker 无回归 通过,worker 66/66 active
项目规则和基线文档与用户授权一致 通过

测试

  • 执行的命令:重复 TCP 探测;MySQL CLI 分别使用 VERIFY_CA 和 DISABLED; GOTOOLCHAIN=go1.23.0 go test . -run '公网MySQLTLS' -v -count=1; GOTOOLCHAIN=go1.23.0 go test ./repository -run '公网TLS只读冒烟' -v -count=1; 服务器执行 systemd、HTTP、iptables 持久化和 MySQL 日志检查。
  • 结果:公网 TLS cipher 为 ECDHE-RSA-AES128-GCM-SHA256;页面冒烟返回 303; 明文连接返回 1045;线上 Admin 和 cmhub HTTPS 均返回 200,MySQL 重启后无严重日志。
  • 没验证到的部分:未执行防火墙回退演练;未重启整台服务器验证开机加载,但已验证 /etc/sysconfig/iptables 内容和 iptables-restore --test。

遗留问题(选填)

  • 全网开放 3307 会持续遭受互联网扫描,风险高于固定 /32 或 SSH 隧道。恢复固定 出口 IP 后应优先收紧白名单。
  • MySQL 8.4 root 管理密码的既有本地和宝塔保存副本均已失效;本任务没有重置 root。

相关提交

  • 待归档提交后回写 Gitea 工单。