跳转机 (堡垒机架构)
通过 ProxyJump 链条构建安全访问架构
在安全的开发环境中,“零信任 (Zero Trust)”模型规定内部资源(数据库、Redis 集群、内部 API)绝不能拥有公网 IP 地址。它们位于 VPC 私有子网(例如 10.0.0.0/16)内。
要访问这些资源,你需要通过 堡垒机 (Bastion Host)(或称跳转机 Jump Box)进行连接。Netcatty 使用标准的 SSH ProxyJump 语义自动完成此隧道过程。
架构
当你在 Netcatty 中配置跳转机时,我们并不是简单的“先 SSH 进入 A,再在 A 中运行 SSH 进入 B”。这种交互式链式连接的方法既脆弱又不安全。
相反,我们使用 TCP 转发 (TCP Forwarding):
- Netcatty 连接到 跳转机 A (端口 22)。
- 它请求建立一个通往 目标主机 B (
10.0.0.5:22) 的直接 TCP 频道。 - 发往主机 B 的 SSH 数据包被加密,封装在通往主机 A 的隧道内,并仅在目的地解包。
- 结果: 主机 A 无法看到发往主机 B 的流量(如果主机 B 使用了不同的密钥)。这是端到端加密 (End-to-End Encryption) 的正确应用。
图:封装的 SSH ProxyJump 架构。堡垒机维持外部隧道,但无法解密发往目标服务器的流量。
配置流程
让我们配置一个真实的场景:访问私有 Postgres 数据库。
前提条件
- 堡垒机: 你的保险库中必须已经添加了一个可用的堡垒机(例如
bastion.corp.com)。 - 目标详情: 你需要数据库服务器的私有 IP(例如
10.0.5.12)。
分步操作
关联跳转链路
前往主机详情面板的 高级 (Advanced) 部分。
- 找到 跳转机 (Jump Host) 部分。
- 点击 添加跳点 (Add Hop)。
- 搜索并从保险库中选择
bastion.corp.com。
连接
点击连接。观察状态日志:
Connecting to bastion.corp.com... SuccessOpening channel to 10.0.5.12:22... SuccessAuthenticating to 10.0.5.12... Success
图:高级设置面板中的多跳配置。Netcatty 按照出现的顺序(从上到下)执行隧道。
进阶场景
多跳链式连接 (多级跳转)
有时你会有多层安全区域:
互联网 -> DMZ 堡垒机 -> 应用层堡垒机 -> 安全数据库区域
Netcatty 支持无限层级的跳转。
- 顺序很重要: 设置中的列表顺序是 你 -> 目标。
- 跳点 1:
dmz-jumphost - 跳点 2:
app-jumphost
- 跳点 1:
- Netcatty 会通过 DMZ 隧道访问应用层堡垒机,再通过应用层堡垒机访问目标主机。
安全性考量
代理转发 (Agent Forwarding) vs. ProxyJump
不要为了让跳转生效而开启“代理转发 (Agent Forwarding)”。
- 代理转发: 允许堡垒机在连接下一台服务器时冒充你。如果堡垒机被攻破(拥有 root 权限),攻击者可以使用你的本地代理登录其他服务器。
- ProxyJump (Netcatty Default): 堡垒机仅传输加密字节。它无法解密流量,也无法冒充你。这种方式要安全得多。
故障排除
"频道开启失败 (Channel Open Failed)"
错误:open failed: administratively prohibited: open failed
- 原因: 堡垒机的
sshd_config禁止了 TCP 转发。 - 修复: 在堡垒机上,确保
/etc/ssh/sshd_config包含:AllowTcpForwarding yes
"主机密钥验证失败 (Host Key Verification Failed)"
由于流量是通过隧道传输的,你接收到的“主机密钥 (Host Key)”来自目标 IP (10.0.5.12)。
如果你之前连接过使用相同 IP 10.0.5.12 的不同服务器(可能 IP 被回收),Netcatty 会阻止连接以防止中间人攻击。
- 修复: 前往 设置 > 已知主机 (Known Hosts),搜索
10.0.5.12并删除该条目。