2026 年 1 月,OpenClaw 爆出 CVE-2026-25253——超过 13.5 万个公开暴露在公网的实例因配置不当面临远程代码执行风险。 如果你的 OpenClaw 部署(无论是本机 npm / Docker 还是 VPS)尚未通过安全基线检定,现在就是加固的最后时机。本文从该漏洞事件复盘出发,提供 Docker / systemd(VPS)/ npm 全局安装三种形态下的最小权限部署清单,并给出漏洞响应的 5 阶段节奏(检测 → 备份 → 升级 → 验证 → 监控 72h),助你一口气把 OpenClaw 从"能跑起来"变成"经得起攻防"。
2026 年 1 月中旬,OpenClaw 安全团队披露了 CVE-2026-25253:当 Gateway 以默认配置(监听 0.0.0.0 且未配置认证)直接暴露在公网时,攻击者可通过精心构造的 WebSocket 握手包触发远程代码执行。Shodan 扫描显示,当时全球有 超过 13.5 万个实例 可在无认证情况下访问,涵盖个人开发者、小团队及部分企业内网穿透不当的节点。
漏洞的根本原因并非代码缺陷,而是默认配置过于宽松:
0.0.0.0,若无额外防火墙或反向代理 auth,等同于向整个互联网开放管理端口。OPENCLAW_GATEWAY_TOKEN 或启用 TLS,导致明文信道易受中间人攻击。openclaw onboard 后即认为完成部署,忽略了后续 gateway.bind 的收紧与 ufw 规则。该事件促使官方在 v2026.2.0 起将 默认监听地址改为 127.0.0.1,并强化安装向导的安全性检查。但存量实例仍需手动修复——本文即为此提供可操作清单。
无论采用何种部署形态,都必须同时满足以下三条:
OPENCLAW_GATEWAY_TOKEN,且该 token 长度 ≥ 32 字符、每 90 天轮换一次。如果你使用 Docker / Docker Compose 运行 OpenClaw,请逐项检查:
| 检查项 | 安全配置 | 危险配置(示例) | 修复命令/步骤 |
|---|---|---|---|
| network_mode | 使用自定义 bridge 或 host + 限制端口映射 | ports: "0.0.0.0:18789:18789" | 改为 127.0.0.1:18789:18789 或通过反向代理映射 |
| --read-only | 容器根文件系统设为只读,卷挂载明确列出 | 未使用 --read-only | Compose 中追加 read_only: true,并确保 ./openclaw-data:/home/node/.openclaw 等卷挂载 |
| user 与卷权限 | 指定非 root 用户(node:1000)且卷 UID/GID 一致 | 容器内 root、宿主机 755 宽松权限 | user: "1000:1000";卷目录提前 chown 1000:1000 |
| restart policy | unless-stopped 或 on-failure:3 | 无 restart(偶发崩溃后容器Exit) | 确保服务自愈,结合 healthcheck 使用 |
| OPENCLAW_GATEWAY_TOKEN | 通过环境变量注入,长度 ≥32,与 CLI 配置一致 | 空 token 或硬编码在镜像中 | environment: OPENCLAW_GATEWAY_TOKEN=${TOKEN},并在宿主机 openclaw config set gateway.token $TOKEN |
完成后通过 docker exec <container> netstat -tlnp 验证 Gateway 只监听 127.0.0.1:18789(或配置的反向代理端口)。
在云 VPS 上用 systemd 常驻 OpenClaw 时,必须配置以下防火墙与系统级加固:
sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow 22/tcp # SSH sudo ufw allow 443/tcp # HTTPS (若使用反向代理) sudo ufw allow 80/tcp # HTTP (可选,重定向至 HTTPS) sudo ufw enable
sudo ufw status numbered # 应看不到 18789/tcp 的 allow 规则
PasswordAuthentication noOpenClaw 日志默认落在 /tmp/openclaw/openclaw-YYYY-MM-DD.log,需配置 logrotate 避免撑盘:
# /etc/logrotate.d/openclaw
/tmp/openclaw/*.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
[Unit]
Description=OpenClaw Gateway
After=network.target
[Service]
Type=simple
User=node
Group=node
ExecStart=/usr/bin/openclaw gateway start
ExecStop=/usr/bin/openclaw gateway stop
Restart=on-failure
RestartSec=5
# 安全加固
PrivateTmp=yes
NoNewPrivileges=yes
ProtectSystem=strict
ProtectHome=yes
ReadWritePaths=/home/node/.openclaw /var/log/openclaw
Environment="OPENCLAW_GATEWAY_TOKEN=${OPENCLAW_GATEWAY_TOKEN}"
# 资源限制(可选)
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
本机 npm 安装(常见于开发机或 Manual 运维)必须收紧 Gateway bind 地址:
# 强制 Gateway 监听 127.0.0.1 openclaw config set gateway.bind 127.0.0.1 # 确认生效 openclaw config get gateway.bind # 应输出 127.0.0.1
若需对外提供访问,必须搭配反向代理(Nginx/Caddy)并使用 HTTP 基础认证或 OAuth:
location /openclaw/ {
proxy_pass http://127.0.0.1:18789/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
# 基础认证(示例)
auth_basic "OpenClaw Admin";
auth_basic_user_file /etc/nginx/.htpasswd;
# 或集成 OAuth 反向代理(oauth2-proxy)
openclaw --version。若 < 2026.2.0 且 Gateway 暴露公网,立即判定为高风险。nmap -p 18789 <你的公网IP> 确认端口是否对公网可达。~/.openclaw/ 整编:tar -czf openclaw-backup-$(date +%F).tar.gz ~/.openclawopenclaw gateway export > gateway-state.jsonnpm update -g openclaw 或 docker pull openclaw/openclaw:latestgateway.bind 为 127.0.0.1;若使用反向代理,确保代理层启用 TLS 与基础认证。openclaw gateway token rotate,并同步更新所有 CLI 实例与 CI 环境变量。openclaw gateway restartopenclaw gateway status 应显示 "healthy"。openclaw logs --follow | grep -i error每月至少执行一次以下 5 项检查,确保 OpenClaw 未因配置漂移或版本落后而再度暴露:
| 类别 | 检查命令 / 动作 | 合格标准 | 不合格处理 |
|---|---|---|---|
| 端口 | ss -tlnp | grep 18789 | 监听地址 = 127.0.0.1 | 执行 openclaw config set gateway.bind 127.0.0.1 并重启 |
| 认证 | openclaw config get gateway.token(长度与更新时间) | token ≥32 字符,90 天内未超期 | 执行 openclaw gateway token rotate 并更新所有依赖 |
| 日志 | du -sh /tmp/openclaw/ 与 logrotate 状态 | 日志目录 <500MB,logrotate 已启用 | 调整 logrotate 配置,清理历史日志 |
| 更新 | openclaw --version 与 npm/docker 镜像版本 | 版本 ≥ 2026.2.0(latest) | 执行 npm update -g openclaw 或 docker pull |
| 备份 | 检查 ~/.openclaw/backup/ 是否存在 < 7 天的归档 | 最近 7 天内有完整备份 | 立即运行 openclaw backup |
openclaw/openclaw:latest、:2026.3.13、:stable。许多团队在快速验证阶段会采用"能跑起来就行"的思维,跳过防火墙配置、token 轮换与日志轮转。这种思路在开发机或临时实例上或许能节省 15 分钟,但在生产环境会带来三个致命问题:
因此,安全加固是部署的第一步,而非事后补丁。对于需要稳定、长期运行 OpenClaw 的生产环境,MACCOME 提供的托管方案已内置上述所有基线(含自动 token 轮换、防火墙白名单与 24/7 监控),让你无需自行维护即可安心使用。如果你选择自托管,请务必对照本章清单逐项 audit,并把自查结果写入团队运维手册。
常见问题
我的 OpenClaw 安装于 v2026.1.0,是否一定受 CVE-2026-25253 影响?
影响版本是 <2026.2.0,且仅当 Gateway 直接暴露公网(无反向代理或 firewall)时可行利用。即使版本符合,只要网关监听 127.0.0.1 或通过受控隧道暴露,风险评级会大幅降低。建议先行升级并收紧 bind 地址。
Docker compose 中已经设置 read_only: true,是否还需要额外防火墙?
需要。read_only 防止容器内文件被修改,但 Gateway 端口仍可能被外部直接访问。必须同时满足:只读 + bind 127.0.0.1 + 反向代理认证,才能算完整加固。
Token 轮换会导致现有通道(Telegram/Slack)掉线吗?
会。Gateway token 是 CLI ↔ Gateway 通信的凭证;轮换后所有已连接的 CLI/Agent 需重新配对。通道层 token(如 Telegram bot token)不受影响,无需重配。
在生产环境必须对外提供服务,最小权限该怎么设?
最小权限 = (Gateway 仅监听 localhost) + (反向代理层强制 TLS + 认证) + (源 IP 白名单,若可能)。代理层(Nginx/Caddy/Traefik)应置于独立容器或边缘节点,仅转发已认证请求至 127.0.0.1:18789。
如何验证自己的实例是否已被利用?
检查以下痕迹:1) 未知的 CLI token 出现在 openclaw config list 中;2) ~/.openclaw/logs/ 有异常 IP 的连接记录;3) 系统进程中出现不明子进程(如 curl/wget 外连)。若发现可疑,立即隔离机器并执行备份后重装。