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

Closed
opened 2026-08-10 09:38:56 +08:00 by ila · 2 comments
Owner

基本信息

  • 类型:需求
  • 父级大工单:#76
  • 所属 MVP / 版本:#77 / 线上 MySQL 8 部署
  • 阶段:#81 线上部署准备

要解决什么

线上 MySQL 8.4 当前只监听 127.0.0.1:3307,Windows 本地必须建立 SSH 隧道。项目负责人确认临时调整安全边界,仅允许固定公网 IP 61.141.178.177/32 直接访问,以便远程数据库客户端连接;不得向全网开放。

做什么 / 不做什么

  • 做:备份 MySQL 和 iptables 配置;监听公网网卡;在 enp2s0 上仅允许 61.141.178.177/32 访问 TCP 3307并丢弃其他来源;创建 buy@61.141.178.177,只授权 autobuy.* 且强制 SSL;持久化规则;验证本机 cmhub 和公网白名单连接。
  • 不做:不开放 root 公网登录;不创建 % 主机账号;不允许其他公网来源;不修改真实下单开关;不在工单或仓库记录密码。

怎么做

  • 修改 /etc/mysql84.cnf 的 bind-address,重启 mysql84。
  • 在现有 INPUT 链前部加入白名单 ACCEPT 和其后的 3307 DROP,仅作用于公网接口 enp2s0,不影响 loopback���
  • 使用现有 buy 强密码创建来源限定账号,并设置 REQUIRE SSL。
  • 使用 iptables-save 持久化到 /etc/sysconfig/iptables。
  • 更新 Admin 安全基线,记录这是固定 IP + TLS 的明确例外。

验收标准

  • 185.216.248.75:3307 仅从 61.141.178.177 可建立 TCP 连接。
  • buy@61.141.178.177 只能访问 autobuy.* 且必须使用 SSL。
  • root 仍只有 root@localhost,cmhub 的 test@127.0.0.1 不变。
  • MySQL、cmhub Web、Generate 和 66 个 worker 在变更后全部正常。
  • MySQL 与 iptables 配置均有可恢复备份,持久化规则与运行规则一致。
  • 仓库、工单、日志和输出不包含数据库密码。

怎么验证

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

服务器验证 SHOW GRANTS、Ssl_cipher、iptables 规则顺序和 cmhub HTTP 状态。

风险和回退

  • 风险:固定公网 IP 仍会让 MySQL 暴露在公网链路;通过源 IP 白名单、来源限定账号、最小库权限和强制 SSL 降低风险。公网 IP 变化后连接会立即失效。

  • 回退:恢复 /etc/mysql84.cnf 备份为 bind-address=127.0.0.1,删除两条 3307 iptables 规则及 buy@61.141.178.177,持久化并重启 MySQL;本机账号和数据不变。

  • #86 Admin:支持校验 CA 的 MySQL 公网 TLS 连接

## 基本信息 - 类型:需求 - 父级大工单:#76 - 所属 MVP / 版本:#77 / 线上 MySQL 8 部署 - 阶段:#81 线上部署准备 ## 要解决什么 线上 MySQL 8.4 当前只监听 `127.0.0.1:3307`,Windows 本地必须建立 SSH 隧道。项目负责人确认临时调整安全边界,仅允许固定公网 IP `61.141.178.177/32` 直接访问,以便远程数据库客户端连接;不得向全网开放。 ## 做什么 / 不做什么 - 做:备份 MySQL 和 iptables 配置;监听公网网卡;在 `enp2s0` 上仅允许 `61.141.178.177/32` 访问 TCP 3307并丢弃其他来源;创建 `buy@61.141.178.177`,只授权 `autobuy.*` 且强制 SSL;持久化规则;验证本机 cmhub 和公网白名单连接。 - 不做:不开放 root 公网登录;不创建 `%` 主机账号;不允许其他公网来源;不修改真实下单开关;不在工单或仓库记录密码。 ## 怎么做 - 修改 `/etc/mysql84.cnf` 的 `bind-address`,重启 `mysql84`。 - 在现有 INPUT 链前部加入白名单 ACCEPT 和其后的 3307 DROP,仅作用于公网接口 `enp2s0`,不影响 loopback��� - 使用现有 `buy` 强密码创建来源限定账号,并设置 `REQUIRE SSL`。 - 使用 `iptables-save` 持久化到 `/etc/sysconfig/iptables`。 - 更新 Admin 安全基线,记录这是固定 IP + TLS 的明确例外。 ## 验收标准 - [x] `185.216.248.75:3307` 仅从 `61.141.178.177` 可建立 TCP 连接。 - [x] `buy@61.141.178.177` 只能访问 `autobuy.*` 且必须使用 SSL。 - [x] root 仍只有 `root@localhost`,cmhub 的 `test@127.0.0.1` 不变。 - [x] MySQL、cmhub Web、Generate 和 66 个 worker 在变更后全部正常。 - [x] MySQL 与 iptables 配置均有可恢复备份,持久化规则与运行规则一致。 - [x] 仓库、工单、日志和输出不包含数据库密码。 ## 怎么验证 ```powershell Test-NetConnection 185.216.248.75 -Port 3307 mysql --ssl-mode=REQUIRED -h 185.216.248.75 -P 3307 -u buy -p autobuy ``` 服务器验证 `SHOW GRANTS`、`Ssl_cipher`、iptables 规则顺序和 cmhub HTTP 状态。 ## 风险和回退 - 风险:固定公网 IP 仍会让 MySQL 暴露在公网链路;通过源 IP 白名单、来源限定账号、最小库权限和强制 SSL 降低风险。公网 IP 变化后连接会立即失效。 - 回退:恢复 `/etc/mysql84.cnf` 备份为 `bind-address=127.0.0.1`,删除两条 3307 iptables 规则及 `buy@61.141.178.177`,持久化并重启 MySQL;本机账号和数据不变。 - [x] #86 Admin:支持校验 CA 的 MySQL 公网 TLS 连接
Author
Owner

补充最终状态:公网白名单、REQUIRE SSL、TLS 实测和 cmhub 恢复均已完成;归档 docs/task/85-mysql公网白名单.md,提交 ddce0f6 / 830ca58。Admin 公网 TLS 客户端支持由子工单 #86 完成。待用户验收。

补充最终状态:公网白名单、REQUIRE SSL、TLS 实测和 cmhub 恢复均已完成;归档 `docs/task/85-mysql公网白名单.md`,提交 `ddce0f6` / `830ca58`。Admin 公网 TLS 客户端支持由子工单 #86 完成。待用户验收。
Author
Owner

用户已明确验收通过。验收清单已回填,本工单关闭。

用户已明确验收通过。验收清单已回填,本工单关闭。
ila closed this issue 2026-08-10 23:23:21 +08:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmautobuy#85