- 创建者: 虚拟的现实,上次更新时间:8月 03, 2024 需要 4 分钟阅读时间
简介
Zero Trust Mesh 是一个建立在 HTTP/2 隧道上的,能跨网关和防火墙的,支持 TLS 加密和基于证书的访问控制等功能的网络工具。
核心特点:安全、便携、易用、高效,完美符合 Zero Trust 的理念。背后使用的是 Flomesh 的 Pipy 项目。
ZTM 的核心是三个组件:CA, Hub 和 Agent,它们之间的关系如下:
- 位于数据中心的 ZTM 节点负责进行权限验证(CA),也可充当仓库(Hub)节点
- 不同终端(Endpoint)上的 ZTM 代理(Agent)负责相应服务(Service)的发布和订阅
作为不同的组件,CA,Hub 和 Agent 可分布在一个或多个节点,取决于你的网络拓扑和安全架构。 这里把 Hub 当做 DockerHub 或者 GitHub 的 Hub 会更容易理解一些, 但实际上组网的模型抽象是 Mesh, 而 Hub 可以只是 Mesh 中的一个节点。
不同的 Mesh 里面会有不同的 Agent 发布的 Service,其它的 Agent 可以通过 CA 颁发的证书信息加入任意 Mesh 并按需订阅 Service。由于采用了 RSA + mTLS 双向认证,所以不用担心中间人攻击。 而且 Agent 可以采用任意的用户身份(类似QQ 号与昵称)加入 Mesh,这样就不用担心真实身份泄露。
能看到哪些 Service 实际取决于你所加入的 Mesh。 而 Mesh 也是可以有多个的,非常灵活 (虽然机制灵活,但使用不当也是可以引入混乱的)。 可以类比成 Discord 的设计,一个服务器可以有不同的 Channel(Mesh), User Role(Nick Name) 和 Bot(Service)。
对于服务的有关描述,我使用的术语是发布(Publish)和订阅(Subscribe), 目前官方 CLI 统一使用创建(Create)来描述这两个操作,因为逻辑的确是一样的。 但这描述比较偏实现,不太符合用户的直观感受。 将来改成推送(Push)和拉取(Pull),也说得过去。
已弃置-场景一:办公和家庭互访
- 在公网(117.50.188.201)部署 ztm 的 CA 和 HUB 组件。其中 CA 组件用于生成和验证用户的配置文件,该配置文件集成证书信息。HUB 组件开发对外映射端口(3790),提供接入服务。
- 在公网环境的主机上通过 ztm 生成 office 和 home 环境对应的配置文件(json)
- 在 home 环境中启动 Agent
- 在 home 环换使用 home.json 配置文件加入 mesh (注意 mesh 名称)
- 在 home 环境发布服务,该服务可供其它配置好的 agent 访问
- 在 office 环境中启动 Agent
- 在 office 环境中使用 office.json 配置文件加入 mesh (和第4点保持一致)
- 在 office 环境创建本地端口,链接到 home 环境的服务上
- 在 office 环境通过访问创建的端口打开 home 环境发布的服务
已弃置-公网服务器配置
下载安装 ztm 并配置 CA 和 HUB 端,需要注意 HUB 端需要对应公网 IP 和端口
ZTM_VERSION=0.0.4 curl -sL https://github.com/flomesh-io/ztm/releases/download/v${ZTM_VERSION}/ztm-aio-v${ZTM_VERSION}-generic_linux-x86_64.tar.gz | tar -zxf - cp bin/ztm /usr/sbin/ztm mkdir -p ~/data/ztm ztm start ca --listen 127.0.0.1:9999 --database ~/data/ztm/ca.db ztm start hub --listen 0.0.0.0:3790 systemctl status ztm-ca systemctl status ztm-hub ztm invite home --bootstrap 117.50.188.201:3790 > ~/data/ztm/home.json ztm invite office --bootstrap 117.50.188.201:3790 > ~/data/ztm/office.json # 如果不小心输错了 IP 地址,先删除用户,再执行上面的命令 ztm evict nas
已弃置-Home 环境配置
- 在 home 环境安装 ztm
- 将 home.json 文件复制到 home 环境的主机
- agent 模式运行
- 注册到 mesh
- 添加服务(发布可以访问的端口)
ZTM_VERSION=0.0.4 curl -sL https://github.com/flomesh-io/ztm/releases/download/v${ZTM_VERSION}/ztm-aio-v${ZTM_VERSION}-generic_linux-x86_64.tar.gz | tar -zxf - cp bin/ztm /usr/sbin/ztm ztm start agent --listen 127.0.0.1:7777 --database ~/data/ztm/agent.db ztm join zyfeng-hub --as home --permit ~/data/ztm/home.json zte get mesh ztm create service tcp/firefox --host 192.168.77.102 --port 8006 ztm create service tcp/routeros --host 192.168.77.1 --port 80 ztm get service
已弃置-Office 环境配置
- 在 office 环境安装 ztm
- 将 office.json 文件复制到 office 环境的主机
- agent 模式运行
- 注册到 mesh
- 添加本地端口(映射到 home 的远程服务端口)
ZTM_VERSION=0.0.4 curl -sL https://github.com/flomesh-io/ztm/releases/download/v${ZTM_VERSION}/ztm-aio-v${ZTM_VERSION}-generic_linux-x86_64.tar.gz | tar -zxf - cp bin/ztm /usr/sbin/ztm ztm start agent --listen 127.0.0.1:7777 --database ~/data/ztm/agent.db ztm join zyfeng-hub --as office --permit ~/data/ztm/office.json zte get mesh ztm create port 192.168.14.83/tcp/20080 --service tcp/routeros ztm create port 192.168.14.83/tcp/20081 --service tcp/firefox ztm create port 192.168.14.83/tcp/22222 --service tcp/ssh117
在 Office 环境输入 Office 主机地址+本地端口实现访问 Home 环境的端口服务
已弃置-Windows 环境
PowerShell 可以用命令更新当前 Windows User PATH 环境变量:
[Environment]::SetEnvironmentVariable("Path", ` [Environment]::GetEnvironmentVariable("Path", ` [EnvironmentVariableTarget]::User) + ";D:\DevEnv\ZTM\bin", ` [EnvironmentVariableTarget]::User)
重新打开 PowerShell 窗口,就可以直接运行 ztm 命令了。
ztm run agent --listen 127.0.0.1:7777 --database "D:\DevEnv\ZTM\data\agent.db" ztm join zyfeng-hub --as office-2 --permit "D:\DevEnv\ZTM\data\office2.json" ztm create service tcp/rdp-1483 --host 192.168.14.83 --port 3389
批处理方式
@echo off start /B > "c:\intel\bin\ztmagent.log" start cmd /k c:\intel\bin\ztm.exe run agent --listen 127.0.0.1:7777 --database "c:\intel\bin\agent.db" choice /t 3 /d y start cmd /k c:\intel\bin\ztm.exe join zyfeng-hub --as office2 --permit "c:\intel\bin\office2.json" start cmd /k c:\intel\bin\ztm.exe create service tcp/rdp-1483 --host 192.168.14.83 --port 3389
ztm-0.1.0 版本
ztm-0.1.0 版本开始合并了 CA 和 Hub 角色同时内置了4种应用
- Tunnel - 建立安全的 TCP/UDP 通道Establish secure TCP/UDP tunnels between endpoints
- Proxy - 不同终端直接的代理访问 A SOCKS/HTTP forward proxy that takes in traffic from one endpoint and forward out via another endpoint
- Script - 远程执行的脚本 Execute PipyJS scripts remotely on an endpoint
- Terminal - 终端访问 Remote access to the shell on an endpoint
公网服务器配置
正常情况下无需在公网服务器启用 Agent ,可以让公网服务器仅承担连接和认证的功能
sudo /usr/local/ztm/ztm start hub --listen 0.0.0.0:3790 --names frps.waringid.me:3790 --permit root.json sudo ztm start agent --listen 127.0.0.1:7777 --data /usr/local/ztm/ #可选 sudo ztm join zyfeng-hub --as server117 --permit root.json #可选
Office 环境-Linux
ztm start agent --listen 127.0.0.1:7777 --data /usr/local/ztm/ ztm join zyfeng-hub --as office-182-53 --permit root.json ztm tunnel open in tcp/home-rdp --listen 0.0.0.0:3390 #本地端口 ztm ep home-77-102 tunnel open out tcp/home-rdp --target 192.168.77.21:3389 #需要访问的远程端口
Office 环境 - Windows
[Environment]::SetEnvironmentVariable("Path", ` [Environment]::GetEnvironmentVariable("Path", ` [EnvironmentVariableTarget]::User) + ";D:\DevEnv\ZTM\bin", ` [EnvironmentVariableTarget]::User)
@echo off start cmd /k c:\intel\bin\ztm.exe run agent --listen 127.0.0.1:7777 --data "c:\intel\bin" choice /t 3 /d y start cmd /k c:\intel\bin\ztm.exe join zyfeng-hub --as office-14-83 --permit "c:\intel\bin\root.json"
Home 环境
ztm start agent --listen 127.0.0.1:7777 --data /usr/local/ztm/ ztm join zyfeng-hub --as home-77-102 --permit root.json ztm tunnel open in tcp/office-rdp --listen 0.0.0.0:3390 #本地端口 ztm ep office-14-83 tunnel open out tcp/office-rdp --target 192.168.14.83:3389 #需要访问的远程端口
参考
- 无标签