开源堡垒机 Warpgate:一个容器搞定 SSH、MySQL 和 Web 访问

简介

什么是 Warpgate ?

Warpgate 是一个开源的智能堡垒机(bastion host)/ 特权访问管理(PAM)平台,支持 SSHHTTPSKubernetesMySQLPostgreSQLRDPVNC 等多种协议。它可以让用户通过浏览器或原生客户端,在一个入口安全地访问内网的服务器、Web 应用和数据库。

主要特点

  • 多协议支持:同时代理 SSHHTTPSKubernetesMySQLPostgreSQLRDPVNC,一套系统管理所有入口
  • 无需客户端:原生 SSH 客户端、浏览器、数据库客户端均可直接使用,无需安装 agent 或专用 wrapper
  • 浏览器内置访问Web 界面内置 SSHRDPVNC 终端,浏览器即可操作内网资源
  • 会话录制与审计:所有会话自动录制,可在管理界面实时查看或回放,支持命令级审计
  • 双因素认证:内置 TOTP2FA)与 OpenID ConnectSSO)单点登录支持
  • 暴力破解防护:内置 IP 封禁与用户锁定机制,无需额外配置 fail2ban
  • 细粒度授权:用户与目标服务 1:1 精确授权,通过角色(Roles)管理访问权限
  • 单一二进制100% 安全 Rust 编写,单文件运行,零外部依赖
  • 自托管:数据完全由自己掌控,配置与数据库都存放在本地 SQLite
  • 开源免费:基于 Apache-2.0 协议开源,可免费使用和修改

应用场景

  • 服务器统一入口:将多台服务器置于 Warpgate 之后,运维人员通过一个 2222 端口访问所有机器,并统一记录所有操作
  • HomeLab 远程访问:家庭实验室多台设备,通过一个 HTTPS 入口即可访问全部 SSH 目标和 Web 应用,配合 Cloudflare Tunnel 可安全暴露到公网
  • 数据库安全代理:通过 MySQL / PostgreSQL 代理端口访问内网数据库,无需将数据库直接暴露在公网
  • 企业合规审计:满足等保等合规要求,精确记录所有 SSH 会话,支持会话回放和操作审计
  • Kubernetes 集群管理:作为 Kubernetes 代理,安全地管理多个 K8s 集群
  • Web 应用集中入口:通过 HTTPS 域名绑定,在一个入口代理内网多个 Web 应用,可按用户授权访问不同的应用

Warpgate 界面截图

Warpgate 是一个强调”精确授权 + 完整审计”的开源堡垒机平台,是传统跳板机和商用 PAM 系统的轻量级替代方案。

安装

在群晖上以 Docker 方式安装。

WarpgateDocker 镜像托管在 ghcr.io,且需要经过 setup 初始化配置,因此使用命令行方式安装。

本文写作时, latest 版本对应为 0.27.5

docker cli 安装

如果你熟悉命令行,可能用 docker cli 更快捷

1
2
3
4
5
6
7
8
9
10
11
# 新建文件夹 warpgate 和 子目录
mkdir -p /volume1/docker/warpgate/data

# 进入 warpgate 目录
cd /volume1/docker/warpgate

# 修改目录权限
chmod a+rw data

# 初始化配置(交互式,需设置 admin 密码)
docker run --rm -it -v $(pwd)/data:/data ghcr.io/warp-tech/warpgate setup

提示setup 命令为交互式初始化,会引导你设置和 admin 密码,配置会自动写入 /data

在低内核版本上会出现下面的错误

1
RNDGETENTCNT on /dev/urandom indicates that the entropy pool does not have enough entropy. Rather than continue with poor entropy, this process will block until entropy is available.

如果你看到上面👆这个错误,建议换机器安装


? Do you want to record user sessions? (y/n) › 默认就是 yes,只要回车就行

接下来设置 admin 的密码

注意:密码不会回显,千万不要输错了

设置完成

配置会写入到 /data 目录

接下来执行下面的命令

1
2
3
4
5
6
7
8
9
10
# 一键启动
docker run -d \
--name=warpgate \
--restart=unless-stopped \
-p 2222:2222 \
-p 8888:8888 \
-p 33306:33306 \
-p 55432:55432 \
-v $(pwd)/data:/data \
ghcr.io/warp-tech/warpgate

docker-compose 安装

也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

官方 Docker Compose 配置参考:https://github.com/warp-tech/warpgate/blob/main/docker/docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
version: '3.8'

services:
warpgate:
image: ghcr.io/warp-tech/warpgate
container_name: warpgate
restart: unless-stopped
ports:
- "2222:2222" # SSH 端口
- "8888:8888" # Web 管理界面端口
- "33306:33306" # MySQL 代理端口
- "55432:55432" # PostgreSQL 代理端口
volumes:
- ./data:/data # 存放配置和数据库
stdin_open: true
tty: true

然后通过 SSH 登录到您的群晖,执行下面的命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 新建文件夹 warpgate 和 子目录
mkdir -p /volume1/docker/warpgate/data

# 进入 warpgate 目录
cd /volume1/docker/warpgate

# 修改目录权限
chmod a+rw data

# 将 docker-compose.yml 放入当前目录

# 初始化配置(交互式,需生成配置文件)
docker-compose run warpgate setup

# 一键启动
docker-compose up -d

运行

在浏览器中访问 https://<群晖IP>:8888/@warpgate/admin

注意是 https 协议,使用 http 会提示错误

https 也会有错误提示

高级 –> 继续前往

现在可以看到登录界面了

admin 和我们设置的密码登录

添加主机

Add a target 添加主机

Targets 中添加要访问的目标(SSH / HTTP / MySQL / PostgreSQL / RDP / VNC / Kubernetes

以群晖主机自身为例,选 SSH

输入主机IP 、端口等信息

普通用户访问 https://<群晖IP>:8888 后会看到可用的目标列表,点击即可通过浏览器建立连接。

第一次需要点 Accept and connect

接下来就可以操作了

注意事项

  1. 必须使用 HTTPS 访问:管理界面仅通过 HTTPS 提供,首次访问会有自签名证书警告,可替换为域名证书(或放在反向代理后面)
  2. 端口冲突:如果 2222 已被系统 SSH 占用,可改成本地端口如 10222:2222
  3. 域名/证书配置:如果有正式域名和证书,最好在 setup 后及时替换 /data 中的自签名证书
  4. 安全建议:如需暴露到公网,建议配合 Cloudflare Tunnel / 反向代理,并启用 Warpgate 内置的暴力破解防护(Login Protection)做安全封禁

参考文档

Warpgate — Fully transparent SSH, HTTPS, Kubernetes, MySQL and Postgres bastion/PAM
地址:https://github.com/warp-tech/warpgate

Warpgate 官方文档
地址:https://warpgate.null.page/

Docker 快速入门
地址:https://warpgate.null.page/getting-started-on-docker/

warp-tech/warpgate 容器镜像(GHCR)
地址:https://github.com/warp-tech/warpgate/pkgs/container/warpgate