网络层防御:用 Cloudflare Tunnel 给 OpenClaw 加把锁
很多 OpenClaw 用户都有远程访问的需求:出门在外,想用手机给家里的电脑下指令;在公司,想访问家里跑着的 Agent。
直接暴露端口太危险(OpenClaw 刚爆出的 RCE 漏洞就是明证)。配 VPN 又太麻烦,普通用户搞 WireGuard、OpenVPN 的配置文件头都大。
这时候,Cloudflare Tunnel (Zero Trust) 是一个非常好的平衡方案。它不需要你有公网 IP,不需要开任何入站端口,不需要复杂的 VPN 配置,还能自带一层身份验证。
这篇文章会详细讲解如何用 Cloudflare Tunnel 给你的 OpenClaw 加一把"锁"。
为什么 Cloudflare Tunnel 比直接暴露端口安全?
先理解一下传统方案的问题。
传统方案:端口转发
互联网 → 路由器公网 IP:3000 → 内网 192.168.1.100:3000 (OpenClaw)
问题:
- 你的家庭公网 IP 直接暴露,可以被扫描、被攻击
- 任何人都能尝试访问你的服务
- 如果 OpenClaw 有漏洞(比如刚爆出的 RCE),攻击者可以直接利用
- 没有任何身份验证(除非 OpenClaw 自己的验证,但它可能有漏洞)
Cloudflare Tunnel 方案:
你的设备 → Cloudflare 网络 → cloudflared (你家里) → OpenClaw
攻击者 → Cloudflare 网络 → Cloudflare Access (身份验证) → 被拦截
优点:
- 隐藏真实 IP:攻击者只能看到 Cloudflare 的 IP,扫不到你的家庭网络
- 不需要开端口:cloudflared 是主动连出去的,不需要入站连接
- 自带身份验证:Cloudflare Access 可以在流量到达你的服务之前进行身份验证
- 即使 OpenClaw 有漏洞,攻击者也触碰不到:因为要先通过 Cloudflare 的身份验证
这最后一点是关键。还记得 OpenClaw 的 RCE 漏洞吗?如果你有 Cloudflare Access 保护,攻击者发的恶意链接根本不起作用——因为在到达 OpenClaw 之前,就被 Cloudflare 的登录页面拦下来了。
开始配置
前提条件
- 一个 Cloudflare 账号(免费即可)
- 一个域名,并把 DNS 托管到 Cloudflare
- 你的 OpenClaw 已经在本地跑起来了
第一步:安装 cloudflared
cloudflared 是 Cloudflare 的隧道客户端,运行在你的内网里,负责把流量从 Cloudflare 转发到你的本地服务。
macOS:
brew install cloudflared
Ubuntu/Debian:
# 添加 Cloudflare 的 GPG key
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-archive-keyring.gpg > /dev/null
# 添加 apt 源
echo "deb [signed-by=/usr/share/keyrings/cloudflare-archive-keyring.gpg] https://pkg.cloudflare.com/cloudflared focal main" | sudo tee /etc/apt/sources.list.d/cloudflared.list
# 安装
sudo apt update && sudo apt install cloudflared
Docker:
docker pull cloudflare/cloudflared:latest
第二步:登录 Cloudflare
cloudflared tunnel login
这会打开浏览器,让你授权。选择你要使用的域名,授权后会在本地生成一个证书文件(默认在 ~/.cloudflared/cert.pem)。
第三步:创建隧道
# 创建一个名为 "my-home-tunnel" 的隧道
cloudflared tunnel create my-home-tunnel
这会输出一个 Tunnel ID(类似 a1b2c3d4-e5f6-7890-abcd-ef1234567890),并在 ~/.cloudflared/ 下生成对应的凭证文件。
第四步:配置隧道
创建配置文件 ~/.cloudflared/config.yml:
# ~/.cloudflared/config.yml
tunnel: a1b2c3d4-e5f6-7890-abcd-ef1234567890 # 你的 Tunnel ID
credentials-file: /Users/yourname/.cloudflared/a1b2c3d4-e5f6-7890-abcd-ef1234567890.json
ingress:
# OpenClaw 服务
- hostname: openclaw.yourdomain.com
service: http://localhost:3000
# 可以添加其他服务
# - hostname: another.yourdomain.com
# service: http://localhost:8080
# 默认规则(必须放最后)
- service: http_status:404
第五步:创建 DNS 记录
cloudflared tunnel route dns my-home-tunnel openclaw.yourdomain.com
这会在 Cloudflare DNS 里自动创建一条 CNAME 记录,指向你的隧道。
第六步:启动隧道
# 前台运行(测试用)
cloudflared tunnel run my-home-tunnel
# 或者作为服务运行
sudo cloudflared service install
sudo systemctl start cloudflared
sudo systemctl enable cloudflared # 开机自启
现在,访问 https://openclaw.yourdomain.com 应该就能看到你的 OpenClaw 了。
但等等,我们还没加身份验证!现在任何人访问这个地址都能看到你的 OpenClaw,只是 IP 被隐藏了而已。
第七步:配置 Cloudflare Access(关键!)
这是最重要的一步。Cloudflare Access 可以在流量到达你的服务之前,要求用户进行身份验证。
7.1 进入 Zero Trust 面板
- 登录 Cloudflare Dashboard
- 在左侧菜单找到 "Zero Trust" 或直接访问 one.dash.cloudflare.com
7.2 创建 Access 应用
- 左侧菜单:Access → Applications → Add an application
- 选择 "Self-hosted"
- 填写信息:
- Application name:
OpenClaw - Session Duration:
24 hours(或你想要的时长) - Application domain:
openclaw.yourdomain.com
- Application name:
7.3 配置访问策略
这一步告诉 Cloudflare:谁可以访问这个应用。
最简单的方式:邮箱白名单
- Policy name:
Allow my email - Action:
Allow - Configure rules:
- Include → Emails:
your@email.com
- Include → Emails:
这样只有 your@email.com 这个邮箱的主人才能访问。
验证方式
Cloudflare Access 支持多种身份验证方式:
- One-time PIN(默认):输入邮箱后,发送一次性验证码到邮箱
- Google / GitHub / 其他 OAuth:用已有的账号登录
- SAML / OIDC:企业单点登录
推荐使用 GitHub 或 Google 登录,更方便:
- 左侧菜单:Settings → Authentication
- Add new → Login methods
- 选择 GitHub 或 Google,按提示完成 OAuth 配置
- 回到 Application 的 Policy,改为 "Include → Login Methods → GitHub"
7.4 保存并测试
保存配置后,访问 https://openclaw.yourdomain.com。
你应该会看到 Cloudflare 的登录页面(带有 Cloudflare logo),而不是直接进入 OpenClaw。
只有通过身份验证后,才能看到 OpenClaw 的界面。
Docker Compose 完整配置
如果你想把所有东西都用 Docker Compose 管理:
# docker-compose.yml
version: '3.8'
services:
openclaw:
image: openclaw/openclaw:latest
container_name: openclaw
# 注意:只绑定到 localhost,不直接对外
ports:
- "127.0.0.1:3000:3000"
volumes:
- ./data:/app/data
- ./config:/app/config:ro
environment:
- AUTH_ENABLED=true # 仍然建议开启应用级鉴权作为第二道防线
restart: unless-stopped
cloudflared:
image: cloudflare/cloudflared:latest
container_name: cloudflared
command: tunnel --config /etc/cloudflared/config.yml run
volumes:
- ./cloudflared:/etc/cloudflared:ro
depends_on:
- openclaw
restart: unless-stopped
# 注意:cloudflared 需要能访问 openclaw:3000
# 所以它们需要在同一个 Docker 网络里
network_mode: host # 或者配置 Docker network
对应的 cloudflared 配置(./cloudflared/config.yml):
tunnel: your-tunnel-id
credentials-file: /etc/cloudflared/your-tunnel-id.json
ingress:
- hostname: openclaw.yourdomain.com
service: http://localhost:3000 # 因为用了 host 网络,可以直接访问 localhost
- service: http_status:404
记得把 Tunnel 的凭证文件也放到 ./cloudflared/ 目录下。
高级配置
添加更多安全层
1. IP 地理限制
在 Access Policy 中添加规则,只允许特定国家/地区的 IP:
Include:
- Emails: your@email.com
- Country: China, Japan, United States
2. 设备认证(需要 WARP 客户端)
让访问者必须使用安装了 WARP 客户端的设备:
Require:
- Gateway Policy: Enrolled in your organization
3. 多因素认证
要求访问者必须通过 MFA:
Require:
- Authentication Method: MFA - Any method
日志和审计
Cloudflare Access 会记录所有访问日志,你可以在 Zero Trust 面板的 Logs 里查看:
- 谁在什么时间访问了
- 从哪个 IP / 国家访问的
- 使用了什么身份验证方式
- 访问是被允许还是拒绝
这对于安全审计非常有价值。
自定义登录页面
你可以自定义登录页面的外观,让它看起来更像你的个人品牌:
- Zero Trust → Settings → Custom Pages
- 上传 logo,修改颜色和文案
费用说明
Cloudflare Zero Trust 有免费套餐,包含:
- 最多 50 个用户
- 无限的 Tunnel
- 基本的 Access 功能
对于个人使用完全够用。只有需要更高级的功能(如设备姿态检查、SAML 集成等)才需要付费。
与 VPN 方案的对比
| 特性 | Cloudflare Tunnel | Tailscale | WireGuard |
|---|---|---|---|
| 设置复杂度 | 中等 | 简单 | 复杂 |
| 需要公网 IP | 否 | 否 | 是(服务端) |
| 需要开端口 | 否 | 否 | 是 |
| 身份验证 | 内置(Access) | 内置 | 需自行配置 |
| 加密 | TLS | WireGuard | WireGuard |
| 访问控制 | 强大(基于身份/设备/地理) | 中等 | 需自行配置 |
| 日志审计 | 内置 | 有限 | 需自行配置 |
| 性能 | 依赖 Cloudflare 网络 | P2P,通常更快 | P2P,最快 |
| 适用场景 | 对外暴露服务,需要精细访问控制 | 纯内部访问 | 技术能力强的用户 |
我的建议:
- 如果你只是想在自己的设备上访问 OpenClaw,Tailscale 可能更简单
- 如果你想让服务在某种程度上"对外可用"(比如演示给朋友),或者需要精细的访问控制,Cloudflare Tunnel 更合适
- 如果你是老司机,追求最佳性能和完全控制,WireGuard 是最好的选择
总结
用 Cloudflare Tunnel 保护 OpenClaw 的核心步骤:
- 安装
cloudflared - 创建隧道,配置域名指向本地服务
- 关键:配置 Cloudflare Access,要求身份验证
- 启动隧道作为服务运行
这个方案的精髓在于:即使你的 OpenClaw 有未知的安全漏洞,攻击者也没机会利用——因为他们首先要通过 Cloudflare Access 的身份验证,而这一层是由 Cloudflare 的安全团队维护的,比我们自己写的鉴权代码可靠得多。
这是目前个人用户能用上的性价比最高的安全方案。零成本(免费套餐),半小时配置完成,安全性大幅提升。
还在直接暴露端口的同学,是时候升级了。你的贾维斯值得一把更好的锁。
浙公网安备 33010602011771号