首页 教程 分类 Skills下载 关于
ZH EN JA KO
安全运维

OpenClaw访问控制和安全加固教程

· 16 分钟

前言

OpenClaw 作为一个连接多个聊天平台的 AI 网关,安全性至关重要。一旦被未授权的用户滥用,不仅可能产生高额 API 费用,还可能泄露敏感信息。本教程将从多个层面介绍如何加固 OpenClaw 的安全性,包括 Dashboard 认证、用户访问控制、速率限制和审计日志。

安全威胁概览

威胁类型 风险等级 说明
未授权访问 Dashboard 攻击者可修改配置、查看对话
API Key 泄露 他人可使用你的 API 额度
用户滥用 授权用户过度使用导致高费用
对话内容泄露 对话记录被未授权访问
DDoS 攻击 服务被恶意请求淹没
注入攻击 恶意提示词操纵 AI 行为

第一步:Dashboard 认证

1.1 启用密码认证

默认情况下 Dashboard 可能没有密码保护。立即配置:

{
  dashboard: {
    enabled: true,
    port: 18789,
    auth: {
      enabled: true,
      username: "admin",
      password: "${OPENCLAW_DASHBOARD_PASSWORD}",  // 使用环境变量
    }
  }
}

设置环境变量:

# 生成强密码
openssl rand -base64 32
# 输出类似:K7x9mP2vQ4wR1tY6uI3oA8sD5fG0hJ=

# 添加到环境变量
echo 'export OPENCLAW_DASHBOARD_PASSWORD="K7x9mP2vQ4wR1tY6uI3oA8sD5fG0hJ="' >> ~/.bashrc
source ~/.bashrc

1.2 配置 Session 管理

{
  dashboard: {
    auth: {
      enabled: true,
      username: "admin",
      password: "${OPENCLAW_DASHBOARD_PASSWORD}",
      session: {
        timeout: 3600,           // Session 过期时间(秒),1小时
        maxSessions: 3,          // 最多同时登录数
        secureCookie: true,      // 仅通过 HTTPS 发送 Cookie
      }
    }
  }
}

1.3 多用户管理

如果有团队需要管理 OpenClaw:

{
  dashboard: {
    auth: {
      enabled: true,
      users: [
        {
          username: "admin",
          password: "${ADMIN_PASSWORD}",
          role: "admin",          // 完全控制权
        },
        {
          username: "operator",
          password: "${OPERATOR_PASSWORD}",
          role: "operator",       // 可查看日志和状态,不能修改配置
        },
        {
          username: "viewer",
          password: "${VIEWER_PASSWORD}",
          role: "viewer",         // 只读权限
        }
      ]
    }
  }
}

角色权限对比:

权限 admin operator viewer
查看 Dashboard
查看日志
查看对话记录
修改配置
管理用户
重启服务

第二步:API Key 保护

2.1 环境变量存储(必须)

永远不要将 API Key 明文写在配置文件中:

// 错误示范 ✗
{
  models: {
    openai: {
      apiKey: "sk-proj-abc123..."   // 不要这样做!
    }
  }
}

// 正确做法 ✓
{
  models: {
    openai: {
      apiKey: "${OPENAI_API_KEY}"   // 通过环境变量引用
    }
  }
}

2.2 文件权限控制

# 限制配置文件权限
chmod 600 ~/.config/openclaw/openclaw.json5

# 确认文件所有者
chown $(whoami) ~/.config/openclaw/openclaw.json5

# 检查权限
ls -la ~/.config/openclaw/openclaw.json5
# 应该显示 -rw------- (仅所有者可读写)

2.3 Git 排除

如果你用 Git 管理配置,确保敏感文件被排除:

# 在 .gitignore 中添加
echo "openclaw.json5" >> ~/.config/openclaw/.gitignore
echo ".env" >> ~/.config/openclaw/.gitignore
echo "*.key" >> ~/.config/openclaw/.gitignore
echo "*.pem" >> ~/.config/openclaw/.gitignore

第三步:用户白名单/黑名单

3.1 用户白名单(推荐)

只允许指定用户使用 AI 助手:

{
  accessControl: {
    mode: "whitelist",            // whitelist 或 blacklist
    whitelist: {
      telegram: [
        "123456789",              // Telegram 用户 ID
        "987654321",
      ],
      whatsapp: [
        "+8613800138000",         // WhatsApp 手机号
        "+8613900139000",
      ],
      discord: [
        "112233445566778899",     // Discord 用户 ID
      ]
    },
    denyMessage: "抱歉,你没有使用该助手的权限。请联系管理员。",
  }
}

3.2 用户黑名单

如果大部分用户都可以使用,只需屏蔽个别用户:

{
  accessControl: {
    mode: "blacklist",
    blacklist: {
      telegram: [
        "111111111",              // 被封禁的用户
      ],
      global: [
        "[email protected]",   // 全频道封禁
      ]
    },
    blockMessage: "你的访问权限已被暂停。",
  }
}

3.3 群组权限控制

对于群组中的机器人,可以限制哪些群组允许使用:

{
  accessControl: {
    groups: {
      telegram: {
        allowedGroups: [
          "-1001234567890",       // 允许的群组 ID
          "-1009876543210",
        ],
        allowPrivate: true,       // 允许私聊
      },
      discord: {
        allowedServers: [
          "1234567890123456",     // 允许的服务器 ID
        ],
        allowedChannels: [
          "9876543210987654",     // 允许的频道 ID(更精细)
        ]
      }
    }
  }
}

第四步:速率限制

4.1 全局速率限制

防止任何单个用户过度使用:

{
  rateLimit: {
    global: {
      maxRequestsPerMinute: 30,     // 全局每分钟最多 30 次请求
      maxRequestsPerHour: 500,      // 全局每小时最多 500 次
      maxRequestsPerDay: 5000,      // 全局每天最多 5000 次
    }
  }
}

4.2 按用户速率限制

{
  rateLimit: {
    perUser: {
      maxRequestsPerMinute: 5,      // 每用户每分钟 5 次
      maxRequestsPerHour: 60,       // 每用户每小时 60 次
      maxRequestsPerDay: 500,       // 每用户每天 500 次
      cooldownMessage: "你发送消息太频繁了,请稍后再试。",
    }
  }
}

4.3 分级速率限制

为不同用户组设定不同限制:

{
  rateLimit: {
    tiers: {
      vip: {
        users: ["123456789", "+8613800138000"],
        maxRequestsPerMinute: 20,
        maxRequestsPerDay: 2000,
      },
      standard: {
        default: true,               // 未指定的用户使用此级别
        maxRequestsPerMinute: 5,
        maxRequestsPerDay: 200,
      },
      restricted: {
        users: ["987654321"],
        maxRequestsPerMinute: 1,
        maxRequestsPerDay: 20,
      }
    }
  }
}

第五步:IP 限制

5.1 Dashboard IP 白名单

只允许特定 IP 访问 Dashboard:

{
  dashboard: {
    auth: {
      enabled: true,
      username: "admin",
      password: "${OPENCLAW_DASHBOARD_PASSWORD}",
    },
    ipWhitelist: [
      "203.0.113.0/24",            // 你的办公室 IP 段
      "198.51.100.1",              // 你的家庭 IP
      "127.0.0.1",                 // 本地访问
    ]
  }
}

5.2 使用防火墙限制

系统层面的 IP 限制更加可靠:

# 使用 ufw(Ubuntu)
sudo ufw allow from 203.0.113.0/24 to any port 18789
sudo ufw deny 18789

# 使用 iptables
sudo iptables -A INPUT -p tcp --dport 18789 -s 203.0.113.0/24 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 18789 -j DROP

5.3 Fail2ban 防暴力破解

配置 Fail2ban 自动封禁多次登录失败的 IP:

sudo apt install fail2ban

创建 OpenClaw 的 Fail2ban 规则:

sudo nano /etc/fail2ban/jail.d/openclaw.conf
[openclaw]
enabled = true
port = 18789
filter = openclaw
logpath = /var/log/openclaw/access.log
maxretry = 5
findtime = 600
bantime = 3600

创建过滤器:

sudo nano /etc/fail2ban/filter.d/openclaw.conf
[Definition]
failregex = ^.*authentication failed.*from <HOST>.*$
ignoreregex =
sudo systemctl restart fail2ban

第六步:审计日志

6.1 启用详细日志

{
  logging: {
    level: "info",                   // debug, info, warn, error
    file: "/var/log/openclaw/openclaw.log",
    audit: {
      enabled: true,
      file: "/var/log/openclaw/audit.log",
      events: [
        "auth.login",                // 登录事件
        "auth.failed",               // 登录失败
        "config.change",             // 配置修改
        "user.blocked",              // 用户被阻止
        "rateLimit.exceeded",        // 速率限制触发
        "message.received",          // 收到消息(可选,量大)
      ]
    }
  }
}

6.2 日志轮转

防止日志文件无限增长:

sudo nano /etc/logrotate.d/openclaw
/var/log/openclaw/*.log {
    daily
    missingok
    rotate 30
    compress
    delaycompress
    notifempty
    create 640 openclaw openclaw
    postrotate
        openclaw restart > /dev/null 2>&1 || true
    endscript
}

6.3 查看审计日志

# 查看最近的审计事件
openclaw logs --audit --since 24h

# 筛选登录失败事件
openclaw logs --audit --filter "auth.failed"

# 查看特定用户的活动
openclaw logs --audit --user "123456789"

第七步:安全最佳实践清单

部署前检查

# 运行安全检查
openclaw doctor --security

安全清单

检查项 状态 说明
Dashboard 密码已设置 使用强密码,至少 16 位
API Key 使用环境变量 不在配置文件中明文存储
配置文件权限 600 仅所有者可读写
HTTPS 已启用 生产环境必须
用户白名单已配置 限制谁可以使用
速率限制已启用 防止滥用
审计日志已启用 记录关键操作
防火墙已配置 仅开放必要端口
自动更新已启用 及时修复安全漏洞
定期备份 防止数据丢失

定期安全维护

# 每周:检查审计日志中的异常
openclaw logs --audit --since 7d --filter "auth.failed"

# 每月:更新 OpenClaw 到最新版本
npm update -g openclaw@latest

# 每月:轮换 Dashboard 密码
# 更新环境变量中的密码后重启

# 每季度:审查白名单,移除不活跃用户

常见问题

忘记 Dashboard 密码

# 直接修改环境变量中的密码
export OPENCLAW_DASHBOARD_PASSWORD="新密码"
openclaw restart

误封自己的 IP

# 通过 SSH 登录服务器后
# 如果是 Fail2ban 封的
sudo fail2ban-client set openclaw unbanip 你的IP

# 如果是配置文件的 IP 白名单
# 编辑配置文件添加你的 IP,然后重启
openclaw restart

速率限制过于严格

观察日志中 rateLimit.exceeded 事件的频率,适当调整:

openclaw logs --audit --filter "rateLimit.exceeded" --since 24h

根据实际使用情况调整限制值。

小结

安全加固是运行生产级 OpenClaw 实例的必备步骤。核心措施包括:启用 Dashboard 认证、通过环境变量保护 API Key、配置用户白名单、设置速率限制、启用审计日志。这些措施并不复杂,但能极大提升安全性。建议按照本文的安全清单逐项检查和配置,确保你的 AI 助手在安全可控的环境下运行。

OpenClaw 是开源免费的个人AI助手,支持 WhatsApp、Telegram、Discord 等多平台接入