核心数据库必须仅接受指定跳板机访问,需构建可信路径:网络层封死直连、只放行跳板机ip;数据库层配置ip绑定账号与最小权限;跳板机侧强化凭据管理与会话审计;并保留主备跳板机防单点失效。

要让核心数据库只接受指定跳板机的访问,关键不是“加一道锁”,而是构建一条可信路径+强验证+无旁路的访问链。跳板机不是可选项,而是强制入口;数据库本身不对外暴露管理端口,所有连接必须经它中转、鉴权、审计。
? 网络层:封死直连,只放行跳板机IP
这是最底层、最有效的控制,让非跳板机流量在抵达数据库前就被丢弃。
-
Linux(firewalld / iptables)示例:
# firewalld(CentOS/RHEL 7+) sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.10.5.10" port port="3306" protocol="tcp" accept' sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.10.5.11" port port="3306" protocol="tcp" accept' # 备用跳板机 sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" port port="3306" protocol="tcp" reject' sudo firewall-cmd --reload
-
Windows Server(防火墙入站规则):
- 新建入站规则 → 选择“端口”→ TCP 3306
- 在“作用域”中,“远程IP地址”选“下列IP地址”,添加跳板机内网IP(如
10.10.5.10,10.10.5.11) - 动作设为“允许连接”,配置文件勾选“域”和“专用”(禁用“公用”)
- ✅ 确保 Windows 防火墙已开启,否则规则无效
⚠️ 注意:数据库服务器不要监听 0.0.0.0:3306,应绑定到内网IP(如
10.10.4.20:3306),并确认未开放公网网卡接口。
?️ 数据库层:账号级白名单 + 最小权限
即使网络层放行了,数据库自身仍需二次校验——只允许来自跳板机IP的特定账号登录,并严格限制权限。
-
MySQL 示例:
-- 创建仅限跳板机IP登录的生产应用账号 CREATE USER 'app_prod'@'10.10.5.10' IDENTIFIED BY 'strong_pwd_2026'; CREATE USER 'app_prod'@'10.10.5.11' IDENTIFIED BY 'strong_pwd_2026'; -- 只授SELECT/INSERT/UPDATE(按需),禁用DROP/CREATE/ALTER等高危操作 GRANT SELECT, INSERT, UPDATE ON finance.* TO 'app_prod'@'10.10.5.10'; GRANT SELECT, INSERT, UPDATE ON finance.* TO 'app_prod'@'10.10.5.11'; -- 禁用匿名用户、禁止通配符HOST(不用'%') DROP USER ''@'%'; FLUSH PRIVILEGES;
-
额外加固项:
- 启用
skip-show-database,防止账号看到其他库名 - 设置
max_connections限制单账号并发连接数 - 开启
general_log = OFF,但启用slow_query_log和审计插件(如 MySQL Enterprise Audit 或 Percona Audit Log)
- 启用
? 跳板机侧:确保它真正在“把关”,而非被绕过
跳板机若配置不当,反而成为风险放大器。需做到:
- 所有数据库连接命令(如
mysql -h db-prod -u app_prod -p)必须在跳板机上执行,不得导出密钥或凭据给终端用户 - 禁用跳板机上的
~/.my.cnf明文密码配置,改用mysql_config_editor加密存储(且仅限跳板机用户) - 若使用堡垒机(如 JumpServer),在资产授权策略中:
- 关联数据库资产时,只分配给 DBA 组
- 启用“会话复核”和“命令阻断”,对
DROP TABLE、TRUNCATE等敏感语句实时拦截 - 录像保存 ≥180 天,加密落盘
? 补充:避免单点失效与误锁
- 永远保留至少两个跳板机IP白名单(主+备),防止单机宕机导致业务中断
- 测试时用
telnet db-ip 3306从跳板机验证连通性,再从办公机验证是否被拒绝 - 不依赖
hosts.allow(TCP Wrappers 已在新版 OpenSSH/MySQL 中失效),以sshd_config和防火墙为准
不复杂但容易忽略。











