2.9 KiB
2.9 KiB
85 Admin:为固定公网 IP 开放 MySQL 8 白名单直连
- 类型:需求
- 父级大工单:#76
- 所属 MVP / 版本:#77 / 线上 MySQL 8 部署
- 状态:已完成
- 日期:2026-08-10
- Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/85
背景与目标
线上 MySQL 8.4 原来只监听 127.0.0.1:3307,远程数据库客户端必须建立 SSH
隧道。项目负责人确认仅对固定公网 IP 61.141.178.177/32 开放直连,同时禁止
全网访问、root 公网登录和跨库授权。
最终方案
- MySQL 改为监听
0.0.0.0:3307,实际公网访问范围由服务器防火墙收紧。 iptablesINPUT 链第 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,且持久化文件顺序一致。
相关提交
ddce0f6docs: 记录 MySQL 公网白名单规则 (#85)