警告!
该项目目前处于 Alpha 试验阶段,不建议用于生产环境!
Warpgate 是在跳板机上部署的服务,该服务将接收 SSH,HTTPS,MySQL 和 PostgreSQL 的流量并转发给目标地址,并提供(可选的)Web Admin UI。它通过特殊格式的凭据接收连接,在本地对用户进行身份验证,连接到目标本身,然后将双方连接在一起。
0x00 与其他竞品对比
你可能会说为什么不用 JumpServer 呢?
你说的对,但是 Warpgate 拥有相对轻量的架构,它是一个用 Rust 编写的单一二进制文件,并且提供官方的 Docker 镜像,也支持 systemd
守护运行,这使得部署和维护变得非常简单,尤其适合资源有限的小型团队或个人开发者。相比之下,JumpServer 是一个功能全面但更为复杂的系统,需要更多的服务器资源和更复杂的基础架构来运行,增加了运维成本。
JumpServer 是生产验证过的成熟系统,在部署的时候让我的物理机风扇起飞。Warpgate 同样提供了 WebUI,但是占用资源少,除了 RDP/Telnet 主流协议都支持。两者均支持会话回放和审计。
0x01 准备基础设施
出于安全原因,或者不想让文件系统一团糟,我选择使用 Docker 部署 Warpgate,方法也很简单,配置 docker-compose.yml
就好了:
services:
warpgate:
container_name: warpgate
restart: unless-stopped
image: ghcr.io/warp-tech/warpgate
ports:
- 2222:2222
- 8888:8888
- 33306:33306
volumes:
- ./data:/data
stdin_open: true
tty: true
test: # 这是一个测试服务,如果你不需要,请删除
container_name: test_ssh
restart: unless-stopped
image: alpine_sshd # Dockerfile 放在文末
但是在此之前,我们需要先执行 setup
脚本,在你的 docker-compose.yml
同级目录下执行:
docker run --rm -it -v ./data:/data ghcr.io/warp-tech/warpgate setup
脚本将要求你输入密码,可别忘记了,不然就要删掉 ./data
然后重新设置 (别问我怎么知道的)
如果你拥有有效的 SSL 证书和密钥,你可以替换 ./data
中自签名证书了。
0x02 访问 WebUI 添加目标
如果你通过文末的 Dockerfile 构建了测试环境,那么你可以访问 https://<IP>:<PORT>/@warpgate/admin
并用你在上一步设置的密码登陆。
添加 SSH 目标
Warpgate 有自己的 SSH Public Key,目标主机必须信任。SSH Public Key 按偏好顺序列出。复制其中之一并将其粘贴到主机上的 ~/.ssh/authorized_keys
文件的末尾(每个目标主机 OS 的用户都有自己的 authorized_keys
文件,如果尚不存在,则需要创建它) 。
登录 Warpgate Admin UI 并导航到 Config > Targets > Add target
并给新目标一个名称:
创建新目标
填写连接和身份验证信息,然后单击 Update configuration
,例如:
别忘了下方需要勾选上可以访问资源的角色(默认只有方框里的那一个),随后便可以在主页查看到资源了。
访问 SSH 目标
你需要把自己的公钥上传给 Warpgate 以认证身份,然后复制 Access instructions
里的 Example Command
到终端回车执行,这样不出意外你就可以连接到目标环境了。
0x04 结语
感谢你阅读到这里,对本文有任何问题欢迎留言!
FROM alpine:latest
RUN sed -i 's#https\?://dl-cdn.alpinelinux.org/alpine#https://mirrors.tuna.tsinghua.edu.cn/alpine#g' /etc/apk/repositories \
&& apk add --no-cache openssh \
&& ssh-keygen -A \
&& sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin without-password/' /etc/ssh/sshd_config \
&& mkdir -p /root/.ssh \
&& echo "ssh-ed25519 <这里换成你在 Warpgate WebUI 拿到的 SSH 公钥>" > /root/.ssh/authorized_keys \
&& chmod 700 /root/.ssh \
&& chmod 600 /root/.ssh/authorized_keys
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]