更安全地部署OpenClaw:我的容器化隔离实践
国家网络安全通报中心最近预警:全球超20万个OpenClaw互联网资产中,大量暴露于公网的实例存在严重安全隐患——架构缺陷、默认高危配置、漏洞利用门槛低、供应链投毒比例高达10.8%。
作为在服务器上跑OpenClaw的人,我仔细看了这份通报,决定做一件事:把OpenClaw关进笼子里。
不是不用它,而是让它既能干活,又碰不到我的核心系统。
我的思路:运行隔离
通报里提到的风险,归根结底都是同一个问题:OpenClaw和你服务器的边界太模糊了。
- 默认绑定0.0.0.0,谁都能连
- 插件运行在和你一样的权限环境里
- 智能体一旦失控,直接操作宿主机
解决方案很简单:隔离。
让OpenClaw跑在一个"沙盒"里,它能访问什么、能做什么,全部由你说了算。即使出问题,也只影响那个沙盒。
我用的是 Podman——比Docker更轻量,不需要守护进程,资源占用更少。
具体操作:三步走
第一步:创建隔离容器
podman run -d \
--name claw \
--user root \
-p 13000-13005:13000-13005 \
-v /data/openclaw-docker/data:/root \
-e NODE_OPTIONS="--max-old-space-size=4096" \
ghcr.io/openclaw/openclaw:latest
为什么这样配?
| 参数 | 我的考虑 |
|---|---|
--user root |
容器内的root,不是宿主机的root。省去容器内权限折腾,又不影响宿主机安全 |
-p 13000-13005 |
我预留了6个端口给后续服务用,现在不暴露18789(那个默认管理端口太危险) |
-v /data/...:/root |
数据持久化到宿主机,容器删了数据还在 |
NODE_OPTIONS |
给Node.js 4GB内存,够用又不至于吃光系统资源 |
关键点:18789端口没有映射。 这意味着即使有人扫描到你的服务器,也找不到OpenClaw的默认入口。
第二步:Systemd自动重启
手动启动的容器,服务器重启后就没了。我要它像系统服务一样稳定:
# 1. 准备systemd目录
mkdir -p ~/.config/systemd/user
# 2. 生成服务文件(--restart-policy=always 是关键)
podman generate systemd --name --restart-policy=always --files claw
# ⚠️ 重要:打开container-claw.service检查
# 确保没有 podman rm 这种会删容器的操作
vim container-claw.service
# 3. 复制到systemd目录
cp container-claw.service ~/.config/systemd/user
systemctl --user daemon-reload
# 4. 设置开机自启
systemctl --user enable container-claw.service
sudo loginctl enable-linger $USER
# 5. 切换到systemd管理
podman stop claw
systemctl --user start container-claw.service
验证一下:
systemctl --user status container-claw.service
# 看到 Active: active (running) 就稳了
现在即使服务器重启,OpenClaw也会自动恢复,不需要你登录手动启动。
第三步:安全地远程控制
18789没暴露,我怎么控制OpenClaw?
答案是:通过IM。
# 进入容器
podman exec -it claw /bin/bash
# 运行配置向导
openclaw onboard
按提示绑定Telegram/Discord/Slack,之后你就可以通过安全的IM通道和OpenClaw交互——不需要暴露任何管理端口到公网。
| 方式 | 风险 | 我的选择 |
|---|---|---|
| 直接暴露18789 | 极高,通报里说的85%公网暴露就是这个 | ❌ 不用 |
| IM集成 | 低,消息通道本身有平台安全机制保护 | ✅ 采用 |
这样部署,我得到了什么
✅ 边界清晰:OpenClaw被关在容器里,即使智能体"发疯"也出不来
✅ 端口可控:只开放必要的服务端口,高危管理端口完全隔离
✅ 数据安全:重要数据挂载在宿主机,容器只是"运行环境"
✅ 自动恢复:Systemd确保服务高可用,不用手动维护
✅ 远程安全:通过IM控制,彻底摆脱端口暴露的风险
这套方案不是完美的——它不能阻止你安装恶意插件,也不能修复OpenClaw本身的漏洞。但它做了一件事:把"一旦被攻破就全盘皆输"变成"即使被攻破也只在沙盒里"。
对于跑在生产环境的服务器来说,这个区别可能就是"睡一觉起来一切正常"和"紧急修复到凌晨3点"的差距。
几个额外的建议
如果你也准备这么干,这几件事值得注意:
1. 定期备份数据目录
# 数据存在这里,记得备份
cp -r /data/openclaw-docker/data /backup/openclaw-$(date +%Y%m%d)
2. 防火墙限制端口访问 即使只映射了13000-13005,也建议用防火墙限制来源IP:
# 只允许特定IP访问
ufw allow from 你的IP to any port 13000:13005
3. 插件审慎安装 通报里说的10.8%恶意插件比例不是吓唬人。安装前花两分钟看看代码,或者只从可信来源安装。
4. 定期更新镜像
podman pull ghcr.io/openclaw/openclaw:latest
systemctl --user restart container-claw.service
写在最后
网络安全通报中心的预警不是让我们不用OpenClaw,而是提醒我们用得更聪明。
容器化隔离不是什么高深技术,Podman+Systemd的组合也很成熟。关键是意识到风险在哪里,然后采取行动。
如果你也在用OpenClaw跑业务,希望这篇文章能给你一些参考。
我的配置: - 服务器:Linux (Ubuntu 22.04) - 容器:Podman 4.x - OpenClaw:ghcr.io/openclaw/openclaw:latest
有问题欢迎交流。
本文采用 Build with Public 方式创作——实战经验,全程透明。