构建不裸奔的贾维斯:OpenClaw 安全部署最佳实践指南 (v2026 版)
OpenClaw 很强。它能帮你管理日程、整理文件、回复消息、甚至控制智能家居。但如果你只是照着官方 Readme 里的 docker run 一敲了之,那你现在的状态可能和"裸奔"没区别。
RCE 漏洞虽然在 v2026.1.29 修了,但那只是打了一个补丁。如果你的整体安全配置不到位,下一个漏洞依然能把你带走。
这里有一份给 OpenClaw 用户的实战加固指南。不讲虚的,不讲理论,只讲怎么把门窗锁好。
第一步:检查你的版本
在做任何事情之前,先确认你跑的是修复后的版本。
# 如果是 Docker 部署
docker exec openclaw cat /app/package.json | jq '.version'
# 期望输出:>= "2026.1.29"
# 如果是源码部署
cd /path/to/openclaw
cat package.json | jq '.version'
如果版本低于 2026.1.29,立刻升级:
# Docker 方式
docker pull openclaw/openclaw:latest
docker-compose down
docker-compose up -d
# 源码方式
git pull origin main
npm install
npm run build
pm2 restart openclaw # 或者你用的其他进程管理器
第二步:别让它直接暴露在公网
这是最基本也是最重要的一条。千万不要把 OpenClaw 的端口直接映射到公网 IP。
很多人为了"在外面也能用",直接在路由器上做端口转发。这等于把你家里的门钥匙挂在门外面。
错误做法:
# docker-compose.yml - 千万别这么写!
services:
openclaw:
ports:
- "0.0.0.0:3000:3000" # 这意味着任何人都能访问
然后在路由器上把 3000 端口转发出去。
正确做法:只绑定到 localhost
# docker-compose.yml
services:
openclaw:
ports:
- "127.0.0.1:3000:3000" # 只有本机能访问
如果你需要远程访问,有几个安全的方案:
方案 A:Tailscale (推荐,最简单)
Tailscale 是一个基于 WireGuard 的 VPN 服务,设置极其简单。
# 在你的服务器上安装 Tailscale
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
# 在你的手机/笔记本上也安装 Tailscale,用同一个账号登录
# 之后你就可以通过 Tailscale 分配的内网 IP 访问服务器
# 比如 http://100.64.x.x:3000
优点:设置简单,自动打洞,不需要公网 IP,流量加密。
方案 B:WireGuard (更可控)
如果你想更可控,可以自己搭 WireGuard:
# 服务器端(假设是 Ubuntu)
sudo apt install wireguard
# 生成密钥对
wg genkey | tee privatekey | wg pubkey > publickey
# 创建配置
sudo cat > /etc/wireguard/wg0.conf << EOF
[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = $(cat privatekey)
[Peer]
PublicKey = <客户端的公钥>
AllowedIPs = 10.0.0.2/32
EOF
sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0
方案 C:Cloudflare Tunnel (下一篇会详细讲)
如果你连 VPN 都懒得配,Cloudflare Tunnel 是个好选择。它不需要开任何入站端口,还自带鉴权。
第三步:容器隔离是底线
永远不要直接在宿主机上跑 OpenClaw。 用 Docker。
而且,不要给容器太多权限。我见过很多人的配置是这样的:
# 危险配置!
services:
openclaw:
volumes:
- /:/host # 把整个根目录挂载进去
privileged: true # 给了 root 权限
network_mode: host # 直接用宿主机网络
这意味着如果 OpenClaw 被攻破,攻击者相当于获得了宿主机的 root 权限。
安全配置:
# docker-compose.yml
version: '3.8'
services:
openclaw:
image: openclaw/openclaw:latest
container_name: openclaw
restart: unless-stopped
# 只暴露必要端口,只绑定到 localhost
ports:
- "127.0.0.1:3000:3000"
# 只挂载必要目录
volumes:
- ./data:/app/data # 应用数据
- ./config:/app/config:ro # 配置文件,只读
# 不要挂载 home 目录、根目录等敏感位置
# 以非 root 用户运行
user: "1000:1000"
# 安全相关设置
security_opt:
- no-new-privileges:true # 禁止提权
cap_drop:
- ALL # 移除所有 Linux capabilities
cap_add:
- NET_BIND_SERVICE # 只添加必要的 capability
# 只读根文件系统(可选,某些功能可能需要调整)
read_only: true
tmpfs:
- /tmp
- /app/tmp
# 资源限制
deploy:
resources:
limits:
cpus: '2'
memory: 4G
# 环境变量(敏感信息用 Docker secrets 或 .env 文件)
env_file:
- .env
第四步:API Key 的本地加密管理
OpenClaw 需要很多 Key:OpenAI、Anthropic、Replicate 等。这些 Key 怎么存储,直接关系到你的钱包安全。
最差的做法:明文写在配置文件里
// config.json - 千万别这样!
{
"openai_api_key": "sk-proj-xxx...",
"anthropic_api_key": "sk-ant-xxx..."
}
然后这个文件可能不小心被 commit 到 Git,或者被同步到云盘,或者被其他应用读取。
好一点的做法:环境变量
# .env 文件
OPENAI_API_KEY=sk-proj-xxx...
ANTHROPIC_API_KEY=sk-ant-xxx...
# docker-compose.yml
services:
openclaw:
env_file:
- .env
确保 .env 文件:
- 加入
.gitignore - 权限设置为
600(只有 owner 能读写)
chmod 600 .env
echo ".env" >> .gitignore
更好的做法:Docker Secrets (Swarm 模式) 或外部密钥管理
# docker-compose.yml (Swarm 模式)
version: '3.8'
services:
openclaw:
secrets:
- openai_key
- anthropic_key
environment:
- OPENAI_API_KEY_FILE=/run/secrets/openai_key
- ANTHROPIC_API_KEY_FILE=/run/secrets/anthropic_key
secrets:
openai_key:
external: true
anthropic_key:
external: true
如果你用的是 Kubernetes,可以用 Kubernetes Secrets 或者 HashiCorp Vault。
第五步:开启鉴权,哪怕是在内网
新版 OpenClaw 应该加强了鉴权机制。请务必去设置里开启。
# 检查当前鉴权状态
curl -s http://localhost:3000/api/health
# 如果返回数据而不是 401,说明鉴权没开
# 开启鉴权(具体配置看你的版本)
# 在 config.json 或环境变量中设置
// config.json
{
"auth": {
"enabled": true,
"type": "token", // 或 "basic"
"token": "your-strong-random-token-here"
}
}
Token 怎么生成?
# 生成一个强随机 token
openssl rand -base64 32
# 输出类似:K7xPq9vM2nRtYjW4uL6hD8fGcSaEzXbV0iNoQmCp1wH=
把这个 token 保存好,在所有 API 请求中带上:
curl -H "Authorization: Bearer K7xPq9vM2nRtYjW4uL6hD8fGcSaEzXbV0iNoQmCp1wH=" \
http://localhost:3000/api/status
为什么内网也要鉴权?
- 你的内网可能不止你一个人。室友、家人、访客都可能连到你的 WiFi。
- 你的其他设备可能被入侵。比如智能电视、智能音箱、路由器本身。
- 恶意网页可以通过浏览器攻击内网服务(就像 OpenClaw 这次的漏洞)。
内网不是安全区。别有这个幻觉。
第六步:网络层隔离
如果你对安全有更高要求,可以用 Docker 网络把 OpenClaw 隔离起来。
# docker-compose.yml
version: '3.8'
networks:
openclaw_net:
driver: bridge
internal: true # 内部网络,不能直接访问互联网
proxy_net:
driver: bridge
services:
openclaw:
networks:
- openclaw_net
# OpenClaw 本身不能直接上网
# 如果 OpenClaw 需要调用外部 API,通过代理
proxy:
image: nginx:alpine
networks:
- openclaw_net
- proxy_net
# 配置 Nginx 作为出口代理,可以做白名单控制
这样,即使 OpenClaw 被攻破,攻击者也不能直接从容器内访问互联网。所有外部请求都要经过代理,你可以在代理层做审计和过滤。
第七步:日志与监控
时不时看一眼 Docker 的日志。如果你发现 Agent 在凌晨 3 点尝试访问一些奇怪的网站,或者执行了你没下达的 shell 命令,立刻停掉容器。
# 查看实时日志
docker logs -f openclaw
# 查看最近 100 行日志
docker logs --tail 100 openclaw
# 搜索可疑关键词
docker logs openclaw 2>&1 | grep -E "(error|warning|unauthorized|failed)"
更进一步,可以把日志导出到专门的日志系统(比如 Loki、ELK):
# docker-compose.yml
services:
openclaw:
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
# 或者使用 fluentd、loki 等驱动
设置告警规则:
- 登录失败次数超过阈值
- 出现敏感命令执行(rm -rf、curl | sh 等)
- 访问非白名单的外部域名
- 资源使用异常飙升
第八步:定期备份与恢复演练
# 备份数据目录
tar -czvf openclaw-backup-$(date +%Y%m%d).tar.gz ./data ./config
# 测试恢复
docker-compose down
rm -rf ./data ./config
tar -xzvf openclaw-backup-xxx.tar.gz
docker-compose up -d
# 验证服务正常
备份要存在不同的物理位置。如果你的电脑被勒索软件加密,备份在同一台电脑上等于没有备份。
完整的安全配置示例
最后,给一个相对完整的 docker-compose.yml 示例:
version: '3.8'
services:
openclaw:
image: openclaw/openclaw:2026.1.29 # 锁定版本,避免意外升级
container_name: openclaw
restart: unless-stopped
ports:
- "127.0.0.1:3000:3000"
volumes:
- ./data:/app/data
- ./config:/app/config:ro
environment:
- NODE_ENV=production
- LOG_LEVEL=info
- AUTH_ENABLED=true
- AUTH_TOKEN_FILE=/run/secrets/auth_token
secrets:
- auth_token
- openai_key
user: "1000:1000"
security_opt:
- no-new-privileges:true
cap_drop:
- ALL
read_only: true
tmpfs:
- /tmp:size=100M
deploy:
resources:
limits:
cpus: '2'
memory: 4G
reservations:
cpus: '0.5'
memory: 512M
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "5"
secrets:
auth_token:
file: ./secrets/auth_token.txt
openai_key:
file: ./secrets/openai_key.txt
总结
把 OpenClaw 当作一个外包员工。
你可以雇佣它,让它帮你干活。但你得盯着它,只给它最小的权限,并且绝不把家里房产证交给它保管。
- 绑定到 localhost,不直接暴露
- 用 Docker 隔离,限制权限
- 开启鉴权,即使在内网
- API Key 加密存储
- 定期查看日志
- 保持更新
这才是和 AI Agent 共存的正确姿势。
安全配置可能会让事情变得稍微麻烦一点,但相比被黑之后的损失,这点麻烦不算什么。你愿意花时间配置 2FA 保护你的银行账户,那也应该花点时间保护你的 AI Agent——因为它可能比你的银行账户更危险。