摘要:本文详细讲解 OpenClaw Control UI 的完整配置方法,涵盖 11 个核心参数详解、3 种场景配置方案、安全**实践和常见问题排查。无论你是新手入门还是老手优化,都能找到对应的解决方案。
关键词:OpenClaw、Control UI、配置教程、安全加固、局域网访问
OpenClaw 作为一款强大的 AI 助手框架,其 Control UI 是用户与系统交互的核心入口。很多同学在部署时遇到了这些问题:
- ❌ 配置参数太多,不知道每个参数的含义
- ❌ 局域网访问配置不好,其他设备连不上
- ❌ 担心安全问题,但不知道如何加固
- ❌ 遇到报错不知道如何排查
本文基于实际生产环境配置,手把手教你完成 OpenClaw Control UI 的完整配置。
根据你的使用场景,选择合适的配置方案:
bind: loopback 🔒 高 家庭局域网多设备
bind: lan + 白名单 ⚠️ 中 公网远程访问
bind: lan + HTTPS + 强 Token ⚠️⚠️ 低 (需额外防护) 生产环境
bind: lan + HTTPS + 速率限制 🔒 高
3.1 家庭局域网访问配置(推荐大多数用户)
{ “gateway”: {
"mode": "local", "auth": { "mode": "token", "token": "你的安全 Token (至少 32 位随机字符)" }, "port": 18789, "bind": "lan", "tailscale": , "controlUi": { "allowInsecureAuth": true, "dangerouslyDisableDeviceAuth": true, "dangerouslyAllowHostHeaderOriginFallback": true, "allowedOrigins": [ "http://localhost:18789", "http://127.0.0.1:18789", "http://192.168.1.x:18789" ] }
} }
3.2 最简本地配置(新手推荐)
{ “gateway”: {
"mode": "local", "auth": { "mode": "token", "token": "随机生成的安全 Token" }, "port": 18789, "bind": "loopback", "controlUi": { "allowInsecureAuth": false, "dangerouslyDisableDeviceAuth": false }
} }
3.3 公网访问配置(高级用户)
{ “gateway”: {
"mode": "local", "auth": { "mode": "token", "token": "极强 Token (64 位+)", "rateLimit": { "maxAttempts": 10, "windowMs": 60000, "lockoutMs": } }, "port": 18789, "bind": "lan", "controlUi": { "allowInsecureAuth": false, "dangerouslyDisableDeviceAuth": false, "allowedOrigins": [ "https://your-domain.com" ] }
} }
4.1 gateway.mode
含义:Gateway 运行模式
可选值:
local(推荐):本地模式,所有服务运行在同一台机器remote:远程模式,Gateway 和 Agents 分离部署
建议:99% 用户使用 local 即可,除非有分布式部署需求
4.2 gateway.auth.mode
含义:认证方式
可选值:
token(推荐):Token 认证,简单高效password:密码认证(不推荐)none:无认证(⚠️ 极度危险,仅限内网测试)
建议:始终使用 token 模式
4.3 gateway.auth.token
含义:认证 Token,用于 Control UI 和 API 访问的身份验证
安全要求:
- ✅ 最少 32 位随机字符
- ✅ 包含大小写字母、数字、特殊符号
- ✅ 定期更换(建议每 90 天)
- ❌ 不要使用有意义的单词或短语
- ❌ 不要在不同服务间复用 Token
生成安全 Token 的方法:
# 方法 1:使用 openssl openssl rand -hex 32
# 方法 2:使用 /dev/urandom cat /dev/urandom | tr -dc ‘a-zA-Z0-9!@#$%^&*’ | fold -w 64 | head -n 1
# 方法 3:使用 node node -e “console.log(require(‘crypto’).randomBytes(32).toString(‘hex’))”
⚠️ 警告:
- Token 泄露 = 完全控制权丢失
- 不要提交到 Git
- 不要在公开场合展示完整 Token
4.4 gateway.port
含义:Gateway 监听端口
默认值:18789
可选范围:1024-65535(1024 以下需要 root 权限)
建议:
- 使用默认端口 18789(OpenClaw 标准端口)
- 如冲突可改为 18790、18888 等
- 修改后需同步更新防火墙规则
4.5 gateway.bind
含义:网络绑定地址,决定哪些设备可以访问 Gateway
可选值:
loopback(最安全):仅允许本机访问(127.0.0.1)lan(常用):允许局域网访问(0.0.0.0)any:允许所有网络接口(⚠️ 危险)- 具体 IP:如
“192.168.1.100”仅绑定指定网卡
安全对比:
loopback 仅本机 🔒🔒🔒 单机使用
lan 局域网设备 🔒🔒 家庭/办公室多设备
any 任意网络(含公网) ⚠️ 不推荐
⚠️ 重要:使用 lan 时,必须配合 allowedOrigins 白名单!
4.6 gateway.tailscale.mode
含义:Tailscale 组网模式,用于安全的远程访问
可选值:
off:关闭 Tailscaleon:启用 Tailscale 组网
建议:
- 如需公网访问,推荐使用 Tailscale 而非直接暴露端口
- Tailscale 提供加密隧道,比直接暴露更安全
4.7 gateway.controlUi.allowInsecureAuth
含义:是否允许非 HTTPS 环境下的认证
可选值:true / false
⚠️ 安全风险:
true:允许 HTTP 明文传输 Token,局域网内可能被嗅探false:强制要求 HTTPS,更安全但需要配置证书
何时使用 true:
- ✅ 可信局域网环境(家庭网络)
- ✅ 临时调试
- ✅ 已通过 Tailscale 等加密隧道保护
何时必须 false:
- ❌ 公网直接暴露
- ❌ 不可信网络(咖啡厅、机场 Wi-Fi)
- ❌ 生产环境
4.8 gateway.controlUi.dangerouslyDisableDeviceAuth
含义:是否禁用设备身份验证
可选值:true / false
⚠️ 安全风险(CRITICAL) :
true:任何知道 Token 的设备都可以连接,无设备指纹验证false:需要设备首次配对,生成设备证书
为什么叫 “dangerously” :
- 这个参数名字里有
dangerously是有原因的 - 禁用后,Token 泄露 = 完全沦陷
- 启用设备认证后,即使 Token 泄露,攻击者也需要物理设备指纹
4.9 gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback
含义:是否允许通过 Host header 进行 Origin 验证回退
可选值:true / false
⚠️ 安全风险(CRITICAL) :
true:降低 DNS 重绑定攻击防护false:严格验证 Origin header
什么是 DNS 重绑定攻击:
- 攻击者诱导用户访问恶意网站
- 恶意网站通过 DNS 重绑定指向内网 IP
- 利用浏览器信任发起对内网服务的请求
- 如果 Host header 验证不严,攻击可能成功
4.10 gateway.controlUi.allowedOrigins
含义:允许访问 Control UI 的来源地址白名单
配置示例:
“allowedOrigins”: [ “http://localhost:18789";, ”http://127.0.0.1:18789";, “http://192.168.1.x:18789"; ]
如何配置:
- 确定需要访问的设备 IP:
# Windows ipconfig # macOS/Linux ifconfig - 添加到白名单:
”allowedOrigins“: [ ”http://localhost:18789";, “http://127.0.0.1:18789";, ”http://192.168.1.x:18789"; ] - 重启 Gateway:
openclaw gateway restart
4.11 gateway.auth.rateLimit(建议配置)
含义:认证速率限制,防止暴力激活成功教程
推荐配置:
“rateLimit”: { “maxAttempts”: 10, “windowMs”: 60000, “lockoutMs”: }
效果:
- 1 分钟内最多尝试 10 次认证
- 超过后锁定 5 分钟
- 有效防止暴力激活成功教程
步骤 1:备份原配置
cp ~/.openclaw/openclaw.json ~/.openclaw/openclaw.json.backup
步骤 2:编辑配置文件
nano ~/.openclaw/openclaw.json
步骤 3:生成安全 Token
node -e “console.log(require(‘crypto’).randomBytes(32).toString(‘hex’))”
步骤 4:配置防火墙
# Ubuntu/Debian sudo ufw allow 18789/tcp
# CentOS/RHEL sudo firewall-cmd –add-port=18789/tcp –permanent sudo firewall-cmd –reload
步骤 5:重启 Gateway
openclaw gateway restart
步骤 6:验证配置
openclaw status netstat -tlnp | grep 18789 curl http://127.0.0.1:18789
步骤 7:访问 Control UI
浏览器打开:http://localhost:18789 或 http://192.168.1.x:18789
必须做的(Must Have)
- 使用强 Token:至少 32 位随机字符
- 配置 allowedOrigins 白名单:只添加需要的 IP
- 启用速率限制:防止暴力激活成功教程
- 保护配置文件:
chmod 600 ~/.openclaw/openclaw.json
推荐做的(Should Have)
- 启用设备认证:设置
dangerouslyDisableDeviceAuth: false - 使用 HTTPS:配置 SSL 证书
- 使用 Tailscale:替代直接暴露端口
- 定期安全审计:
openclaw status –deep
不要做的(Never Do)
❌ 使用弱 Token(如 、admin)
❌ 将 openclaw.json 提交到 Git
❌ 在公开场合展示完整配置
❌ 使用 bind: any
❌ 在生产环境使用 dangerously 系列配置
❌ 配置 allowedOrigins: [“”]
Q1:无法从其他设备访问 Control UI
排查步骤:
# 1. 检查 bind 配置 cat ~/.openclaw/openclaw.json | grep ‘“bind”’
# 2. 检查端口监听 netstat -tlnp | grep 18789
# 3. 检查防火墙 sudo ufw status | grep 18789
# 4. 检查 allowedOrigins cat ~/.openclaw/openclaw.json | grep -A 5 ‘“allowedOrigins”’
解决方案:设置 “bind”: “lan”、开放防火墙端口、添加访问设备 IP 到白名单、重启 Gateway
Q2:提示 “Origin not allowed”
原因:访问地址不在 allowedOrigins 白名单中
解决方案:将访问地址添加到白名单后重启 Gateway
Q3:Token 认证失败
常见错误:
- Token 复制不完整
- Token 前后有空格
- JSON 格式错误(缺少引号或逗号)
Q4:安全审计显示 CRITICAL 警告
解决方案:
“dangerouslyAllowHostHeaderOriginFallback”: false “dangerouslyDisableDeviceAuth”: false
Q5:重启 Gateway 后配置不生效
常见原因:
- 配置文件未保存
- 编辑了错误的文件
- Gateway 未成功重启
- JSON 格式错误导致配置加载失败
完成配置后,逐项检查:
-
bind配置符合使用场景 -
allowedOrigins包含所有需要访问的 IP - 配置了
rateLimit速率限制 -
dangerously*系列配置已评估风险
- OpenClaw 官方文档
- GitHub 仓库
- Discord 社区
- Tailscale 官方文档
关于作者:OpenClaw 深度用户,专注于 AI 助手框架的安全部署与优化实践。
版权声明:本文为原创技术文章,转载请注明出处。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/258332.html