使用 ZTM 防护未修复的 OpenSSH 漏洞

2024 年 7 月,OpenSSH 被曝出 CVE-2024-6387[1] (Security Regression) 安全漏洞。如果无法及时修复该漏洞,或者担心修复可能带来其他负面影响,可以使用 ZTM[2] 来快速保护受影响的主机,并提供不间断的安全 SSH 访问。这种方案适用于各种漏洞场景,当没有足够时间修复或者担心修复带来其他负面影响时,都可以用这种方法来快速屏蔽风险,并维持服务不中断。

假设我们有一台受该 CVE 影响的主机 A,下面演示如何使用 ZTM 在不升级 SSH 服务的情况下提供安全访问。方案思路是:在主机 A 上运行 ZTM Agent,在另一台安全的主机 X 上运行 ZTM Hub;A 上的 ZTM Agent 连接到 X-Hub,建立 X-A 隧道用于从 X 通过隧道访问 A 的 SSH 服务;最后关闭 A 上 SSH 服务的公开访问,使其仅监听在 127.0.0.1:22 端口。这样实施后,管理员可以从 X 和 Y 主机通过 ZTM 隧道访问 A 主机的 SSH 服务,其他任何方式都无法访问 A 主机的 SSH 服务,且任何扫描和暴力破解手段都无法影响 A 主机。

00f3b0e8ae3b880bc9c92e46cffdb3b7.png

1. 在主机 A 上安装 ZTM Agent

从 ZTM Release页面[3] 下载合适版本的 ZTM。例如在这个例子中,下载 generic_linux-x86_64 版本(https://github.com/flomesh-io/ztm/releases/download/v0.1.0/ztm-aio-v0.1.0-generic_linux-x86_64.tar.gz)。下载后解压,并将 ZTM 可执行文件拷贝到/usr/local/bin/。

运行 ztm start agent 启动 Agent。需要用 sudo 执行这个命令,因为 ztm 会注册到系统服务上,然后启动 Agent。

sudo ztm start agent

检查 Agent 是否成功启动。

sudo systemctl status ztm-agent
● ztm-agent.service - ztm agent service
     Loaded: loaded (/etc/systemd/system/ztm-agent.service; disabled; preset: enabled)
     Active: active (running) since Thu 2024-08-01 13:04:40 UTC; 1min 15s ago
   Main PID: 630 (ztm)
      Tasks: 6 (limit: 1137)
     Memory: 100.0M
        CPU: 261ms
     CGroup: /system.slice/ztm-agent.service
             ├─630 /usr/local/bin/ztm run agent --data /root/.ztm --listen 127.0.0.1:7777
             └─633 /usr/local/bin/ztm --pipy repo://ztm/agent --args --data /root/.ztm --listen 127.0.0.1:7777


Aug 01 13:04:40 ip-172-31-0-137 systemd[1]: Started ztm-agent.service - ztm agent service.

2. 在主机 X 上安装 ZTM Hub

ZTM 的可执行文件是 all-in-one 的,也就是 Hub 和 Agent 是同一个二进制文件,通过不同的启动参数来运行不同的功能。所以安装过程和在 A 主机上安装 Agent 类似,只是在启动时,除了启动 Agent,还需要启动 Hub。详细 ZTM Hub 的使用,可以参考 CLI 文档[4]

sudo ztm start hub --names 172.31.8.122:443 --listen 0.0.0.0:443 --permit permit.json


A permit file is saved to /home/admin/permit.json


To join the mesh on an endpoint:


  1. Send the file 'permit.json' to the endpoint
  2. Execute the following command on the endpoint:


       ztm join my-mesh --as my-first-ep --permit permit.json

3. 在主机 X 上注册 Agent 到 Hub-X

需要注意的是,我们在 X 主机上也会启动 ZTM Agent。

sudo ztm start agent

并且我们在 X 主机上,将 Agent 注册到 Hub 上。

ztm join hub-x --as agent-x --permit permit.json

查看 Agent 接入的 Mesh 网络。

ztm get meshes
NAME   JOINED AS  USER  HUBS              STATUS
hub-x  agent-x    root  172.31.8.122:443  Connected

查看接入到 Mesh 网络中的 Endpoint[5],名字中的 local 表示当前的 Endpoint。

ztm get endpoints
NAME             USER  IP            PORT   STATUS
agent-x (local)  root  172.31.8.122  56680  Online

4. 在主机 A 上注册 Agent 到 Hub-X

将 X 主机上的 permit 文件拷贝到 A 主机上,然后加入 hub-X,如下:

ztm join hub-x --as agent-a --permit permit-x.json
ztm get meshes
NAME   JOINED AS  USER  HUBS              STATUS
hub-x  agent-a    root  172.31.8.122:443  Connected
ztm get endpoints
NAME             USER  IP            PORT   STATUS
agent-x          root  172.31.8.122  56680  Online
agent-a (local)  root  172.31.0.137  34476  Online

5. 配置隧道 X-A 用于从 X 访问 A 的 SSH 服务

接下来我们创建一条 ZTM Tunnel[6],隧道入口在 X 主机的 10233 端口,出口对接 A 主机的 22 端口。

ztm tunnel open in tcp/sshd --listen 10233
ztm ep agent-a tunnel open out tcp/sshd --target 127.0.0.1:22

接下来在 X 主机上访问 localhost:10233,会被 ZTM Tunnel 转发到 A 主机的 SSH 服务:

ssh -i .ssh/key.em -p 10233 admin@localhost

6. 关闭主机 A 的开放 SSH 服务

最后一步,我们将 A 主机上的 sshd 服务监听地址改为 127.0.0.1,这样只有通过 ZTM Tunnel 才能访问 A 主机的 SSH 服务。

sudo vi /etc/ssh/sshd_config 
sudo systemctl restart sshd
sudo grep Listen /etc/ssh/sshd_config
ListenAddress 127.0.0.1
#ListenAddress ::

检查 sshd 的运行状态,可以看到它现在监听在 127.0.0.1:22

sudo systemctl status sshd
● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; preset: enabled)
     Active: active (running) since Thu 2024-08-01 13:50:16 UTC; 41s ago
       Docs: man:sshd(8)
             man:sshd_config(5)
    Process: 757 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
   Main PID: 758 (sshd


)
      Tasks: 1 (limit: 1137)
     Memory: 1.4M
        CPU: 22ms
     CGroup: /system.slice/ssh.service
             └─758 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"


Aug 01 13:50:16 ip-172-31-0-137 systemd[1]: Starting ssh.service - OpenBSD Secure Shell server...
Aug 01 13:50:16 ip-172-31-0-137 sshd[758]: Server listening on 127.0.0.1 port 22.
Aug 01 13:50:16 ip-172-31-0-137 systemd[1]: Started ssh.service - OpenBSD Secure Shell server.

在 X 主机上验证,可以看到只有通过 ZTM Tunnel 才能访问 A 主机的 SSH 服务,而直接通过 A 主机的 IP 是无法访问的。。

ssh -i .ssh/key.em admin@172.31.0.137
ssh: connect to host 172.31.0.137 port 22: Connection refused

关于 ZTM

ZTM https://github.com/flomesh-io/ztm 是开源的去中心化网络基础设施软件。它基于 HTTP/2 隧道构建,可以在任何类型的 IP 网络上运行,例如 LAN、容器化网络和互联网等。

为什么选择 ZTM

ZTM 通过提供一系列核心功能,为构建去中心化应用程序奠定了基础,包括:

•内网穿透,跨 Internet 网关和防火墙的网络连接•TLS 加密的通信通道•基于证书的身份验证和访问控制•去中心化的应用程序发布和部署•分散式文件发现和数据共享

ZTM 可用于各种场景,从连接家庭和工作场所的 2 节点个人网络,到连接全球办公室和分支机构的 10000 节点企业网络。

ZTM 可以多种设备上运行,支持 CPU 架构:x86、ARM、MIPS、RISC-V、LoongArch 等,以及操作系统:Linux、Windows、macOS、FreeBSD、Android 等。

关于 Flomesh

Flomesh(易衡科技)成立于 2018 年,自主研发并开源了高性能可编程代理 Pipy(https://github.com/flomesh-io/pipy)。以 Pipy 为基础,Flomesh 研发了软件负载均衡、服务网格两款软件产品。为工信部认证的可信云产品、可信开源项目。

Flomesh 核心竞争力来自完全自研的核心组件 Pipy,该组件高性能、高可靠、低延迟、可编程、可扩展、低依赖,采用 C++ 开发,内置自研的 JS 引擎,支持使用 JS 脚本做扩展开发。支持包括 x86、arm、龙芯、海光等硬件 CPU 架构;支持 Linux、FreeBSD、macOS、Windows、OpenWrt 等多种核心的操作系统。

Flomesh 成立以来,以技术为根基、以客户为导向,产品被应用在头部股份制商业银行总行、大型保险公司、运营商总部以及研究院等众多客户和多个场景。

加入 Flomesh 社区

添加小 P 成为好友,参与社区互动,享受丰富互动并获取独家周边礼品!

3e0597330fb3196352bf19eca926d5f6.jpeg
引用链接

[1] CVE-2024-6387: https://ubuntu.com/security/CVE-2024-6387
[2] ZTM: https://github.com/flomesh-io/ztm
[3] ZTM Release页面: https://github.com/flomesh-io/ztm/releases
[4] CLI 文档: https://github.com/flomesh-io/ztm/blob/main/docs/CLI_zh.md
[5] Endpoint: https://github.com/flomesh-io/ztm/blob/main/docs/Architecture-Concepts.md#endpoint
[6] ZTM Tunnel: https://github.com/flomesh-io/ztm/blob/main/docs/ZT-App.md#zt-tunnel

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值