ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

OpenClaw安全加固指南:上线前必做的5个保命配置

OpenClaw安全加固指南:上线前必做的5个保命配置

1. 别真把 OpenClaw 当玩具,裸奔上线等于给自己埋雷

最近身边聊 OpenClaw 的人明显多了。它是一个便于个人和小团队自己部署的开源服务,很多人第一眼看到它能快速拉起一个可交互、能接任务的工作台,就被这种“开箱即用”的体验吸引了。于是拉个服务器,装好依赖,启动服务,看到界面能弹出来就开始用。听起来很顺利,但问题恰恰出在这里——OpenClaw 默认配置的目的只是让你“跑起来”,而不是让你“安全地跑起来”。

我见过不止一个场景:服务监听在0.0.0.0,没有改默认口令,也没有任何访问限制。前端能打开,后端接口也能直接调用,端口暴露在公网上,甚至被一些自动化扫描工具撞到。结果就是在某个凌晨,日志里刷了一堆未知来源的请求,CPU 被打满,数据目录里多了一些来路不明的内容。

这篇文章我打算把话说透:OpenClaw 在真正对外提供服务之前,有 5 个配置属于“保命级”配置。它们不负责给你增加新功能,但负责在出事的时候保住你的服务、你的数据,以及你的脑子。内容不挑发行版,不挑部署方式,只要你用自己服务器跑 OpenClaw,这 5 条就都适用。

文章中涉及的命令和文件写法,都是我基于常见实践整理的示例,不是某个固定工程的标准答案。你的 OpenClaw 版本可能叫法不同、目录不同,但核心思路一致:身份认证、运行限制、可观测、可恢复、网络收敛。

2. “裸奔”到底是怎么发生的?先承认三个现实

在聊具体配置之前,有必要先把“裸奔”两个字拆开。它不是一个技术术语,而是我们圈子里常说的一句黑话:意思是服务虽然在那里跑着,但没有任何一层保护措施,等于把所有可被攻击或误操作的面全摊开在外面。

2.1 为什么 OpenClaw 特别容易“裸奔”

三个现实原因摆在这儿。

第一,OpenClaw 这类自托管工具,默认设计原则是“低门槛启动”。为了让你第一次体验不卡壳,很多配置项会处于宽松状态,比如不校验身份、不做访问限制、日志只输出到标准输出、数据不做定期清理。这些都适合本地开发调试,但如果你直接把这种状态搬到公网,那就等于把调试模式当生产模式用。

第二,很多使用者是个人开发者。个人使用意味着没有专门的运维角色,服务器上可能同时跑着端口转发、数据库、其他服务。你很难有精力逐条审视配置文件里的每个开关,通常看到能跑就往前走。

第三,OpenClaw 往往承担着“任务入口”的职责,会对接模型、脚本、外部工具链。一旦被拿到访问权限,攻击者不仅能看到你的数据,还能借助它调起内部脚本、读取环境变量、读取配置文件。这比拿到一个普通 Web 服务更麻烦。

2.2 一个典型的失控现场

我之前在某自动化项目里接过一个临时任务:帮一个合作方排查他们自搭建的 OpenClaw 为什么时不时无响应。上去第一眼,进程在跑,端口开着,看起来一切正常。再往下看,配置里没有开启任何认证方式,默认的管理入口可以直接访问。日志里能看到大量来自不同来源的探测请求,甚至有一段请求在尝试调用底层的工具能力。

那一刻我明白,问题的根源不是性能,也不是代码,而是它从一开始就在“裸奔”。后来我们花了两天时间清理现场、收敛权限、补配置,才把服务重新扶稳。

这个案例不是孤例。网上搜 OpenClaw 相关的运行事故,你大概率会看到类似描述:莫名的高 CPU、磁盘被写满、配置文件被改动。这些事情的起因高度一致——没有在初期就把运行保护配置补上。

2.3 上线前做配置,成本是最低的

配置问题的神奇之处在于:越早做越简单,越晚做越复杂。服务刚搭好的时候,你手里有完整的配置上下文,知道哪些参数有什么用;运行三个月之后再回头补,你要先去理解现有环境,再考虑改动会不会影响正在跑的任务,还要冒着中断服务的风险。

所以我的建议很简单:OpenClaw 启动后,别急着正式对外服务,先花半小时把这 5 条配置过一遍。这个动作在前期看起来“耽误时间”,但从长期看,是性价比最高的投入。

3. 5 个保命配置全览:是什么、防什么、为什么

这 5 条配置不是我在文档里随手挑的,而是综合了自托管服务最常见的故障模式和事故类型之后筛出来的。它们彼此独立,但缺了任何一条,整套防御都会出现明显的短板。

配置项主要防护目标出事后的典型后果
身份认证与访问控制防止未授权使用、防接口被滥用服务被人拿来当跳板,数据泄露
资源配额与运行超时防内存/CPU/请求数被拖垮服务卡死、主机 OOM、任务堆积
日志采集与告警事后追溯、事中感知出问题完全黑盒,不知道发生了什么
数据备份与恢复防配置损坏/误删/被篡改配置丢失、数据不可恢复
网络隔离与暴露收敛缩小攻击面、控制可达性端口被扫描命中、服务对外可控

下面逐个拆开讲。

3.1 身份认证与访问控制:第一道门必须存在

OpenClaw 默认可能有多种运行模式,某些模式下它不要求登录。本地用没问题,但通过网络访问时,没有认证等于谁都知道你的钥匙放在哪里。

我建议按这个路线来收紧:

  • 如果版本支持令牌认证,立即生成一个高强度随机字符串,单独存放。
  • 如果支持多用户权限,至少要区分“管理员”和“普通使用者”,别让所有入口共用同一个最高权限。
  • 把默认关闭的访问控制开关全部打开,宁可配置复杂一点,也不要为了省事把功能关掉。
  • 有账号体系的,务必强制使用强密码,并且开启二次验证。

这套配置的意义,是把“谁能使用 OpenClaw”这个问题的答案从“任何人”变成“只有你允许的人”。它是 5 条配置里优先级最高的一条,因为其他配置只能缓解问题,认证可以从源头上挡住绝大多数人。

3.2 资源配额与运行超时:别让服务拖垮整台服务器

OpenClaw 在某些任务执行期间极其吃资源。这里的资源不只是 CPU,还包括内存、并发连接数、任务队列长度。如果一个会话或任务失控,表现出的状态是无限循环的输出、持续增长的内存占用,最后把服务器整个拖死。

配置资源限制的关键参数大致分四类:

  • 单次处理超时时间:给每次任务执行设置合理上限,超时自动终止。
  • 内存占用上限:超过阈值立即报错或重启,而不是等着 OOM。
  • 并发数限制:同一时间最多处理多少个请求,避免突发流量把队列打穿。
  • 临时文件配额:有些操作会产生大量临时输出,限制写入目录大小能有效防止磁盘写满。

我自己的经验是:先按最低配置跑一轮压力测试,记录正常任务的资源消耗,再留 3 倍余量作为线上限制值。限制设得太小会影响正常使用,设得太大就失去保护意义,这个平衡要靠实测数据来定。

3.3 日志采集与告警:给你一双看得见监控状态的眼睛

“保命”这件事,最重要的是可感知。如果服务出了问题你都不知道,那配置再多也等于零。OpenClaw 通常有基础日志输出,但很多人忽略了两件事:日志要持续保存到磁盘,日志要有对应的监控告警。

具体到一个可行的标准,至少包括以下内容:

  • 打开访问日志和错误日志,分别存储,避免混在一起难以排查。
  • 设置日志轮转策略,避免单个日志文件无限增长。
  • 把错误级别日志接入统一监控通道,可以用邮件、Webhook 或者直接挂到家庭服务器的监控面板上。
  • 设一个外部健康检查入口,周期探测服务是否存活。

我记得某次排查故障时,正是因为之前配了错误日志的 Webhook,服务在凌晨发生异常的第一时间就推到了手机上,我才能在早上起来之前就知道发生了什么,并且提前想好了修复路径。这就是日志和告警的价值。

3.4 数据备份与恢复:配置文件和状态目录都要管

很多人以为 OpenClaw 的“数据”只有界面里看到的内容。其实它的配置参数、密钥、任务历史、模型调用记录,都散落在不同的目录和存储文件里。一旦其中某个配置文件被误改、损坏或覆盖,恢复起来非常痛苦。

所以保命配置里必须有一条是备份策略。别追求过于复杂的工具,先把最简单可靠的动作做起来:

  • 定期打包 OpenClaw 的配置目录和数据目录。
  • 保留至少 7 天的备份,并至少有一个备份存放在不同磁盘或另一台机器上。
  • 在备份脚本里加入版本注释,方便出问题时快速定位。
  • 每次修改配置前,手动备份当前生效版本一次。

备份是个平时没人感谢、关键时刻能救命的配置。它不花多少资源,但能让你在误操作之后依然保持冷静。

3.5 网络隔离与暴露收敛:从物理上减少被攻击的概率

前面四条都集中在应用层,第五条则是网络层的兜底。OpenClaw 完全可以做到“只在内网访问”或“只通过受控的入口访问”,但很多部署图省事,直接把服务端口映射到公网。

收敛手段从严格到宽松排列如下:

  • 如果只有你自己用,监听地址绑定到127.0.0.1或内网 IP,公网完全不可达。
  • 如果确实需要公网访问,先走反向代理,再加一层登录认证,再用防火墙白名单限定来源 IP。
  • 服务器默认端口最好替换成非标准端口,但注意这只能增加扫描成本,不能替代认证。
  • 检查 IPv6 地址段,很多配置只堵了 IPv4,IPv6 却没做限制,反而变成开放入口。

网络层配置的目标不是“绝对安全”,而是“减少暴露面”。你不需要变成一座堡垒,但至少要让人想找到你都费劲,这样绝大多数脚本扫描就会被挡在外面。

4. 逐条配置实操:从零把 OpenClaw 一步步“穿上装备”

前面说的是思路,这一章直接进入操作。以下所有命令和配置文件以常见 Linux 部署环境为例,目录和参数名可以根据你的 OpenClaw 实际版本做对应调整。

4.1 先做身份认证:开启令牌模式

假设 OpenClaw 的启动配置放在config.yml中,先找到与访问控制相关的字段。未配置前,大概率是空值或者未开启状态。

# config.yml server: host: "0.0.0.0" # 先保持监听,稍后我们会改 port: 8080 auth: enabled: true # 打开认证开关 mode: "token" # 使用令牌模式 token: "替换成你自己的高强度随机字符串"

生成高强度随机字符串可以直接用系统命令:

# 生成一个足够长的随机令牌 openssl rand -hex 32

生成后,把它粘贴到token:后面。然后把服务的访问地址告诉你需要用到的人,令牌单独通过安全渠道发送,不要直接贴在共享文档或聊天群里。

改完配置后重启 OpenClaw:

# 重启服务,使配置生效 systemctl restart openclaw

验证是否生效很简单:直接访问地址,如果弹出了身份校验提示,或者未携带令牌的请求返回了 401,说明认证已经生效。

注意:如果 OpenClaw 支持 API 令牌,强烈建议把“界面登录”和“API 调用”使用两组不同的令牌,避免界面令牌泄露后 API 接口也跟着失守。

4.2 设置资源配额:用 Systemd 做一个坚硬外壳

在 OpenClaw 自身支持资源参数的前提下,优先在应用配置里设置。但更稳妥的兜底方式是直接在系统服务管理器层面对进程做资源限制。如果你的 OpenClaw 是通过 Systemd 托管的,那么配置文件里可以增加这样一段:

# /etc/systemd/system/openclaw.service [Service] CPUQuota=300% MemoryMax=1024M TasksMax=64 TimeoutStartSec=60 TimeoutStopSec=30

这三组参数分别限制 CPU 总使用率不超过 300%(大约三核)、内存总量不超过 1GB、线程/进程总数不超过 64 个。设置好后刷新并重启:

systemctl daemon-reload systemctl restart openclaw

如果应用层也支持并发限制,可以再配合配置:

task: max_concurrency: 4 timeout_seconds: 300 temp_dir_size_limit_mb: 1024

这里max_concurrency是同时执行的最大任务数,timeout_seconds是每个任务最长执行时间,temp_dir_size_limit_mb是临时目录的磁盘占用上限。三层限制叠加后,最坏情况下服务失控,也只是这个进程自身出问题,不会拖垮整台机器上的其他应用。

4.3 日志与告警:让服务自己会“说话”

配置日志需要解决三件事:记录、轮转、通知。

在 OpenClaw 的配置里指定日志路径:

logging: access_log: "/var/log/openclaw/access.log" error_log: "/var/log/openclaw/error.log" rotation: true rotation_size_mb: 128 rotation_keep_days: 14

如果版本不支持这个配置,可以在日志文件外部用系统自带的logrotate来控制,效果是一样的。

然后设置一个告警通道。最常见的方式是错误日志监控加 Webhook 推送。比如在 OpenClaw 配置中声明:

notifications: webhook_url: "https://example.com/hook/openclaw-error" on: ["error", "fatal", "startup_failed"] throttle: 60

这里throttle: 60表示相同类型的告警事件至少间隔 60 秒再发一次,避免服务频繁报错时轰炸你的消息通道。

没有 Webhook 可用的部署环境,最粗暴但有效的方案是写一行监控脚本,每五分钟检查一次进程状态,异常时就地写入系统级日志。重点不是用什么工具,而是“有日志、有轮转、能通知”这个铁三角必须成立。

4.4 备份与恢复:写一个能跑的备份脚本

备份的核心是“简单到你会真的用”。我用的是最基础的三行思路:打包、加时间戳、清理旧备份。

#!/bin/bash # 备份 OpenClaw 配置与数据目录 BACKUP_DIR="/backup/openclaw" DATA_DIR="/opt/openclaw" TIMESTAMP=$(date +"%Y%m%d_%H%M%S") mkdir -p ${BACKUP_DIR}/config mkdir -p ${BACKUP_DIR}/data # 备份配置 cp ${DATA_DIR}/config.yml ${BACKUP_DIR}/config/config_${TIMESTAMP}.yml # 备份数据目录(排除日志类动态文件) tar czf ${BACKUP_DIR}/data/openclaw_data_${TIMESTAMP}.tar.gz \ --exclude='*.log' \ -C ${DATA_DIR} . # 保留最近 7 天的备份文件 find ${BACKUP_DIR}/ -type f -mtime +7 -delete echo "Backup completed at $(date)" >> /var/log/openclaw-backup.log

把这个脚本放到定时任务里,每天执行一次即可:

crontab -e # 每天凌晨 2 点执行备份 0 2 * * * /usr/local/bin/backup_openclaw.sh

备份完成后,至少做一次恢复演练,别等到数据丢失才发现备份文件不可用。顺手把配置文件的“上一版”也保留一份,这个动作能解决很多改崩了配置回不去的窘境。

4.5 网络收敛:把服务从公网视野里摘下来

最后一次需要改动的是监听地址。如果 OpenClaw 只需要本机访问,直接修改监听地址:

server: host: "127.0.0.1" port: 8080

如果你住的是宿舍、办公室或家中有多设备需要访问,那就监听内网 IP,并且确保路由器和服务器防火墙不把这端口映射到公网。如果确实需要外网访问,我会先放一个反向代理在前面,比如用 Caddy 做一层简单认证再加 TLS:

example.com { reverse_proxy 127.0.0.1:8080 basic_auth { user $2a$14$xxxx # 使用 bcrypt 密码哈希 } }

反向代理层做认证的好处是,OpenClaw 本身仍然只监听本地地址,所有公网访问都先经过反向代理这层关卡。同时记得检查防火墙:

# 只允许特定 IP 访问 80/443 ufw allow from 你的IP列表 to any port 443 proto tcp ufw default deny incoming

最后重复检查一遍:监听地址是不是真的改成了内网或本机?防火墙是否真的生效?IPv6 地址段是否也同样受限?这几个问题确认完,网络收敛这件事才算做完。

5. 配置完之后的验证手段:别信配置写得好,只信实测结果

配置写完不等于万事大吉,很多隐藏问题要主动验证才会暴露。这里给你一套我常用的验证清单,每配完一项就顺手跑一遍,花不了几分钟。

5.1 认证验证

直接不带任何令牌访问 OpenClaw 的地址,预期结果是请求被拒绝或跳转到登录页。

curl -I http://127.0.0.1:8080 # 如果认证生效,应该看到 HTTP/1.1 401 Unauthorized

然后带上令牌再试一次,预期返回 200 或正常响应头。这个测试说明认证真正挡住了匿名请求。

5.2 资源限制验证

在 OpenClaw 上同时发起多个高资源消耗的请求任务,观察系统资源占用情况:

top -p $(pgrep -f openclaw)

如果配置生效,进程的内存和 CPU 应该被压在限定值附近。如果发现限制值没有生效,优先检查 Systemd 配置是否加载成功:systemctl show openclaw -p MemoryMax。

5.3 日志与告警验证

人为造一个错误,比如提交一个格式错误的任务参数,然后查看错误日志是否记录到了,再确认告警是否推送成功。配置后第一次故障如果发生在深夜,这个验证会极大降低你的焦虑值。

5.4 备份恢复演练

把备份目录中的一个压缩包解压到临时目录,确认数据文件、配置文件的目录结构完好。接着尝试在测试环境中把备份内容恢复到 OpenClaw 里,确保整个流程是真的跑通的,而不是“看着没问题”。

5.5 网络暴露面扫描

用常见端口扫描工具从外部视角对服务器做检查,确认不是在公网开放了类似8080或你的自定义端口。同时检查监听地址:

ss -tlnp | grep openclaw

如果输出里第二列是127.0.0.1:8080或内网 IP,说明服务没有直接暴露到公网接口;如果显示0.0.0.0:8080,就需要立刻回去做网络收敛。

6. 常见问题与排查技巧实录

这部分内容是我在实际部署和帮别人排障途中攒下来的。如果你照着配置走完,还是遇到问题,大概率能在这个章节里找到答案。

6.1 改了配置但没生效

OpenClaw 的配置项不一定都支持热加载。有些配置项必须在重启服务后才会生效,特别是网络监听地址、认证开关这类启动时固定的参数。如果你改了配置发现没变化,优先执行一次完整重启而不是只做部分重载。

有时候你改了配置文件,但服务启动时读的是另一个路径。可以先找到 OpenClaw 的实际工作目录和配置文件路径,确认你改的是对的那一个。

6.2 开放了公网访问但服务不稳定

公网访问下的不稳定,很多时候不是 OpenClaw 的问题,而是网络链路上的其他环节。比如反向代理的超时设置太短,长任务被中途掐断;或者防火墙错误拦截了 WebSocket 连接。

先打开错误日志看有没有 request timeout、connection reset 这类记录。排查方向要根据日志里的线索走,别在配置里盲猜。

6.3 内存限制设太严导致任务频繁失败

资源限制会保护主机,但限制过死就会变成服务的另一种故障来源。我见过有人把内存限制直接设在正常任务的 1.2 倍,稍微有点波动就被杀掉,反而导致任务反复重启。

调这类参数的思路是:先不限制,跑完一轮正常任务,记录峰值资源,再以峰值的 2 到 3 倍作为限制值。如果任务队列很长,可以同时设一个较短的超时限制,防止单个任务无限贪婪占用资源。

6.4 日志文件迅速增大

日志轮转如果没配好,Access Log 在异常探测下会膨胀得很快。解决方法是启用轮转,并设置单文件大小上限。如果日志还包含大量调试级别的输出,记得把日志等级切回到 info 或者 error,不然正常运行时也会产生海量无效日志。

6.5 备份文件占用空间不可控

备份保留天数越多越安全,但磁盘占用也会越大。可以在备份策略里只保留最近 7 天到 14 天的数据,并且对备份目录单独设置磁盘配额。如果数据本身不大,也可以只备份配置文件,减少压缩包体积。

7. 个人实操体会:这 5 条配置的顺序,不要乱

最后聊一点我真实的操作习惯。这 5 条配置虽然最终要全部落地,但我自己的执行顺序是固定的:先认证,再网络收敛,然后资源限制,之后日志告警,最后备份。

这个顺序基于一个考虑:认证和网络收敛决定了“能不能被轻易碰到”,资源限制决定了“碰到之后能不能拖垮我”,日志和备份则保证“出事后能不能快速恢复”。优先级从外到内,先把最便宜的防线筑好。

配完之后,我还习惯把整套配置保存一份独立的文档,放在 OpenClaw 服务目录旁边。这样即使某天服务器重新部署,或者换了一台新设备,也能照着清单快速恢复环境。总比事到临头再回忆当时是怎么配的要靠谱得多。

我不是在告诉你 OpenClaw 一定不安全。它是开源工具,社区也在不断改进安全能力。但默认配置永远是面向“第一次运行体验”的,它不会替你把所有场景都考虑进去。真正让服务稳定的,不是某一个复杂的特性,而是这些看起来不起眼的基础配置扎扎实实到位。希望你的 OpenClaw 不会再以“裸奔”的状态暴露在互联网上。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进