docs: 归档任务 #85

This commit is contained in:
chengma
2026-08-10 09:45:00 +08:00
parent ddce0f6679
commit 830ca58030
+68
View File
@@ -0,0 +1,68 @@
# 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`,实际公网访问范围由服务器防火墙收紧。
- `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 持久化有效 | 通过 |
## 测试
- 执行的命令:
```powershell
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)