Pangolin 零信任访问实施指南 (最佳实践)
Pangolin 零信任访问实施指南 (最佳实践)
本指南基于 fosrl/pangolin 官方文档及零信任最佳实践编写,旨在落实“方案一:全节点连接器模式”,将十余台 VPS 纳入统一的安全访问管理。
1. 架构规划
- 控制平面 (Control Plane): 部署一台独立的 VPS 作为 Pangolin Server,负责身份认证、策略管理和 WireGuard 密钥分发。
- 数据平面 (Data Plane): 在每一台业务 VPS 上部署 Pangolin Connector (Agent),建立到控制平面的加密隧道。
- 访问平面 (Client): 运维人员使用 Pangolin Client (基于 WireGuard) 接入。
2. 环境准备
- 控制端 VPS: 建议 1核 2G 内存以上,安装 Docker & Docker Compose。
- 域名: 一个用于管理面板的域名 (如
vpn.example.com)。 - 被管 VPS: 需支持安装 Docker (推荐) 或直接运行二进制文件。
3. 部署控制平面 (Pangolin Server)
官方推荐使用 Docker Compose 进行部署,这是维护成本最低的方式。
3.1 准备配置文件
在控制端 VPS 上创建目录 ~/pangolin 并创建 docker-compose.yml:
version: '3.8'
services:
pangolin:
image: fosrl/pangolin:latest
container_name: pangolin
restart: always
# 关键:开启特权模式以管理 WireGuard 网络接口
privileged: true
network_mode: host
environment:
# 替换为您的实际域名
- PUBLIC_HOST=vpn.example.com
# 设置初始管理员密码 (首次启动后建议修改)
- ADMIN_PASSWORD=ChangeMe123!
# WireGuard 监听端口 (默认 51820/udp)
- WG_PORT=51820
# 面板端口
- PORT=8080
volumes:
- ./data:/data
3.2 启动服务
cd ~/pangolin
docker-compose up -d
3.3 初始化配置
- 访问
http://vpn.example.com:8080(注意防火墙需放行 TCP 8080 和 UDP 51820)。 - 使用
admin和环境变量中设置的密码登录。 - 安全加固:
- 立即修改管理员密码。
- (推荐) 配置 OIDC/SAML 对接公司现有的身份源 (如 Google Workspace, Okta, 或自建 Keycloak),实现单点登录。
4. 接入业务节点 (部署 Connectors)
针对您管理的十余台 VPS,我们需要逐一安装 Connector。
4.1 创建 Connector 令牌
- 在 Pangolin 管理面板,进入 Network 或 Connectors 菜单。
- 点击 “Add Connector” (或 Add Site)。
- 命名建议使用主机名 (如
prod-db-01,dev-app-02) 以便于识别。 - 系统将生成一个 Join Token 或安装脚本。
4.2 在业务 VPS 上安装
登录每一台业务 VPS,执行安装命令。官方通常提供 Docker 方式,这是最干净的:
# 替换 <YOUR_JOIN_TOKEN> 和 <CONTROL_PLANE_IP>
docker run -d \
--name pangolin-connector \
--restart always \
--privileged \
--net=host \
fosrl/pangolin:latest \
agent --token <YOUR_JOIN_TOKEN> --server <CONTROL_PLANE_URL>
注意:Agent 模式启动后,该 VPS 会自动通过 WireGuard 隧道连接到控制平面。
4.3 验证连接
回到 Pangolin 管理面板,确认所有 Connector 状态变为 “Connected” (在线)。
5. 配置零信任 SSH 访问
这是本方案的核心:不通过公网 IP 直连 SSH,而是通过 Pangolin 隧道。
5.1 定义 SSH 资源
在管理面板中为每一台 VPS 添加资源:
- Resource Name:
ssh-prod-db-01 - Connector: 选择对应的
prod-db-01连接器。 - Network Address:
127.0.0.1:22- 解释:因为 Connector 运行在 VPS 本地,所以目标地址是 localhost 的 22 端口。
- Protocol: TCP
5.2 配置访问策略 (Policies)
- 进入 Policies 菜单。
- 创建策略
Allow-SSH-Admins。 - Subject: 选择管理员用户组 (或特定用户)。
- Object: 选择上述创建的 SSH 资源。
- Action: Allow。
5.3 客户端连接测试
- 运维人员电脑安装 WireGuard 客户端或 Pangolin 专用客户端。
- 从管理面板获取个人连接配置 (Profile) 并导入。
- 连接成功后,Pangolin 通常会为资源分配一个虚拟 IP 或内部域名。
- 例如:
ssh-prod-db-01.pangolin.internal
- 例如:
- 使用 SSH 连接:
ssh user@ssh-prod-db-01.pangolin.internal
6. 收尾与安全加固 (关键步骤)
在确认通过 Pangolin 可以成功连接所有 VPS 的 SSH 后,执行以下操作以闭环安全:
-
关闭公网 SSH 端口:
- 配置 VPS 的防火墙 (ufw/iptables) 或云厂商的安全组。
- 拒绝 所有来自公网的入站 TCP 22 流量。
- 仅允许 UDP 51820 (如果 Connector 直连) 或完全关闭入站 (如果 Connector 是出站连接模式)。
- 注意:保留云厂商提供的 VNC/Console 访问方式以防误操作导致“通过 VPN 也连不上”的死锁情况。
-
审计与监控:
- 定期查看 Pangolin 面板的 Audit Logs,审查谁在何时访问了哪台服务器。
7. 应急预案
- 控制平面故障: 如果 Pangolin Server 宕机,所有 SSH 将不可用。
- 对策: 保持至少一台“逃生通道”服务器,其 SSH 端口仅对公司固定公网 IP 开放,不依赖 Pangolin,作为紧急入口。