OpenClaw 远程访问技术指南
第一章:引言
1.1 远程访问的需求场景
在当今数字化时代,远程访问已成为个人和企业不可或缺的技术能力。以下是典型的远程访问需求场景:
VPS 云端部署:许多用户选择在云服务器(如 AWS、DigitalOcean、阿里云等)上部署服务,以获得 7×24 小时的在线能力。这种场景下,用户需要从任意地点安全地管理和访问云端资源。
家庭实验室(HomeLab):技术爱好者常在家庭网络中搭建 NAS、智能家居中枢、媒体服务器等设备。远程访问使得用户在外出时仍能监控和管理家庭网络中的设备。
移动办公与多设备协同:现代工作方式要求在不同设备间无缝切换——从办公室的台式机到家中的笔记本,再到移动端的手机和平板。统一的远程访问方案可以确保工作环境的一致性。
开发与测试环境:开发者需要在隔离环境中运行代码、测试应用,同时能够从主设备远程调试和控制这些环境。
1.2 OpenClaw 架构概述
OpenClaw 是一款本地优先的个人 AI 助手框架,其架构设计围绕三个核心组件展开:
Gateway(网关):作为 OpenClaw 的控制平面,Gateway 是 WebSocket 服务端,负责协调会话、通道、工具和事件。它默认监听 ws://127.0.0.1:18789,是整个系统的神经中枢。
安全背景说明:Gateway 的默认配置体现了"默认安全"的设计理念:
- 绑定到 localhost (127.0.0.1):防止意外暴露到网络,避免未授权访问
- 端口 18789:避开常见服务端口,减少扫描和攻击面
- HTTP 协议:默认不启用 TLS,鼓励用户通过反向代理或 VPN 隧道获得 TLS 加密
这种设计确保了 OpenClaw 在开箱即用时的安全性,用户可以根据需要逐步放宽访问限制。Gateway 支持多通道接入(WhatsApp、Telegram、Slack、Discord 等 20+ 平台),并提供统一的 API 接口。
Node(节点):Node 是执行设备本地操作的客户端组件,支持 macOS、iOS 和 Android 平台。Node 通过 Gateway 协议进行设备配对,可执行相机拍摄、屏幕录制、系统通知、位置获取等操作。Node 与 Gateway 分离的设计使得远程部署成为可能。
Session(会话):Session 是 OpenClaw 的执行上下文单元。每个会话包含独立的工具权限、模型配置和对话历史。会话分为 main(主会话,通常用于直接对话)和群组隔离会话,支持不同的沙箱策略和激活模式。
1.3 远程访问方案对比
| 方案 | 适用场景 | 优点 | 缺点 | 安全等级 |
|---|---|---|---|---|
| Tailscale Serve | 同 Tailnet 网络内的设备访问 | 零配置、端到端加密、无需公网 IP | 仅限 Tailscale 网络成员访问 | ⭐⭐⭐⭐⭐ |
| Tailscale Funnel | 需要从公网访问 Gateway | 自动 HTTPS、内置 DDoS 防护、域名稳定 | 暴露于公网,需强密码保护 | ⭐⭐⭐⭐ |
| SSH 隧道 | 已有 SSH 访问通道的环境 | 无需额外工具、与现有 SSH 密钥体系集成 | 需手动维护隧道、配置相对复杂 | ⭐⭐⭐⭐ |
方案选择建议
- 家庭/办公室内网:使用 Tailscale Serve,所有设备加入同一 Tailnet 即可安全访问
- VPS/云服务器:优先选择 Tailscale Funnel,如需更高控制度可选择 SSH 隧道
- 高安全要求环境:Tailscale Serve + 设备配对认证,配合防火墙白名单
OpenClaw 的远程访问架构遵循"Gateway 在哪里运行,执行就在哪里发生"的原则——exec 工具在 Gateway 所在主机执行,而 device 动作(如相机、通知)则在配对的 Node 设备上执行。这种分离设计既保证了远程管理的便利性,又保留了设备本地功能的完整性。
1.4 系统要求与环境依赖
1.4.1 目标读者
本文档适合以下读者:
- 个人用户:希望在家庭网络中远程访问 OpenClaw
- 运维工程师:需要在生产环境部署安全的远程访问方案
- 开发者:需要理解和调试 OpenClaw 的网络通信
前置知识要求:
- 基本的 Linux 命令行操作
- 网络基础概念(IP、端口、DNS)
- 了解 SSH 和 TLS 的基本概念
1.4.2 系统要求
| 组件 | 最低要求 | 推荐配置 |
|---|---|---|
| 操作系统 | Ubuntu 20.04 / Debian 11 | Ubuntu 22.04 LTS |
| 内存 | 512MB | 1GB+ |
| 存储 | 100MB | 500MB+ |
| Node.js | v18+ | v20+ LTS |
| 网络 | 稳定互联网连接 | 公网 IP 或 Tailscale |
1.4.3 软件依赖
- OpenClaw:最新稳定版本
- Node.js:v18+(推荐 v20+ LTS)
- Git:用于克隆仓库和版本控制
- curl/wget:用于下载安装包
- systemd(Linux):用于服务管理
- Nginx(可选):用于反向代理和 TLS 终止
- Certbot(可选):用于 Let's Encrypt 证书申请
1.5 文档结构导航
本文档按技术复杂度递进组织:
- 第一章 引言:背景知识和方案概述
- 第二章 Tailscale:最简单的零配置方案
- 第三章 SSH 隧道:灵活的传统方案
- 第四章 TLS/WebSocket:现代化的生产级方案
- 第五章 安全实践:通用的安全加固指南
推荐阅读路径:
- 新手用户:按顺序阅读 1 → 2 → 5
- 有经验用户:直接跳转到所需方案章节
- 生产部署:重点阅读 4 和 5
1.6 快速入门指南
第一步:环境准备
# 检查 Node.js 版本
node --version # 需要 v18+
# 安装 OpenClaw(如果尚未安装)
npm install -g @openclaw/core
第二步:选择方案
根据您的使用场景选择合适的远程访问方案:
- 家庭网络:选择 Tailscale Serve(最简单)
- 公网访问:选择 Tailscale Funnel 或 TLS/WebSocket
- 已有 SSH:选择 SSH 隧道
第三步:按章节操作
按照选定方案的章节步骤进行配置,每章都包含:
- 前提条件检查
- 详细配置步骤
- 验证方法
- 故障排除指南
第四步:安全加固
完成基本配置后,务必阅读第五章的安全最佳实践,进行必要的安全加固。
第二章:Tailscale 方案详解
概述
Tailscale 是一个基于 WireGuard 的零配置 VPN 解决方案,为 OpenClaw 远程访问提供了简单而强大的网络互联能力。相比传统 VPN,Tailscale 通过去中心化的协调服务器建立点对点连接,实现了无需复杂配置的私有网络。
Tailscale 原理与优势
工作原理
Tailscale 的核心架构基于以下几个组件:
- Coordination Server(协调服务器):负责节点发现、身份验证和 NAT 穿透协调
- DERP(Designated Encrypted Relay for Packets)服务器:在中继模式下转发流量
- WireGuard 协议:提供高性能的加密通信通道
当两台设备建立连接时,Tailscale 会:
- 通过协调服务器交换公钥和网络信息
- 尝试建立直接的 WireGuard 连接
- 如直连失败,自动切换到 DERP 中继
核心优势
- 零配置部署:安装后自动加入私有网络
- NAT 穿透:自动处理复杂的网络环境
- 访问控制:细粒度的 ACL 策略管理
- 多平台支持:支持 Linux、Windows、macOS、iOS、Android
- 企业级安全:端到端加密,最小权限原则
Tailscale Serve 配置
Tailscale Serve 允许将本地服务安全地暴露给 Tailscale 网络内的其他节点。
基本配置
# 启动 HTTP 服务,将本地 8080 端口映射到 tailscale 域名
tailscale serve https / http://localhost:8080
# 查看当前 serve 配置
tailscale serve status
# 停止特定路径的服务
tailscale serve https / off
完整配置示例
假设我们有一个 OpenClaw Web 界面运行在本地 3000 端口:
# 1. 安装 Tailscale(Ubuntu/Debian)
curl -fsSL https://tailscale.com/install.sh | sh
# 2. 登录并加入网络
sudo tailscale up --advertise-routes=10.0.0.0/24
# 3. 启动本地服务(示例:简单的 HTTP 服务)
python3 -m http.server 3000 &
# 4. 配置 serve
sudo tailscale serve https / http://localhost:3000
# 5. 获取访问地址
TAILSCALE_IP=$(tailscale ip -4)
echo "服务可通过 https://${TAILSCALE_IP}.ts.net 访问"
配置文件自定义
创建 /etc/tailscale/tailscaled.conf:
{
"AuthKey": "tskey-auth-xxxxxxxxxxxxxxxxxxxxxx",
"Ephemeral": false,
"ExitNodeAllowLANAccess": false,
"Hostname": "openclaw-server",
"AcceptDNS": false,
"EnableFunnel": true
}
Tailscale Funnel 公网暴露
Funnel 功能允许将本地服务安全地暴露到公网,无需复杂的端口映射。
启用 Funnel
# 启用 Funnel(需要管理员权限)
tailscale funnel on
# 配置 HTTPS 服务
tailscale serve https / http://localhost:3000
# 查看 Funnel 状态
tailscale serve status
注意:OpenClaw Gateway 也提供了内置的 Tailscale 支持,可以通过 --tailscale funnel 参数直接启用 Funnel 功能,无需手动执行 tailscale 命令。例如:
openclaw gateway run --tailscale funnel
这是 OpenClaw 内置的功能,通过调用 Tailscale API 实现,简化了配置流程。
实战示例
#!/bin/bash
# OpenClaw 公网访问配置脚本
echo "配置 Tailscale Funnel 公网访问..."
# 检查 Tailscale 状态
if ! tailscale status >/dev/null 2>&1; then
echo "错误:Tailscale 未运行或离线"
exit 1
fi
# 启动 OpenClaw 服务
sudo systemctl start openclaw
sleep 3
# 配置 Funnel
tailscale serve funnel http://localhost:8080
echo "Funnel 已启用,可通过以下地址访问:"
echo "https://$(tailscale status --json | jq -r '.Self.DNSName')"
安全配置与访问控制
ACL 策略配置
创建 tailscale-acl.json:
{
"Groups": {
"group:admins": ["admin@company.com"],
"group:developers": ["dev1@company.com", "dev2@company.com"]
},
"Hosts": {
"openclaw-server": "100.64.0.1",
"database": "100.64.0.2"
},
"ACLs": [
{
"Action": "accept",
"Users": ["group:admins"],
"Ports": ["*:*"]
},
{
"Action": "accept",
"Users": ["group:developers"],
"Ports": ["openclaw-server:443", "openclaw-server:22"]
}
],
"TagOwners": {
"tag:server": ["group:admins"]
}
}
应用 ACL:
tailscale acl set tailscale-acl.json
设备标签管理
# 为设备添加标签
tailscale set --advertise-tags=tag:server
# 查看设备标签
tailscale status --peers
实战配置示例
场景:远程管理 OpenClaw 集群
#!/bin/bash
# OpenClaw 远程管理配置
echo "=== OpenClaw Tailscale 配置 ==="
# 1. 安装配置
sudo apt update && sudo apt install -y tailscale
echo "TS_AUTHKEY=tskey-auth-xxxxx-your-key-here" | sudo tee /etc/default/tailscaled
sudo systemctl enable --now tailscaled
# 2. 加入网络(非交互模式)
sudo tailscale up --authkey=${TS_AUTHKEY} --hostname=openclaw-node-$(hostname)
# 3. 配置子网路由(如需要)
sudo tailscale up --advertise-routes=192.168.1.0/24
# 4. 启用 SSH 访问
sudo tailscale serve ssh
# 5. 验证连接
echo "节点 IP: $(tailscale ip -4)"
echo "DNS 名称: $(tailscale status --json | jq -r '.Self.DNSName')"
echo "配置完成!其他节点可通过以下方式访问:"
echo "SSH: ssh $(whoami)@$(tailscale ip -4)"
echo "Web: https://$(tailscale ip -4).ts.net"
故障排除
# 检查连接状态
tailscale status
# 查看详细日志
sudo journalctl -u tailscaled -f
# 测试网络连通性
tailscale ping <目标节点IP>
# 检查 NAT 类型
tailscale netcheck
总结
Tailscale 为 OpenClaw 提供了简单而强大的远程访问解决方案。通过 WireGuard 的高性能加密、智能的 NAT 穿透和灵活的访问控制,可以轻松建立安全的私有网络。Funnel 功能进一步扩展了公网访问能力,使得远程管理和服务暴露变得极其简单。
关键要点:
- 零配置部署,自动建立私有网络
- 企业级安全,端到端加密
- 灵活的访问控制策略
- 支持公网暴露(Funnel)
- 跨平台兼容性好
第三章:SSH 隧道方案
概述
SSH 隧道(SSH Tunnel)是利用 SSH 协议的加密特性,在客户端和服务器之间建立安全通信通道的技术。对于 OpenClaw 远程访问,SSH 隧道提供了灵活的网络转发能力,可以在不暴露服务的情况下实现安全的远程访问。
SSH 隧道工作原理
核心机制
SSH 隧道基于 SSH 协议的端口转发功能,通过加密通道传输任意 TCP 流量:
- 加密传输:所有流量通过 SSH 加密通道传输
- 端口映射:将本地或远程端口映射到目标服务
- 协议透明:对上层应用透明,无需修改代码
隧道类型
- 本地端口转发(-L):将本地端口转发到远程服务器的目标端口
- 远程端口转发(-R):将远程服务器端口转发到本地目标端口
- 动态端口转发(-D):创建 SOCKS 代理服务器
本地端口转发配置(ssh -L)
基本语法
ssh -L [本地绑定地址:]本地端口:目标主机:目标端口 用户名@跳板机
实战示例
场景1:访问内网 OpenClaw 管理界面
# 将本地 8888 端口转发到内网 OpenClaw 服务器的 8080 端口
ssh -L 8888:192.168.1.100:8080 admin@jump-server.company.com
# 现在可以通过 http://localhost:8888 访问内网服务
场景2:数据库安全访问
# 将本地 5432 端口转发到生产数据库
ssh -L 5432:prod-db.internal:5432 db-admin@bastion.host.com
# 本地应用连接 localhost:5432 即可访问生产数据库
psql -h localhost -p 5432 -U app_user mydb
高级配置
# 多端口转发(使用配置文件)
cat > ~/.ssh/config << 'EOF'
Host openclaw-tunnel
HostName bastion.host.com
User admin
Port 22
IdentityFile ~/.ssh/openclaw_key
LocalForward 8888 192.168.1.100:8080
LocalForward 9999 192.168.1.101:9090
ServerAliveInterval 60
ServerAliveCountMax 3
EOF
# 使用配置文件连接
ssh openclaw-tunnel
远程端口转发配置(ssh -R)
基本语法
ssh -R [远程绑定地址:]远程端口:目标主机:目标端口 用户名@跳板机
实战示例
场景1:暴露本地开发服务
# 将跳板机的 8080 端口转发到本地的开发服务器
ssh -R 8080:localhost:3000 developer@jump-server.company.com
# 团队其他成员可通过 http://jump-server.company.com:8080 访问
场景2:远程访问内网 OpenClaw
# 在 OpenClaw 服务器上执行
ssh -R 8888:localhost:8080 admin@public-server.com
# 外部用户访问 http://public-server.com:8888 即可访问内网服务
绑定地址限制
默认情况下,远程端口只绑定到 localhost。要允许远程端口绑定到所有接口或指定接口,需要在 SSH 服务器端配置 GatewayPorts 选项:
SSH 服务器配置说明:
编辑 /etc/ssh/sshd_config 文件,配置 GatewayPorts 参数:
# 选项1:允许远程端口绑定到所有网络接口(0.0.0.0)
GatewayPorts yes
# 选项2:允许客户端指定绑定地址(推荐)
GatewayPorts clientspecified
# 选项3:保持默认,只允许绑定到 localhost
# GatewayPorts no
安全提醒:
- 启用
GatewayPorts yes会使服务对所有网络接口可见,请确保有适当的防火墙保护 GatewayPorts clientspecified提供更细粒度的控制,推荐在生产环境中使用- 始终配合 SSH 密钥认证和防火墙规则使用
动态 SOCKS 代理(ssh -D)
基本用法
# 创建 SOCKS5 代理,监听本地 1080 端口
ssh -D 1080 user@jump-server.company.com
# 使用代理访问内网资源
curl --socks5 localhost:1080 http://internal-service.local/api
持久化隧道方案(autossh 配置)
autossh 安装
# Ubuntu/Debian
sudo apt update && sudo apt install autossh
# CentOS/RHEL
sudo yum install epel-release
sudo yum install autossh
# Arch Linux
sudo pacman -S autossh
基础配置
# 简单的持久化隧道
autossh -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" \
-L 8888:192.168.1.100:8080 admin@jump-server.company.com
系统服务配置
创建 systemd 服务文件 /etc/systemd/system/openclaw-tunnel.service:
[Unit]
Description=OpenClaw SSH Tunnel Service
After=network.target
[Service]
Type=simple
User=admin
ExecStart=/usr/bin/autossh -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" \
-L 8888:192.168.1.100:8080 -L 9999:192.168.1.101:9090 \
admin@jump-server.company.com -i /home/admin/.ssh/openclaw_tunnel_key
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
启用并启动服务:
# 重新加载 systemd
sudo systemctl daemon-reload
# 启用开机自启
sudo systemctl enable openclaw-tunnel
# 启动服务
sudo systemctl start openclaw-tunnel
# 查看状态
sudo systemctl status openclaw-tunnel
安全最佳实践
SSH 配置强化
# /etc/ssh/sshd_config 安全配置
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
AllowAgentForwarding no
AllowTcpForwarding yes
GatewayPorts no
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2
密钥管理
# 生成专用隧道密钥
ssh-keygen -t ed25519 -f ~/.ssh/openclaw_tunnel_key -C "openclaw-tunnel@$(hostname)"
# 设置严格的权限
chmod 600 ~/.ssh/openclaw_tunnel_key*
# 使用 ssh-agent
eval $(ssh-agent -s)
ssh-add ~/.ssh/openclaw_tunnel_key
总结
SSH 隧道为 OpenClaw 远程访问提供了灵活可靠的安全通道。通过本地转发、远程转发和动态代理三种模式,可以满足不同的访问需求。结合 autossh 的持久化能力,可以构建稳定的生产级隧道服务。
关键优势:
- 加密传输,安全性高
- 配置灵活,适应多种场景
- 无需额外软件,利用现有 SSH 基础设施
- 支持持久化和故障恢复
第四章:TLS 加密与 WebSocket
概述
TLS(Transport Layer Security)加密和 WebSocket 协议为 OpenClaw 远程访问提供了现代化的安全通信方案。TLS 确保数据传输的机密性和完整性,WebSocket 则提供了全双工的实时通信能力。两者的结合构成了现代 Web 应用安全通信的标准方案。
重要说明:OpenClaw Gateway 本身不直接提供 TLS 终止功能。Gateway 默认监听 HTTP 连接(通常端口 18789),TLS 加密需要通过反向代理服务器(如 Nginx、Caddy、Apache)来实现。这种架构分离了应用逻辑和 TLS 处理,提供了更好的灵活性和安全性。
典型部署架构:
客户端 ↔️ HTTPS/WSS (443) ↔️ 反向代理 (Nginx/Caddy) ↔️ HTTP/WS (18789) ↔️ OpenClaw Gateway
反向代理负责 TLS 终止、负载均衡和静态资源服务,然后将解密后的流量转发给 OpenClaw Gateway 处理。
TLS/SSL 证书基础
证书类型
自签名证书(开发环境)
# 生成私钥和证书(有效期365天)
openssl req -x509 -newkey rsa:4096 -keyout openclaw.key -out openclaw.crt \
-days 365 -nodes -subj "/CN=openclaw.local/O=OpenClaw/C=CN"
# 生成带 SAN 扩展的证书
openssl req -x509 -newkey rsa:4096 -keyout openclaw.key -out openclaw.crt \
-days 365 -nodes -subj "/CN=openclaw.local" \
-addext "subjectAltName=DNS:openclaw.local,DNS:localhost,IP:127.0.0.1"
Let's Encrypt 证书(生产环境)
# 安装 certbot
sudo apt update && sudo apt install certbot
# 获取证书(standalone模式)
sudo certbot certonly --standalone -d openclaw.example.com
# 证书文件路径:
# 私钥:/etc/letsencrypt/live/openclaw.example.com/privkey.pem
# 证书:/etc/letsencrypt/live/openclaw.example.com/fullchain.pem
WebSocket over TLS 实现
基本概念
WebSocket over TLS(WSS)在 WebSocket 协议基础上增加了 TLS 加密层,默认端口为 443。
Nginx 作为 WebSocket 代理
# /etc/nginx/sites-available/openclaw
upstream openclaw_backend {
server 127.0.0.1:3000;
}
server {
listen 443 ssl http2;
server_name openclaw.example.com;
# TLS 配置
ssl_certificate /etc/letsencrypt/live/openclaw.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/openclaw.example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
# WebSocket 代理配置
location /ws {
proxy_pass http://openclaw_backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 86400;
}
# 普通 HTTPS 请求
location / {
proxy_pass http://openclaw_backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
双向 TLS 认证(mTLS)
服务端配置
# nginx mTLS 配置
server {
listen 443 ssl;
server_name api.openclaw.example.com;
ssl_certificate /etc/ssl/certs/server.crt;
ssl_certificate_key /etc/ssl/private/server.key;
# 客户端证书验证
ssl_client_certificate /etc/ssl/certs/ca.crt;
ssl_verify_client on;
ssl_verify_depth 2;
location / {
if ($ssl_client_verify != SUCCESS) {
return 403;
}
proxy_pass http://backend;
proxy_set_header X-Client-Cert $ssl_client_escaped_cert;
}
}
完整的 Nginx 反向代理配置示例
# /etc/nginx/conf.d/openclaw.conf
upstream openclaw_services {
least_conn;
server 127.0.0.1:3001 weight=1;
server 127.0.0.1:3002 weight=1;
server 127.0.0.1:3003 weight=2;
}
# HTTP 重定向到 HTTPS
server {
listen 80;
server_name openclaw.example.com;
return 301 https://$server_name$request_uri;
}
# 主 HTTPS 服务器
server {
listen 443 ssl http2;
server_name openclaw.example.com;
# TLS 优化配置
ssl_certificate /etc/letsencrypt/live/openclaw.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/openclaw.example.com/privkey.pem;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305;
ssl_prefer_server_ciphers off;
# HSTS 头
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# API 服务
location /api/ {
proxy_pass http://openclaw_services;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 30s;
proxy_send_timeout 30s;
proxy_read_timeout 30s;
}
# WebSocket 服务
location /ws/ {
proxy_pass http://127.0.0.1:3003;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 86400;
}
# 静态文件服务
location /static/ {
alias /var/www/openclaw/static/;
expires 1y;
add_header Cache-Control "public, immutable";
}
# 健康检查端点
location /health {
access_log off;
return 200 "healthy\n";
add_header Content-Type text/plain;
}
}
故障排除
TLS 证书问题
| 问题 | 症状 | 解决方案 |
|---|---|---|
| 证书链不完整 | SSL: CERTIFICATE_VERIFY_FAILED | 合并证书链 |
| Let's Encrypt 续期失败 | Certbot failed to authenticate | 检查端口占用,停止占用服务 |
| 混合内容错误 | Mixed Content 警告 | 使用 WSS 而非 WS |
总结
TLS 加密与 WebSocket 的结合为 OpenClaw 提供了现代化、高性能的安全通信方案。通过 TLS 确保数据机密性,WebSocket 提供实时通信能力,配合 Nginx 反向代理的负载均衡和 SSL 终止,可以构建企业级的远程访问系统。
关键技术点:
- TLS 证书管理与自动续期(Let's Encrypt)
- 证书固定防止中间人攻击
- WebSocket over TLS 实现实时安全通信
- 统一的认证机制保证本地远程一致性
- Nginx 优化的反向代理配置
第五章:网络安全最佳实践
5.1 认证与授权机制
OpenClaw 的安全模型围绕多层认证机制构建,确保只有授权用户和设备能够访问 Gateway 服务。
API Key 认证
Gateway 支持通过 API Key 进行身份验证。在配置文件中设置:
{
"gateway": {
"auth": {
"mode": "token",
"token": "your-secure-random-token-here"
}
}
}
建议使用至少 32 字节的加密安全随机字符串:
# 生成安全的随机 token
openssl rand -base64 32
密码认证(Password Auth)
对于 Web 界面访问,可启用密码保护:
{
"gateway": {
"auth": {
"mode": "password",
"password": "your-strong-password"
}
}
}
注意:使用 Tailscale Funnel 时,gateway.auth.mode 必须设置为 "password",否则 Funnel 将拒绝启动。
设备配对认证(DM Pairing)
OpenClaw 默认启用设备配对机制保护私信(DM)访问。当未知发送者尝试联系助手时:
- 发送者会收到一个配对码
- 管理员需运行
openclaw pairing approve <channel> <code>批准该设备 - 批准后,设备被加入本地允许列表
5.2 防火墙配置
UFW(Uncomplicated Firewall)配置
对于 Ubuntu/Debian 系统,推荐使用 UFW:
# 安装 UFW
sudo apt update && sudo apt install ufw
# 默认拒绝所有入站,允许所有出站
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 允许 SSH(必须首先配置,避免锁定)
sudo ufw allow 22/tcp
# 如果使用 Tailscale,允许 Tailscale 接口
sudo ufw allow in on tailscale0
# 启用防火墙
sudo ufw enable
# 查看状态
sudo ufw status verbose
OpenClaw 绑定策略
| 绑定模式 | 配置值 | 说明 |
|---|---|---|
| 仅本地 | loopback (默认) |
最安全,仅本机可访问 |
| 局域网 | lan |
同网络设备可访问 |
| Tailnet | tailnet |
仅限 Tailscale 网络成员 |
| 自动 | auto |
根据配置自动选择 |
最佳实践:
- 生产环境保持
gateway.bind为loopback - 配合 Tailscale Serve/Funnel 进行安全暴露
- 使用 Tailscale 时,设置
gateway.auth.allowTailscale: true以利用 Tailscale 身份验证
5.3 日志与监控
OpenClaw 安全审计
OpenClaw 内置安全审计工具:
# 基础安全审计
openclaw security audit
# 深度审计(包含探测性检查)
openclaw security audit --deep
# 自动修复可安全修复的问题
openclaw security audit --fix
# JSON 格式输出
openclaw security audit --json
fail2ban 配置
# 安装 fail2ban
sudo apt install fail2ban
# 创建本地配置
sudo tee /etc/fail2ban/jail.local << 'EOF'
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
EOF
# 启动服务
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
# 查看状态
sudo fail2ban-client status sshd
5.4 应急响应预案
安全事件分级
| 级别 | 描述 | 响应时间 |
|---|---|---|
| P0 - 严重 | Gateway 被入侵、API 密钥泄露 | 立即 |
| P1 - 高 | 可疑登录活动、未授权设备配对 | 30 分钟内 |
| P2 - 中 | 配置漂移、权限异常 | 24 小时内 |
| P3 - 低 | 安全更新可用 | 计划维护窗口 |
紧急响应流程
场景 1:API 密钥泄露
# 1. 立即撤销旧密钥
openclaw config unset gateway.auth.token
# 2. 生成新密钥
NEW_TOKEN=$(openssl rand -base64 32)
openclaw config set gateway.auth.token "$NEW_TOKEN"
# 3. 重启 Gateway
openclaw gateway restart
# 4. 更新所有客户端配置
# 5. 审查日志确认泄露范围
openclaw logs --since "24h ago" | grep -i "unauthorized\|invalid"
场景 2:可疑设备访问
# 1. 列出所有已配对设备
openclaw devices list
# 2. 撤销可疑设备
openclaw devices revoke <device-id>
# 3. 清除所有待处理配对请求
openclaw devices clear-pending
# 4. 临时启用严格配对模式
openclaw config set channels.telegram.dmPolicy "pairing"
场景 3:Gateway 完全锁定
# 如果配置错误导致无法访问:
# 1. 停止 Gateway
openclaw gateway stop
# 2. 重置配置到安全默认值
openclaw reset
# 3. 或手动编辑配置文件
nano ~/.openclaw/openclaw.json
# 4. 重新启动
openclaw gateway start
5.5 安全加固检查清单
部署前检查
- ✅ Gateway 绑定地址设为
loopback(默认) - ✅ 已配置强密码或 API Key(≥32 字节随机)
- ✅ 已启用设备配对认证
- ✅ 防火墙已启用并正确配置
- ✅ SSH 已禁用密码登录(如适用)
- ✅ 已安装 fail2ban(可选)
定期维护检查
- ✅ 运行
openclaw security audit无警告 - ✅ 检查已配对设备列表,移除不活跃设备
- ✅ 审查访问日志,确认无异常
- ✅ 更新 OpenClaw 到最新版本
- ✅ 检查 TLS 证书有效期(如使用 HTTPS)
生产环境加固
- ✅ 使用 Tailscale 或 VPN 保护访问
- ✅ 配置 Nginx 反向代理 + TLS
- ✅ 启用 HSTS 头
- ✅ 配置自动安全审计 cron 任务
- ✅ 设置日志轮转和备份
5.6 常见安全问题 FAQ
Q1: 忘记 Gateway 密码怎么办?
# 重置密码
openclaw config set gateway.auth.password "$(openssl rand -base64 24)"
# 或完全重置配置
openclaw reset
Q2: 如何临时关闭远程访问?
# 方法1:停止 Gateway
openclaw gateway stop
# 方法2:限制绑定地址
openclaw config set gateway.bind loopback
openclaw gateway restart
# 方法3:防火墙阻止(紧急情况)
sudo ufw deny 18789/tcp
总结
OpenClaw 的安全模型遵循"默认安全"原则:
- Gateway 默认仅绑定本地回环,防止意外暴露
- 私信通道默认启用配对认证,阻止未授权访问
- Tailscale 集成提供零配置安全网络,避免端口暴露
- 内置审计工具帮助持续监控安全态势
更多推荐


所有评论(0)