Cloudflare Zero Trust 团队接入配置主要通过 Dashboard 设置访问策略,结合 Cloudflare Tunnel 将身份提供商的用户组与具体应用绑定,适合需要保护内部 Web 服务且不暴露公网 IP 的场景。
先说结论:配置核心在于先通身份源,再建应用策略,最后验证隧道连通性。
- 适合:企业内部后台、开发测试环境或需要基于身份鉴权的公网服务。
- 先准备:已验证的域名所有权、可用的身份提供商(如 Google Workspace、Azure AD 等)、安装 cloudflared 客户端。
- 验收:未登录用户访问被拦截,授权用户可正常进入且 Zero Trust Dashboard 日志可查。
环境准备与客户端安装
在配置隧道前,需在本地或服务器安装 cloudflared 守护进程并完成认证。
1. 安装 cloudflared
macOS 使用 Homebrew:
brew install cloudflared
Linux 可直接下载二进制文件:
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared-linux-amd64.deb
2. 登录认证
执行登录命令,浏览器会弹出 Zero Trust Dashboard 授权页面,点击允许后返回终端:
cloudflared tunnel login
创建与配置 Cloudflare Tunnel
Tunnel 用于将内网服务安全暴露给 Cloudflare 边缘,无需开放公网端口。
1. 创建隧道
cloudflared tunnel create <tunnel-name>
命令执行后会生成 Tunnel ID 和 credentials file(通常为 json 格式),请妥善保管。
2. 配置路由规则
创建 config.yml 文件,定义流量如何转发到本地服务。示例如下:
tunnel: <tunnel-name>
credentials-file: /root/.cloudflared/<tunnel-id>.json
ingress:
- hostname: app.example.com
service: http://localhost:8080
- service: http_status:404
3. 启动隧道
cloudflared tunnel run <tunnel-name>
若需后台运行,可使用 service 管理或添加 `--run` 参数。
配置 DNS 记录
需在域名 DNS 服务商处添加 CNAME 记录,将子域名指向 Tunnel 地址。
- 类型:CNAME
- 名称:app(对应 app.example.com)
- 内容:<tunnel-id>.cfargotunnel.com
- 代理状态:无需开启橙色云朵(Tunnel 流量已加密)
注意:此处不是将 DNS 指向 Cloudflare 通用 IP,而是特定的 Tunnel 域名,否则流量无法回源。
配置 Access 访问策略
在 Zero Trust Dashboard 中限制谁能访问该域名。
1. 添加身份提供商
进入 Settings > Authentication,连接 Google Workspace、Azure AD 或 GitHub 等 IdP,确保用户同步。
2. 创建用户组
进入 Access > Groups,创建组(如“开发团队”),规则可设为 Email Ends With @example.com 或特定邮箱。
3. 添加应用与策略
进入 Access > Applications > Add an application,选择 Self-hosted。
- Domain:填写配置的 app.example.com
- Session Duration:设置登录有效期
在 Policy 页面添加规则:
- Action:Allow
- Configure:选择刚才创建的“开发团队”组
- Priority:确保 Allow 规则优先级高于默认 Deny
验证与排查
验证方法:
- 使用无痕模式访问 app.example.com,应跳转 Cloudflare 登录页。
- 使用授权账号登录,成功进入内网服务。
- 使用未授权账号登录,应看到 403 Forbidden 或拒绝访问提示。
- 在 Zero Trust Dashboard > Logs > Access Logs 中查看允许/拒绝记录。
常见坑:
- DNS 配置错误:未配置 CNAME 指向 <tunnel-id>.cfargotunnel.com,导致 502 错误。
- 身份源同步延迟:新建用户加入组后,需等待 IdP 同步或手动刷新。
- 策略优先级冲突:若有多个策略,确保 Deny 规则不会误伤允许的用户组。
- Tunnel 进程中断:生产环境建议使用 systemd 或 Docker 守护进程,避免手动运行退出。