部署前置检查(Node 版本 / 权限模型)
先消除「能跑」与「该跑」之间的差:OpenClaw 依赖的 Node 小版本底线以官方文档为准(常见要求不低于 22.16,团队宜统一 LTS 如 24 线)。在远程 Mac 上执行 node -v 与 which node,确认 launchd、交互式 shell、CI 任务三者指向同一二进制,避免一条流水线用 brew、另一条用 nvm。
权限模型:网关进程不要用日常登录用户的大权限账户;为自动化单独建用户或至少独立 ~/Library/LaunchAgents 任务,文件系统用最小读写目录(工作区、缓存、日志分离)。需要监听低端口时优先用反代降权,而不是给 Node sudo。
id && groups
launchctl print gui/$(id -u)/com.example.openclaw-gateway 2>/dev/null || echo "检查 plist Label 是否已加载"
网关令牌与访问控制配置步骤
管理面与数据面拆开:HTTP 网关默认倾向绑定 127.0.0.1,对外访问用 ssh -L 8443:127.0.0.1:8443 user@remote-mac 或带 mTLS 的反向代理。在 openclaw.json(或你团队约定的等价配置)中显式打开鉴权:为管理 API 设置高强度随机 Token(长度与熵按内部标准),请求头使用 Authorization: Bearer <token> 一类模式;若上游支持,叠加 IP 允许列表或 Unix socket 仅本机。
- 用
openssl rand -hex 32生成密钥,写入仅服务用户可读的文件。 - 在 launchd
EnvironmentVariables注入OPENCLAW_GATEWAY_TOKEN(名称以你实际软件为准),禁止提交到 Git。 - 用
curl -sS -H "Authorization: Bearer $TOKEN" http://127.0.0.1:<port>/health验证鉴权路径。 - CI 使用短时 Token 或 OIDC 签发;流水线日志开启脱敏,grep 构建输出确认无泄露。
出站域名白名单 / 代理策略清单
Agent 类进程一旦被提示词或技能劫持,最大风险是任意出站。在远程 Mac 上把策略落在三层:进程环境、主机防火墙、上游代理 ACL。环境变量层统一 HTTPS_PROXY / HTTP_PROXY,并用 NO_PROXY 精确放行内网注册表与元数据服务,避免循环代理。
| 类别 | 示例域/模式(按实际替换) | 说明 |
|---|---|---|
| 模型 API | *.openai.com、自建推理域名 |
仅允许业务需要的终端 |
| 包与技能源 | registry.npmjs.org、Git 托管、ClawHub |
与 lockfile 源一致,防依赖投毒扩散面 |
| 容器镜像 | 内部 Harbor / ECR 终端 | 直连走内网,不经过公网代理 |
| 默认 | 其余域名 | 拒绝或需工单加白 |
验证命令:curl -I --max-time 5 https://允许域 与对拒绝域预期失败;若在 Mac 启用 pf,用 sudo pfctl -sr 核对规则是否加载。
日志审计与告警阈值
把网关访问日志落到独立文件(或转发到集中日志),字段至少含时间、客户端 IP、路径、状态码、Token 指纹(哈希前缀即可)。建议阈值:同一 IP 一分钟内 401 超过 20 次触发告警(暴力猜 Token);单 Token 5xx 连续上升联动上游健康检查;出站代理出现大量 CONNECT 到非白名单主机名时升级为高危。
log show --style syslog --last 30m --predicate 'eventMessage CONTAINS "openclaw"' | tail -n 50
与 sshd、sudo 日志关联,可快速区分「外部扫描」与「内部误配」。
常见报错定位(端口、TLS、权限)
| 现象 | 优先排查 | 命令 / 动作 |
|---|---|---|
| Connection refused | 进程未起或只监听回环 | lsof -iTCP -sTCP:LISTEN -n -P | grep <port> |
| Address already in use | 旧进程或重复 launchd 任务 | launchctl list | grep -i openclaw;必要时卸载重复 Label |
| certificate verify failed | 企业 CA、代理 MITM | curl -vk https://目标;配置 NODE_EXTRA_CA_CERTS |
| EACCES / EPERM | 目录属主或 SIP 路径 | ls -la 工作区;避免往系统目录写缓存 |
| 401 Unauthorized | Token 未带或轮换不同步 | 对 curl 加 -H 重试;核对 launchd 环境是否注入 |
安装与运行态自检可继续用 openclaw doctor / openclaw status(以你安装的 CLI 为准),与本文网关项交叉验证。
上线前安全检查表
- 网关未对公网裸奔:127.0.0.1 或内网 + 隧道/反代。
- 鉴权令牌已启用,CI 与本地使用不同凭据,仓库与镜像层无明文。
- 出站白名单已在代理或防火墙层生效,并有一次「拒绝域」探测截图或日志。
- 审计日志路径、轮转与告警收件人已配置;401 风暴规则已开。
- TLS 全链路验证通过;企业 CA 已分发到运行用户。
- 回滚方案:旧 Token 保留窗口、plist 备份、端口与反代配置版本化。
安全 FAQ
OpenClaw 网关为什么不建议无鉴权监听 0.0.0.0?
远程 Mac 常在公网或共享网段暴露,全网卡监听会被批量扫描命中;应绑定回环或内网,并强制 Token 或 mTLS,对外只走 SSH 转发或受控反代。
出站白名单最少要列哪些?
模型 API、npm/Git/技能源、镜像仓库、身份与密钥类域名;其余默认拒绝或走审批加白。
令牌怎么轮换不影响 CI?
双写新旧 Token、观察审计里 401 比例,再下线旧值;流水线凭据用密钥管理或短时签发。
总结与选型引导
先加固网关,再扩技能与自动化
MacPull 提供 Apple Silicon 远程 Mac,适合与 SSH、launchd、CI 共存;帮助中心与定价免登录可查,确认节点与网络后再购买。