跳转机 (堡垒机架构)

通过 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)

  1. Netcatty 连接到 跳转机 A (端口 22)。
  2. 它请求建立一个通往 目标主机 B (10.0.0.5:22) 的直接 TCP 频道。
  3. 发往主机 B 的 SSH 数据包被加密,封装在通往主机 A 的隧道内,并仅在目的地解包。
  4. 结果: 主机 A 无法看到发往主机 B 的流量(如果主机 B 使用了不同的密钥)。这是端到端加密 (End-to-End Encryption) 的正确应用。
Loading diagram...

图:封装的 SSH ProxyJump 架构。堡垒机维持外部隧道,但无法解密发往目标服务器的流量。

配置流程

让我们配置一个真实的场景:访问私有 Postgres 数据库

前提条件

  1. 堡垒机: 你的保险库中必须已经添加了一个可用的堡垒机(例如 bastion.corp.com)。
  2. 目标详情: 你需要数据库服务器的私有 IP(例如 10.0.5.12)。

分步操作

创建目标主机

点击 新建主机

  • 名称: 生产数据库-主
  • 地址: 10.0.5.12 (注意:你的电脑无法原生访问此 IP)。
  • 端口: 22 (SSH 端口,而不是数据库端口 5432)。

配置认证 (目标主机)

输入 目标数据库服务器 的用户名和密钥。

  • 重要: 这不是堡垒机的密码。这是最终目的地的凭据。

关联跳转链路

前往主机详情面板的 高级 (Advanced) 部分。

  1. 找到 跳转机 (Jump Host) 部分。
  2. 点击 添加跳点 (Add Hop)
  3. 搜索并从保险库中选择 bastion.corp.com

连接

点击连接。观察状态日志:

  • Connecting to bastion.corp.com... Success
  • Opening channel to 10.0.5.12:22... Success
  • Authenticating to 10.0.5.12... Success
Loading diagram...

图:高级设置面板中的多跳配置。Netcatty 按照出现的顺序(从上到下)执行隧道。

进阶场景

多跳链式连接 (多级跳转)

有时你会有多层安全区域: 互联网 -> DMZ 堡垒机 -> 应用层堡垒机 -> 安全数据库区域

Netcatty 支持无限层级的跳转。

  • 顺序很重要: 设置中的列表顺序是 你 -> 目标
    1. 跳点 1:dmz-jumphost
    2. 跳点 2:app-jumphost
  • 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 并删除该条目。