DanLevy.net

你的AI助手给了我shell访问权限

如何安全加固你的本地或VPS的OpenClaw/Moltbot环境

OpenClaw(原Clawdbot/Moltbot)为您提供一个跨WhatsApp、Slack、Discord、iMessage等渠道的个人AI助手。但如果未对它的网关、节点控制或SSH接口实施强认证就暴露在公网上,您就等于为陌生人打开了通向您机器的shell访问路径。

本指南展示最安全的默认方案:将OpenClaw网关绑定在环回接口,仅通过Tailscale Serve向您的tailnet暴露,锁定SSH访问,并从外部验证网关是否未公开。

该项目的快速普及暴露了真实的安全隐患:Shodan扫描在最初几周发现了2,847个暴露实例,GitHub安全审计报告在代码库中发现了512个问题。其中部分来自自动扫描器输出,部分在2026年1月项目更名为OpenClaw后已变更,因此请将这些数字视为警示而非精确的当前漏洞统计。您不需要成为安全专家——只需在部署前避免发布操作接口即可。


您实际暴露的内容

根据安装和暴露方式的不同,有三个接口需要检查:

当前OpenClaw远程访问文档指出网关WebSocket默认绑定环回接口,并建议除非有意选择LAN/tailnet/自定义绑定,否则保持环回绑定。这是合理的。风险出现在您覆盖默认配置、发布Docker端口、添加反向代理、启用Funnel或对SSH开放公网访问时。

网关是最重要的暴露面。这是您助手的操作接口,包括工具调用路径。如果网关可从互联网访问且认证缺失、薄弱、被绕过或泄露,攻击者可能能够控制代理或以您的用户权限调用工具。

浏览器控制几乎同样敏感。当前OpenClaw文档建议通过浏览器机器上的配对节点主机运行浏览器控制,并将节点配对视为操作访问。如果网关可以在配对节点上执行system.run,这等同于在该节点上实现远程代码执行,受网关节点策略和节点自身执行审批的约束。

SSH就是SSH。如果您启用了密码认证,在公网VPS上暴力破解尝试是不可避免的。


Tailscale解决方案

对于OpenClaw,Tailscale可让您在不发布操作服务的情况下实现远程访问:

  1. 您的OpenClaw实例运行在VPS或本地机器上
  2. 网关保持绑定环回接口并通过Tailscale Serve访问,或直接绑定tailnet IP并使用显式认证
  3. 在服务器和您的个人设备上安装Tailscale
  4. 通过Tailscale IP或MagicDNS名称访问OpenClaw
  5. 互联网上的其他人将看不到任何内容,除非您有意启用Funnel或其他公共代理

是否应让OpenClaw管理Tailscale?

OpenClaw提供了内置的Tailscale集成,可配置tailscale servetailscale funnel用于网关。

Serve模式将流量限制在您的tailnet内。网关保持绑定在127.0.0.1,而Tailscale处理路由和HTTPS。当启用gateway.auth.allowTailscale时,OpenClaw可通过Tailscale身份验证头认证Control UI/WebSocket流量,并通过tailscale whois验证来源。这是大多数个人部署的正确模式。

Funnel模式 通过Tailscale的公共端点功能将网关公开暴露。Tailscale官方文档描述Funnel为将互联网流量路由到本地服务。OpenClaw在网关认证模式不是password时会拒绝启动Funnel,但你仍然在选择为操作界面暴露公网。

OpenClaw的安全文档明确指出提示注入和工具访问是个人助理的核心风险。不要为代理提供静默公开的路径。应刻意使用Serve模式,除非确实需要公网访问才使用Funnel,并为任何tailscale命令要求执行审批。


安全配置OpenClaw

步骤1:安装Tailscale

在您的VPS或本地服务器上:

Terminal window
# 安装Tailscale
curl -fsSL https://tailscale.com/install.sh | sh
# 认证(打开浏览器登录)
sudo tailscale up
# 获取您的Tailscale IP
tailscale ip -4
# 输出:100.x.x.x

在客户端机器上,从官方下载页面安装Tailscale并登录到同一个tailnet。

现在两台机器处于同一私有网络。您可以使用Tailscale IP ping您的VPS,流量将通过加密隧道路由。

步骤2:配置OpenClaw使用Tailscale

当前最安全的模式是:保持网关绑定在回环接口,并通过Tailscale Serve将其暴露到tailnet。

在OpenClaw配置中:

{
gateway: {
bind: "loopback",
tailscale: { mode: "serve" },
},
}

然后以Serve模式启动网关:

Terminal window
openclaw gateway --tailscale serve

OpenClaw文档说明这会将网关保持在127.0.0.1,同时Tailscale提供HTTPS和tailnet路由。您应通过https://<magicdns-name>/访问,而非公网VPS IP。

如果更倾向直接绑定tailnet而非Serve模式,使用显式网关认证:

{
gateway: {
bind: "tailnet",
auth: {
mode: "token",
token: "replace-with-a-long-random-token",
},
},
}

然后从另一个tailnet设备连接:

http://<tailscale-ip>:18789/
ws://<tailscale-ip>:18789

如果在Docker或其他容器运行时中运行,需特别注意端口发布。类似-p 18789:18789的发布通常会绑定到所有主机接口。建议使用回环加Tailscale Serve,或在确认容器仍能接收流量后,显式将主机端绑定到Tailscale IP:

Terminal window
TAILSCALE_IP=$(tailscale ip -4)
docker run ... -p "$TAILSCALE_IP:18789:18789" ...

每次修改Docker配置后,应使用nmap从外部检查,并使用ss本地检查。若未正确配置,Docker可能绕过或打乱主机防火墙规则。

步骤3:锁定SSH

即使启用了Tailscale,你也应正确配置SSH:

Terminal window
# 在操作过程中保持当前SSH会话开启
# 首先从客户端机器确认可通过Tailscale进行SSH连接:
ssh your-user@SERVER_TAILSCALE_IP
# 将强化配置放入独立文件而非直接修改sshd_config
sudo tee /etc/ssh/sshd_config.d/99-openclaw-hardening.conf >/dev/null <<'EOF'
PasswordAuthentication no
PermitRootLogin no
KbdInteractiveAuthentication no
EOF
# 在重新加载前验证配置。不要跳过此步骤
sudo sshd -t
sudo systemctl reload ssh || sudo systemctl reload sshd

此配置禁用了基于密码的登录和root登录。下一步将使用UFW完全阻止公网SSH访问,同时仍允许通过tailscale0接口的SSH连接。

步骤 4:防火墙规则

设置第二层防火墙防护:

Terminal window
# 使用UFW(Ubuntu/Debian)
sudo ufw allow in on tailscale0
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw enable
sudo ufw delete allow 22/tcp || true
sudo ufw reload
sudo ufw status verbose

Tailscale官方Ubuntu加固指南采用相同策略:允许tailscale0接口流量,拒绝其他所有入站流量,然后验证公网SSH是否超时而Tailscale私有地址100.x.y.z的SSH仍能正常工作。如果同一VPS运行公网网站,仅保留必要的规则如80/tcp443/tcp


检查暴露面

从外部检查开放端口

不在你Tailscale网络的机器执行:

Terminal window
# 检查常见公网端口是否暴露
nmap -p 22,80,443,18789 YOUR_PUBLIC_IP
# 安全实例的预期输出:
# 22/tcp filtered ssh
# 18789/tcp filtered unknown

如果2218789显示open而非filteredclosed,说明存在配置问题。若80443开放,需确认这是你有意配置的公网网站或Tailscale Funnel端点,而非意外暴露的OpenClaw网关。

检查本地监听端口

在你的OpenClaw服务器上执行:

Terminal window
# 显示所有监听端口及其绑定地址
sudo ss -tulpn | grep LISTEN
# 查找类似以下行(Serve模式正常):
# tcp LISTEN 0 128 127.0.0.1:18789 *:*
#
# 或以下行(经认证的tailnet直接绑定可接受):
# tcp LISTEN 0 128 100.x.y.z:18789 *:*
#
# 避免出现以下情况(危险):
# tcp LISTEN 0 128 0.0.0.0:18789 *:*

若看到0.0.0.0:::(IPv6等效地址),表示该服务已向公网暴露。

内置安全审计

OpenClaw包含安全审计命令,可检查配置是否符合安全最佳实践:

Terminal window
openclaw security audit --deep
openclaw security audit --deep --fix

审计内容包括网关暴露、Tailscale模式、认证设置、频道访问、工具策略、插件清单和文件权限。--fix参数可作为辅助工具,但不能替代对审计结果的审阅。


本方案未解决的问题

Tailscale消除了最大的风险:公开的操作员暴露。但它并未解决所有问题:

凭证存储:OpenClaw会将会话记录、OAuth令牌和API密钥存储在磁盘上。请确保这些文件具有正确的文件权限(文件使用chmod 600,私有配置目录使用chmod 700),并且不在版本控制中。内置的审计功能会检查这些配置。

插件沙箱:插件以您的用户权限运行。仅从可信来源安装插件,并审查它们请求的权限。审计工具会列出已安装的插件。

设备安全:如果有人入侵您的Tailscale账户或窃取了您tailnet中的设备,他们可以访问您的OpenClaw实例。启用Tailscale设备授权,要求新设备获得批准。


部署检查清单

在将您的OpenClaw/Moltbot实例视为生产就绪之前:


资源