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

69 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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)