参考:基于 OpenClaw 官方文档 (https://docs.openclaw.ai/gateway/security)并参考 1Panel 安全最佳实践 (https://1panel.cn/docs/);
适用版本:OpenClaw 2026.4.15+ | 1Panel v2+
1. 服务器层安全
服务器层安全属于系统基础安全。
1.1 用户与权限
建一个专门跑 OpenClaw 的隔离用户,给配置文件上锁,谁都不能偷看 / 篡改,整套操作就是为了安全、隔离、保护密钥。
# 创建专用用户运行 OpenClaw:不跟你平时用的管理员用户混在一起,专门用来跑 OpenClaw,更安全、更干净。
sudo useradd -m -s /bin/bash openclaw
# 把这个用户加入 docker 用户组:让它能正常调用 Docker,不用每次都输密码、不用最高权限。
sudo usermod -aG docker openclaw
# 设置严格的文件权限
# 只允许 openclaw 用户自己访问配置目录,其他用户 / 程序都看不了、改不了。
sudo chmod 700 /home/openclaw/.openclaw
# 配置文件权限设为最高级私密(600),里面存的 API Key、令牌、密码只有它自己能读。
sudo chmod 600 /home/openclaw/.openclaw/openclaw.json
# 把整个目录的所有者改成 openclaw,确保权限不混乱
sudo chown -R openclaw:openclaw /home/openclaw/.openclaw1.2 SSH 安全加固
锁死 SSH 入口,只允许你用密钥、用指定用户、非默认端口登录,服务器会安全很多。
改之前一定要先配置好密钥,否则禁用密码后你会直接把自己锁在服务器外面
# 编辑 /etc/ssh/sshd_config
Port 2222 # 将SSH默认端口22改为2222
PermitRootLogin no # 禁止直接用 root(最高管理员)账号登录 SSH,非常关键的安全项
PasswordAuthentication no # 关闭密码登录,只能用密钥登录,基本杜绝暴力猜密码破解。
PubkeyAuthentication yes # 开启 SSH 密钥登录,你本地电脑持有私钥才能连上服务器。
AllowUsers openclaw # 只允许 openclaw 这个用户登录 SSH,其他用户一律拒绝。
MaxAuthTries 3 # 最多输错 3 次密钥 / 认证就断开,防止反复试错。
ClientAliveInterval 300 # 空闲 300 秒(5 分钟)没操作就自动断开连接。
ClientAliveCountMax 2 # 超时检查次数,配合上面一起用,避免僵尸连接占着资源。
# 重启 SSH 服务让上面所有安全配置生效
sudo systemctl restart sshd
1.3 系统更新
先手动更新一次系统,并开启自动安全补丁,让服务器自己保持安全、不落后,减少被入侵的风险。
# 定期更新系统:先刷新软件源列表,知道哪些包有新版本,然后自动升级所有系统软件和安全补丁
sudo apt update && sudo apt upgrade -y
# 启用自动安全更新:安装一个系统自带的自动安全更新工具,运行配置命令,开启自动安装安全更新,以后系统会自动在后台打安全补丁,不用你手动跑更新
sudo apt install unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades基于以上系统自动安全补丁更新+ SSH 加固 + OpenClaw 专用用户,这就是一套小型服务器安全基础套餐。
2. 1Panel 面板安全
2.1 面板访问安全
修改默认端口:
# 在 1Panel 设置中修改面板端口
# 默认 8080 → 改为随机高位端口(如 18789)
限制访问 IP:
# 在 1Panel 防火墙中设置
允许 IP:你的固定 IP
拒绝 IP:0.0.0.0/0(其他所有)
启用双因素认证 (2FA):
# 在 1Panel 设置 → 安全 中启用 TOTP
# 使用 Google Authenticator 或 Authy
2.2 1Panel 安全配置
2.3 使用 1Panel 管理 OpenClaw
通过 1Panel 安装 OpenClaw:
登录 1Panel 面板
进入 应用商店 → 搜索 OpenClaw 或者直接进入AI / 智能体管理中配置模型添加 OpenClaw
点击安装,选择版本和配置
配置持久化存储和数据卷
1Panel 容器管理优势:
✅ 隔离运行,最小化漏洞暴露
✅ 一键备份/恢复
✅ 资源限制(CPU/内存)
✅ 日志集中管理
3. OpenClaw Gateway 安全
3.1 Web UI 认证配置
给 OpenClaw 网关设置一个「超级密钥 / 门禁密码」只有持有这个密钥的程序 / 界面,才能连接、控制、调用你的 OpenClaw 服务。
基于命令行生成强 Token:
openclaw doctor --generate-gateway-token在 openclaw.json 中完成推荐配置:
{
"gateway": {
"port": 18789,
"mode": "local",
"bind": "loopback",
"auth": {
"mode": "token",
"token": "${OPENCLAW_GATEWAY_TOKEN}"
},
"tailscale": {
"mode": "off"
}
}
}
环境变量存储(推荐):
# /home/openclaw/.openclaw/secrets.env
OPENCLAW_GATEWAY_TOKEN=你的超长随机 Token这就是 OpenClaw 的「总门禁卡」,谁拿到这个 Token,谁就能控制你的服务。所以必须存在 secrets.env 里,并且严格保密。
3.2 DM 私聊控制
在 OpenClaw 的配置文件 openclaw.json 完成渠道的私聊策略安全基线配置,用来防止陌生人乱聊、防止会话混乱、严格控制谁能跟机器人说话。
{
"session": {
"dmScope": "per-channel-peer" # # 会话隔离:每个【平台 + 用户】独立会话 即:WhatsApp 的聊天记录不会串到 Discord,A 用户看不到 B 用户的对话
},
"channels": {
"whatsapp": {
"dmPolicy": "pairing", # WhatsApp 私聊策略:必须配对(绑定)后才能私聊
"allowFrom": ["user_id_1", "user_id_2"] # 白名单:只有这两个用户能和机器人对话,其他人发消息直接无视
},
"discord": {
"dmPolicy": "allowlist", # Discord 私聊策略:仅白名单用户可聊
"allowFrom": ["user_id_1"] # 只有 user_id_1 能私聊机器人
}
}
}
DM 策略对比:
3.3 Tools 工具策略
以下下ToolS工具的最小权限配置为例介绍,通过 Tools 工具的最小权限策略配置,把 Agent 的权限锁到最严,只允许聊天发消息,禁止一切危险操作,绝对安全。具体情况可以根据实际需求调整。
最小权限配置,纯聊天模式(messaging)
纯聊天模式,最安全,仅开放通信工具。
{
"tools": {
"profile": "messaging", # 工具模式:纯聊天/发消息(最安全)
"deny": [ # 明确禁止以下所有危险功能
"gateway", # 禁止操作网关
"cron", # 禁止定时任务
"sessions_spawn", # 禁止创建新会话
"sessions_send", # 禁止主动发消息
"group:automation", # 禁止所有自动化功能
"group:runtime", # 禁止运行时修改
"group:fs" # 禁止文件系统操作
],
"fs": {
"workspaceOnly": true # 就算读文件,也只能读自己的工作区,不能读系统
},
"exec": {
"security": "deny", # 完全禁止执行系统命令(最高安全!)
"ask": "always" # 就算要执行,也必须每次都人工确认
},
"elevated": {
"enabled": false # 彻底关闭高权限/管理员模式
}
}
}
自己/少量信任用户使用默认模式(default模式)
默认模式(default模式)默认模式,开放基础工具,适合私人使用。
{
"tools": {
"profile": "default", # 默认模式,开放基础工具
"deny": [ # 禁止核心高危工具
"gateway", # 禁止操作网关
"group:runtime", # 禁止修改运行时配置
"exec" # 禁止执行系统命令
],
"allow": [ # 开放常用便捷功能
"cron", # 允许定时任务(如定时提醒)
"sessions_spawn", # 允许创建新会话
"sessions_send" # 允许主动发消息(如推送通知)
],
"fs": {
"workspaceOnly": true, # 仅允许访问自身工作区文件
"allowRead": ["*.md", "*.txt"] # 允许读取工作区的文档文件
},
"elevated": {
"enabled": false # 仍关闭高权限模式
}
}
}测试环境使用调试模式 (debug模式)
debug 调试模式,开放所有工具,仅用于测试。
{
"tools": {
"profile": "debug", # 调试模式,开放更多工具
"deny": [], # 临时不禁止任何工具(调试专用)
"fs": {
"workspaceOnly": false, # 允许访问非工作区文件(调试需读取系统文件)
"allowRead": ["*"],
"allowWrite": ["*.json"] # 允许修改配置文件(调试配置)
},
"exec": {
"security": "ask", # 执行系统命令需人工确认
"ask": "always"
},
"elevated": {
"enabled": true # 临时开启高权限(调试需修改核心配置)
}
}
}工具权限安全分级:
工具权限配置的核心是「按需开放、从严管控」:公开部署优先选择场景1的「纯聊天模式」,锁死所有高危权限;私人使用可选择场景2,兼顾便捷与安全;测试环境临时使用场景3,测试完成后立即切换。始终遵循最小权限原则,避免因权限过高导致安全风险,保障 OpenClaw 服务稳定、安全运行。
3.4 sandbox 沙盒配置
可以通过为每个 agent 配置 sandbox 沙盒,进行 agent 独立的权限配置,其中mode(沙箱如何时生效)、scope(容器怎么隔离)、以及workspaceAccess(主机文件权限)配置参数以及事例说明如下:
3.4.1 沙箱配置参数
mode(沙箱何时生效)
off:完全关闭沙箱(不安全,仅本地调试)non-main:仅非主会话进沙箱(推荐日常)all:所有会话都进沙箱(最高安全)
scope(容器怎么隔离)
agent:每个代理一个容器(默认)session:每个会话一个容器(最安全)shared:所有会话共享一个容器(不推荐)
workspaceAccess(主机文件权限)
none:完全看不到主机工作区(最安全)ro:只读挂载主机工作区(常用)rw:可读写(高危,仅信任环境)
3.4.2 沙箱示例配置
示例1 :公共 / 匿名代理(你原来的配置 → 标准安全版),适用:对外公开、游客、匿名用户
{
"agents": {
"list": [{
"id": "public", # 代理ID,公共/匿名/游客代理,最低权限默认身份
"sandbox": {
"mode": "all", # 启用完整沙箱隔离,所有操作受限
"scope": "agent", # 沙箱作用域仅限当前代理,独立隔离
"workspaceAccess": "ro" # 工作区仅只读权限,禁止修改/删除
},
"tools": {
"allow": ["read"], # 仅允许使用读取工具,查看文件/内容
"deny": ["write", "edit", "exec", "browser"] # 禁止写入、编辑、执行命令、浏览器/联网
}
}]
}
}例子 2:个人主代理(无沙箱 + 完整权限)适用:你自己用、信任环境、日常开发
{
"agents": {
"list": [
{
"id": "main", # 个人主代理
"default": true, # 默认代理
"sandbox": {
"mode": "off", # 关闭沙箱(直接在主机跑)
"scope": "agent",
"workspaceAccess": "rw" # 可读写主机文件
},
"tools": {
"allow": ["*"], # 允许所有工具
"deny": []
}
}
]
}
}例子 3:生产 / 服务器最高安全(完全隔离)适用:公网部署、严格安全、不信任输入
{
"agents": {
"defaults": { # 全局默认(所有代理继承)
"sandbox": {
"mode": "all", # 全会话沙箱
"scope": "session", # 每会话独立容器
"workspaceAccess": "none", # 完全看不到主机文件
"docker": { # Docker 加固
"network": "none", # 【无网络】
"readonlyRootfs": true, # 容器根文件只读
"memory": 256m, # 内存限制
"capabilities": {"drop": ["ALL"]} # 删所有系统权限
}
}
},
"list": [
{
"id": "server-bot",
"tools": {
"allow": ["read"],
"deny": ["*"] # 禁止除read外一切
}
}
]
}
}例子 4:调试模式(临时开放权限),适用:你在调试、要写文件、执行命令
{
"agents": {
"list": [
{
"id": "debug",
"sandbox": {
"mode": "all",
"scope": "agent",
"workspaceAccess": "rw", # 读写工作区
"docker": {
"network": "host" # 共享主机网络(可联网)
}
},
"tools": {
"profile": "debug", # 调试配置(开放更多工具)
"allow": ["read","write","exec","browser"],
"deny": []
}
}
]
}
}4. Docker 容器安全
使用 1Panel 创建 OpenClaw 时,通过可视化页面设置最终实现了通过 Linux 最佳安全实践来创建,如下图所示:

其中通过高级点击查看 compose 文件参见如下,这是 1Panel 面板专用的 OpenClaw 部署配置,适用于稳定运行、端口映射、数据持久化、健康检查。
services:
openclaw:
container_name: ${CONTAINER_NAME} # 容器名(从环境变量读取,1Panel自动生成)
image: 1panel/openclaw:2026.4.14 # 1Panel封装的OpenClaw镜像(根据用户选择获取版本)
restart: unless-stopped # 容器退出自动重启(除手动停止)
networks:
- 1panel-network # 加入1Panel面板的独立网络
environment:
HOME: /home/node # 容器内用户主目录
TERM: xterm-256color # 终端配色支持
volumes: # 目录挂载(主机 ↔ 容器)
- ./data/conf:/home/node/.openclaw # 配置文件持久化(你的sandbox配置就在这里)
- ./data/workspace:/home/node/.openclaw/workspace # AI工作区文件
- /etc/localtime:/etc/localtime # 同步主机时间
ports:
- ${PANEL_APP_PORT_HTTP}:18789 # 端口映射:主机端口 → 容器18789端口
init: true # 让容器进程管理更稳定(防止僵尸进程)
healthcheck: # 健康检查:自动检测服务是否正常
test:
[
"CMD",
"node",
"-e",
"fetch('http://127.0.0.1:18789/healthz').then((r)=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"
]
interval: 3m # 每3分钟检查一次
timeout: 10s # 检查超时10秒
start_period: 15s # 启动15秒后开始检查
retries: 3 # 失败重试3次
labels:
createdBy: "Apps" # 1Panel面板标记:标识是应用创建的
networks:
1panel-network: # 1Panel默认网络
external: true # 网络已存在,由面板创建5. 网络与防火墙
5.1 1Panel 防火墙配置
通过 1Panel 配置防火墙:1Panel 集成了两种广泛使用的 Linux 防火墙软件:Firewalld 和 UFW。
RedHat/CentOS 使用的是 Firewall 防火墙
Debian/Ubuntu使用的是 UFW 防火墙
1、登录 1Panel → 系统 → 防火墙

2、示例规则:
拒绝所有其他入站流量。
5.2 安全组
如果是云服务器,可以通过云服务器设置安全组规则,指定端口访问即可。
5.3 Tailscale 远程访问(可选)
1、为什么要用 Tailscale?
传统方式的痛点:
❌ 需要开放公网端口(不安全)
❌ 需要配置防火墙/安全组
❌ 容易被扫描和攻击
❌ 需要公网 IP
Tailscale 的优势:
✅ 不需要开放任何公网端口
✅ 流量全程加密(P2P 隧道)
✅ 只有你的设备能访问
✅ 没有公网 IP 也能用
✅ 免费版支持 100 台设备
2、安装 Tailscale
步骤一:SSH 登录你的云服务器,执行:
# 一键安装脚本
curl -fsSL https://tailscale.com/install.sh | sh
# 等待安装完成(约 1-2 分钟)步骤二:登录并授权
# 启动 Tailscale,会显示一个登录链接
tailscale up --force-reauth步骤三:查看 Tailscale IP
# 查看分配到的 Tailscale IP
tailscale ip输出:100.11.111.222
步骤四:修改 OpenClaw 配置
编辑配置文件:
nano /root/.openclaw/openclaw.jsonOpenClaw 推荐配置:
{
"gateway": {
"port": 18788,
"mode": "local",
"bind": "lan",
"controlUi": {
"allowedOrigins": [
"http://127.0.0.1:18788",
"http://localhost:18788",
"http://100.11.111.222:18788"
]
},
"auth": {
"mode": "token",
"token": "你的令牌"
},
"tailscale": {
"mode": "off"
}
}
}
优势:
✅ 无需暴露公网 IP
✅ 端到端加密
✅ 细粒度访问控制
避免使用 Funnel 模式(公开暴露)。
6. SSL/TLS 证书管理
6.1 使用 1Panel 管理证书
通过 1Panel 创建网站,申请证书:
登录 1Panel → 网站 → 部署 OpenRestry → 创建反向代理
提前准备好域名账号并完成证书申请。

6.2 证书自动续期
1Panel 自动续期:
1Panel 会自动续期证书
确保证书过期前 30 天收到通知

7. Skills 与插件安全
7.1 技能扫描
使用安全加固技能:
cd /home/openclaw/.openclaw/workspace/skills/openclaw-security-hardening
# 扫描所有技能
./scripts/scan-skills.sh
# 安装前检查
./scripts/install-guard.sh /path/to/new-skill/
检测内容:
🔴 Prompt 注入模式
🔴 数据外泄尝试
🟡 可疑 URL
🟡 Base64 编码内容
🟡 隐藏 Unicode 字符
7.2 完整性检查
# 初始化基线
./scripts/integrity-check.sh --init
# 定期检查
./scripts/integrity-check.sh
# 添加到 Cron(每周一次)
0 8 * * 1 /home/openclaw/.openclaw/workspace/skills/openclaw-security-hardening/scripts/integrity-check.sh
7.3 插件管理
仅允许必要插件:
{
"plugins": {
"allow": [
"feishu",
"qqbot",
"brave",
"memory-core",
"browser"
]
}
}
禁用未使用插件:
{
"plugins": {
"entries": {
"unused-plugin": {
"enabled": false
}
}
}
}
8. 凭证与密钥管理
8.1 凭证存储位置
OpenClaw 所有敏感密钥 / 令牌 存在哪里、文件权限必须是什么具体参见下表所示:所有 OpenClaw 密钥文件,必须设为 600 权限,不能泄露、不能共享、不能公开展示。
1. Gateway Token(网关令牌)
作用:登录 OpenClaw 控制台、远程控制的核心密钥
存储位置:
secrets.env文件 或 系统环境变量权限要求:
600→ 仅文件所有者可读写,其他用户完全不能读 / 写(Linux/macOS 安全标准)
2. 通道 Token(渠道令牌,如微信 / 钉钉 / 网页等)
作用:第三方渠道(消息通道)的连接凭证
存储位置:
channels.*.tokenFile配置指向的文件权限要求:
600
3. 模型 API Key(大模型密钥,如 DeepSeek / 通义千问)
作用:调用 AI 模型的密钥
存储位置:
auth-profiles.json权限要求:
600
4. 配对白名单(允许访问的设备 / 用户列表)
作用:记录哪些 Tailscale 设备 / 用户可以连接 OpenClaw
存储位置:
credentials/<channel>-allowFrom.json权限要求:
600
8.2 使用 SecretRef (密钥引用)
SecretRef简单点说是:不把明文密钥写在配置里,而是用变量引用 → 从环境变量 / 专用密钥文件读取。
推荐方式:
{
"secrets": {
"providers": {
"env": {
"enabled": true
},
"file": {
"enabled": true,
"path": "/home/openclaw/.openclaw/secrets.json"
}
}
},
"gateway": {
"auth": {
"token": "${OPENCLAW_GATEWAY_TOKEN}"
}
}
}
避免硬编码:
{
"gateway": {
"auth": {
"token": "明文 Token" // ❌ 不要这样做
}
}
}
配置文件容易被备份、泄露、上传到 GitHub
密钥一泄露,整个 OpenClaw 就会被完全控制
8.3 凭证轮换
定期轮换清单:
Gateway Token(每 90 天)
通道 Token(每 180 天)
模型 API Key(每 90 天)
SSH 密钥(每年)
轮换步骤:
# 1. 生成新 Token
openssl rand -hex 32
# 2. 更新配置
# 编辑 secrets.env 或 secrets.json
# 3. 重启 Gateway
openclaw gateway restart
# 4. 更新远程客户端凭证
# 5. 验证旧凭证失效
9. 日志与审计
9.1 日志脱敏配置
日志输出必须自动隐藏密钥、Token、密码等敏感信息,禁止明文泄露凭证。
推荐配置:
{
"logging": {
"redactSensitive": "tools", // 重点:工具调用日志自动打码
"redactPatterns": [ // 以下内容都会被隐藏/替换
"Bearer\\s+\\w+", // 隐藏 Authorization 令牌
"api[_-]?key[\"']?\\s*[:=]\\s*[\"']?\\w+", // 隐藏 API Key
"password[\"']?\\s*[:=]\\s*[\"']?\\w+" // 隐藏 密码
],
"level": "info" // 日志级别:正常输出
}
}
开启后,日志里不会出现明文密钥。
9.2 各类日志存储路径与保留周期配置
9.3 安全审计命令
# 基础安全巡检
openclaw security audit
# 深度全项漏洞审计
openclaw security audit --deep
# 自动修复权限、配置、密钥风险
openclaw security audit --fix
# JSON结构化输出,便于对接监控告警
openclaw security audit --json
9.4 使用 1Panel 日志审计
1、登录 1Panel → 日志

2、查看 OpenClaw → 容器日志

3、设置日志告警规则
4、导出日志进行分析
10. 备份与恢复
10.1 使用 1Panel 备份
配置自动备份:
登录 1Panel → 计划任务
添加备份计划任务

选择 OpenClaw 数据目录
设置备份频率(建议每天)
选择备份目标(本地/云存储)
备份内容:
/home/openclaw/.openclaw/(配置和凭证)/home/openclaw/workspace/(工作区文件)Docker 卷数据
10.2 手动备份
进入已安装应用,选择待备份的 OpenClaw 应用,然后点击备份手动创建新备份即可。

10.3 恢复步骤
进入已安装应用,选择待恢复的应用,点击恢复即可。

11. 监控与告警
11.1 使用 1Panel 监控
监控指标:
CPU 使用率
内存使用率
磁盘使用率
网络流量
容器状态

设置告警:
登录 1Panel → 监控 → 告警
添加告警规则
设置阈值(如 CPU > 80%)
配置通知渠道(邮件/微信/钉钉)

11.2 OpenClaw 健康检查
# 检查 Gateway 状态
openclaw gateway status
# 检查通道状态
openclaw channels status
# 运行健康检查
openclaw health
11.3 添加监控脚本
#!/bin/bash
# /home/openclaw/scripts/health-check.sh
# 检查 Gateway
if ! curl -s http://127.0.0.1:18789/health > /dev/null; then
echo "OpenClaw Gateway 不健康" | mail -s "OpenClaw 告警" [email protected]
docker restart openclaw
fi
# 检查磁盘
if [ $(df /home | tail -1 | awk '{print $5}' | sed 's/%//') -gt 90 ]; then
echo "磁盘使用率超过 90%" | mail -s "磁盘告警" [email protected]
fi
添加到 Cron:
*/5 * * * * /home/openclaw/scripts/health-check.sh