手把手教你:Cloudflare Zero Trust 基础教程
在当今复杂的网络环境中,传统的“边界安全”模式正面临前所未有的挑战。随着企业应用、数据、用户分布日益广泛,仅仅依靠防火墙来保护内部网络已经远远不够。这时,“零信任”(Zero Trust)安全模型应运而生,其核心思想是“永不信任,始终验证”(Never Trust, Always Verify)。
Cloudflare Zero Trust 是 Cloudflare 提供的一套全面解决方案,它将零信任原则应用于各种场景,帮助企业保护其内部应用、数据和用户,无论他们身在何处。它提供了强大的身份验证、访问控制、网络过滤等功能,而且许多基础功能对于个人用户或小型团队甚至是免费的,极具吸引力。
本篇文章将手把手带你入门 Cloudflare Zero Trust,重点介绍其最常用、最基础的功能:通过 Cloudflare Access 和 Cloudflare Tunnel 安全地发布你的内部应用,让你无需打开防火墙端口,就能让授权用户访问内网服务。
文章目录
- 什么是零信任(Zero Trust)?
- 为何选择 Cloudflare Zero Trust?
- 入门准备:你需要什么?
- Cloudflare Zero Trust 核心组件概览(基础部分)
- Cloudflare Access
- Cloudflare Tunnel
- 手把手搭建:保护你的第一个内部应用
- 步骤 1:登录 Cloudflare 并进入 Zero Trust 面板
- 步骤 2:创建你的第一个 Tunnel
- 步骤 3:安装并运行 Tunnel Agent (cloudflared)
- 步骤 4:配置通过 Tunnel 访问的内部应用
- 步骤 5:创建 Access 策略,定义谁可以访问
- 步骤 6:测试你的设置
- 更进一步:Access 的身份提供商 (IdP) 配置
- 基础故障排除
- 总结与展望
1. 什么是零信任(Zero Trust)?
零信任是一种安全理念,它假设任何用户、设备或网络流量都不可信,即使它们看起来来自“内部”。每次访问请求都必须经过严格的身份验证和授权,并持续监控其行为。这与传统模型形成鲜明对比,传统模型往往在通过边界(如防火墙)后就赋予较高的信任度。
零信任的核心原则包括:
* 持续验证: 身份、设备状态和上下文必须在每次访问尝试时都得到验证。
* 最小权限: 用户和设备只能访问完成其任务所需的最小资源。
* 假设泄露: 始终假设可能发生安全漏洞,并做好相应的防护和响应准备。
2. 为何选择 Cloudflare Zero Trust?
Cloudflare Zero Trust 提供了以下优势:
- 基于全球网络: 利用 Cloudflare 遍布全球的数据中心网络,提供高性能和低延迟的访问。
- 简化访问: 取代传统的 VPN,用户无需复杂的客户端或配置,通过浏览器即可安全访问应用。
- 增强安全性: 细粒度的访问策略,根据用户身份、设备状态、地理位置等多种因素进行控制。
- 无需更改网络: 通过 Cloudflare Tunnel,无需在防火墙上开放入站端口,大大降低暴露面。
- 集成多种身份源: 支持各种企业级身份提供商 (IdP),如 Okta, Azure AD, Google Workspace 等,也支持一次性密码或 GitHub/GitLab 账号等。
- 降低成本: 相较于部署和维护传统的 VPN 基础设施,通常更具成本效益,尤其对于远程办公场景。
- 统一平台: 将访问控制、网络安全(Gateway)、设备管理(WARP)等功能集成在一个平台中。
3. 入门准备:你需要什么?
在开始之前,请确保你具备以下条件:
- 一个 Cloudflare 账号: 如果没有,请注册一个免费账号 (opens in a new tab)。
- 一个已添加到 Cloudflare 并处于活动状态的域名: 你的应用将通过该域名的一个子域名(例如
app.yourdomain.com
)进行访问。 - 一个你想要保护和发布的内部应用: 这可以是一个运行在你内网服务器或本地电脑上的 Web 服务(HTTP/HTTPS)。例如,你家里的 NAS 管理界面、一个内部 Wiki、一个自建的网盘应用等。
- 一台可以访问到该内部应用的机器: 你将在它上面安装 Cloudflare Tunnel Agent。这台机器可以是运行内部应用的服务器本身,也可以是同一内网下的另一台机器。
4. Cloudflare Zero Trust 核心组件概览(基础部分)
为了实现安全发布内部应用的目标,我们将主要使用 Cloudflare Zero Trust 的两个核心组件:
- Cloudflare Access: 这是访问控制层。它负责验证用户的身份,并根据你定义的策略决定是否允许他们访问特定的应用。当用户尝试访问受 Access 保护的应用时,他们会被重定向到 Cloudflare 托管的登录页面进行身份验证。
- Cloudflare Tunnel: 这是安全连接层。它是一种无需打开防火墙端口就能将内部服务安全暴露给 Cloudflare 网络的方式。一个名为
cloudflared
的轻量级代理程序安装在你的内网机器上,它会主动向 Cloudflare 建立加密连接,并通过这个连接代理外部的访问请求到你的内部服务。这比传统的端口转发或 VPN 更安全、更易于管理。
本教程将重点讲解如何结合使用 Access 和 Tunnel。
5. 手把手搭建:保护你的第一个内部应用
假设你有一个运行在内网 http://192.168.1.100:8080
地址上的 Web 服务,你想通过 my-app.yourdomain.com
这个子域名发布它,并且只允许你指定的邮箱用户访问。
步骤 1:登录 Cloudflare 并进入 Zero Trust 面板
- 登录到你的 Cloudflare 账号。
- 在左侧导航栏找到并点击 “Zero Trust”。
- 如果是第一次进入,你可能需要点击 “Launch Zero Trust dashboard”。你会被引导到一个新的面板页面。
- Cloudflare Zero Trust 有不同的计划,对于基础功能,Free 计划通常足够。如果需要升级,面板会有提示。
步骤 2:创建你的第一个 Tunnel
Tunnel 是连接你的内网服务到 Cloudflare 的桥梁。
- 在 Zero Trust 面板左侧导航栏,选择 “Networks” -> “Tunnels”。
- 点击 “Create a tunnel” 按钮。
- 给你的 Tunnel 起一个名字,例如
my-internal-tunnel
。这个名字仅用于识别,可以随意填写。点击 “Save tunnel”。 - 进入下一个页面,你会看到安装
cloudflared
的指示。
步骤 3:安装并运行 Tunnel Agent (cloudflared)
现在,你需要将 cloudflared
代理程序安装到可以访问你内部应用 http://192.168.1.100:8080
的那台内网机器上。
- 在 Cloudflare Zero Trust 面板上,你创建 Tunnel 后会看到不同操作系统的安装指南。选择你对应操作系统的 Tab (例如,Linux, Windows, macOS, Docker)。
- 按照指示下载并安装
cloudflared
程序。 - 核心步骤: 复制页面上提供的连接命令。这个命令通常是
cloudflared tunnel run <Tunnel UUID or Name>
,但首次连接时,它会包含一个授权令牌(--token ...
)。- 重要提示: 这个包含令牌的命令只需运行一次来注册 Tunnel。令牌非常重要,不要泄露。一旦注册成功,
cloudflared
就会记住 Tunnel 的配置,之后你只需使用cloudflared tunnel run <Tunnel UUID or Name>
命令来启动它。
- 重要提示: 这个包含令牌的命令只需运行一次来注册 Tunnel。令牌非常重要,不要泄露。一旦注册成功,
- 打开你内网机器的终端或命令提示符,粘贴并运行这个命令。
- 如果一切顺利,
cloudflared
会连接到 Cloudflare 并保持连接状态。在 Zero Trust 面板的 “Tunnels” 页面,你应该能看到你刚创建的 Tunnel 状态变为 “Healthy”。这意味着你的内网已经通过 Tunnel 安全地连接到了 Cloudflare 网络。
4. 配置通过 Tunnel 访问的内部应用
现在 Tunnel 已经就绪,我们需要告诉 Cloudflare Access 如何通过这个 Tunnel 找到你的内部应用,并为它设置一个外部可访问的域名。
- 仍在 Cloudflare Zero Trust 面板的 Tunnel 创建/编辑页面,或者回到 “Networks” -> “Tunnels”,点击你创建的 Tunnel 的名字,然后点击 “Configure”。
- 向下滚动到 “Public Hostnames” 部分。
- 点击 “Add a public hostname”。
- 配置以下信息:
- Subdomain: 填写你想要用来访问应用的子域名,例如
my-app
。 - Domain: 选择你的主域名 (
yourdomain.com
)。最终外部访问地址将是my-app.yourdomain.com
。 - Path: 通常留空,除非你想只代理特定路径。
- Service:
- Type: 选择你内网应用的协议,通常是
HTTP
或HTTPS
。如果内网应用使用 HTTPS 但证书是自签的,选择HTTPS (allow unverified cert)
。 - URL: 填写你的内网应用实际运行的地址和端口,例如
192.168.1.100:8080
或localhost:8080
(如果cloudflared
运行在应用服务器本身)。
- Type: 选择你内网应用的协议,通常是
- Subdomain: 填写你想要用来访问应用的子域名,例如
- 点击 “Save hostname”。
- 点击 “Save tunnel” 完成 Tunnel 配置。
此时,如果你直接访问 my-app.yourdomain.com
,应该会看到 Cloudflare Access 的默认阻止页面(如果没有配置 Access 策略的话)。这是因为我们还没有设置谁可以访问。
5. 创建 Access 策略,定义谁可以访问
Access 策略是零信任的核心,它决定了谁、在什么条件下可以访问你的应用。
- 在 Zero Trust 面板左侧导航栏,选择 “Access” -> “Applications”。
- 你应该能看到刚才通过 Tunnel 配置的
my-app.yourdomain.com
应用。点击它。 - 进入应用配置页面,选择 “Policies” 标签页。
- 点击 “Add a Policy”。
-
配置策略规则:
- Policy name: 给策略起一个有意义的名字,例如
Allow My Team
。 - Session Duration: 用户登录后会话持续多久。
-
Rules: 这是策略的核心。Cloudflare Access 策略基于包含 (Include), 需要 (Require), 排除 (Exclude) 这三种规则组合:
- Include: 符合这些条件的用户将被包含在策略的评估范围内。例如,你想对所有人(
Everyone
)评估这个策略。 - Require: 在满足 Include 条件的用户中,必须同时满足 Require 的条件才能继续。例如,
Users
中指定的邮箱地址列表,或者来自某个Identity Provider
的用户。 - Exclude: 满足 Exclude 条件的用户将被直接排除,即使他们符合 Include 或 Require 条件(谨慎使用)。
- Include: 符合这些条件的用户将被包含在策略的评估范围内。例如,你想对所有人(
-
示例:只允许特定邮箱地址访问
- Policy name:
Allow Specific Emails
- Action: 选择
Allow
(允许访问)。 - Rules:
- Include:
Selector
选择Everyone
(范围是所有人)。 - Require:
Selector
选择Emails
,Value
填写允许访问的邮箱地址列表,每行一个,例如:
[email protected]
[email protected]
- Include:
- Policy name:
-
示例:允许通过某个身份提供商登录的用户访问 (假设你已经配置了身份提供商,将在下一节简要介绍)
- Policy name:
Allow IdP Users
- Action: 选择
Allow
。 - Rules:
- Include:
Selector
选择Everyone
。 - Require:
Selector
选择Login Method
,Value
选择你配置好的身份提供商(如 Google, GitHub 等)。
- Include:
- Policy name:
-
Action:
Allow
: 允许访问。Deny
: 拒绝访问。Bypass
: 跳过 Access 验证,直接访问应用(谨慎使用,通常用于无需认证的静态资源)。Authenticate
: 强制用户通过 Access 认证,但不做进一步的权限判断(通常用于测试或作为第一个策略)。
- Policy name: 给策略起一个有意义的名字,例如
-
点击 “Save policy”。
策略评估顺序: Cloudflare Access 按照策略列表从上到下的顺序评估规则。一旦用户命中一个策略(即满足 Include 条件),Access 会检查 Require 和 Exclude 条件。如果符合 Include 且符合 Require 且不符合 Exclude,那么该策略的 Action 就会生效。如果命中了 Allow 策略,访问即被允许,后续策略不再评估。如果没有命中任何 Allow 或 Bypass 策略,最终会被默认的 Deny 策略阻止。因此,通常将最具体的允许或拒绝策略放在前面。
6. 测试你的设置
现在,你可以测试你刚刚搭建的 Zero Trust 访问通道了。
- 打开一个新的浏览器窗口(最好是隐私模式或清除 Cookies,以确保没有之前的登录状态)。
- 访问你设置的应用域名,例如
https://my-app.yourdomain.com
。 - 你应该会被重定向到 Cloudflare Access 的登录页面。
- 如果你的策略是基于邮箱的,系统可能会提示你输入邮箱地址,然后发送一次性密码到该邮箱。输入密码后,如果邮箱地址在允许列表中,你将成功登录并看到你的内部应用界面。
- 如果你的策略是基于身份提供商的,系统会提示你选择或跳转到对应的 IdP 登录页面进行认证。认证成功后,如果你的 IdP 用户符合策略条件,你将获得访问权限。
- 尝试使用一个不允许的邮箱或身份进行访问,你应该会被阻止,看到 Cloudflare Access 的拒绝页面。
恭喜你!你已经成功地使用 Cloudflare Zero Trust 的 Access 和 Tunnel 功能,安全地将一个内网应用发布到了互联网上,而且无需打开防火墙端口,并且实现了基于身份的访问控制。
6. 更进一步:Access 的身份提供商 (IdP) 配置
在上面的步骤 5 中,我们提到了基于邮箱的一次性密码或基于身份提供商 (IdP) 的认证方式。虽然基于邮箱很简单,但对于企业或团队来说,集成现有的 IdP(如 Google Workspace、Microsoft Entra ID (Azure AD)、Okta、GitHub、GitLab 等)通常更方便和安全。
配置 IdP 的步骤通常是:
- 在 Zero Trust 面板左侧导航栏,选择 “Settings” -> “Authentication”。
- 在 “Login Methods” 部分,点击 “Add new”。
- 选择你想要添加的 IdP。
- 按照 Cloudflare 提供的指南,在你的 IdP 控制台进行相应的配置(例如,创建 OIDC 应用,配置回调 URL,获取 Client ID 和 Client Secret 等)。
- 将 IdP 提供的 Client ID 和 Client Secret 等信息填写回 Cloudflare Zero Trust 面板。
- 保存配置。
配置好 IdP 后,你就可以在 Access 策略的 “Require” 规则中选择这个 IdP 作为认证方式,从而实现更强大的身份验证和用户管理。
7. 基础故障排除
- 无法访问应用,显示 Cloudflare 错误页面 (如 502 Bad Gateway):
- 检查你的 Tunnel 状态在 Zero Trust 面板是否为 “Healthy”。如果不是,检查运行
cloudflared
的机器是否在线,cloudflared
进程是否正在运行,以及它是否成功连接到了 Cloudflare。查看cloudflared
进程的日志输出。 - 检查 Tunnel 配置的 Public Hostname -> Service URL (例如
192.168.1.100:8080
) 是否正确,并且运行cloudflared
的机器是否能够正常访问这个内网地址和端口。可以在运行cloudflared
的机器上使用curl
或浏览器测试访问内网地址。
- 检查你的 Tunnel 状态在 Zero Trust 面板是否为 “Healthy”。如果不是,检查运行
- 被重定向到 Cloudflare Access 登录页,但登录后无法访问,显示拒绝页面:
- 检查你的 Access 策略。确保你尝试访问的用户符合某个 Action 为 “Allow” 的策略的所有 Include 和 Require 条件,并且不符合任何 Exclude 条件。
- 检查策略的顺序。策略是从上到下评估的,确保没有被上面的 Deny 策略错误地阻止。
- 如果你使用了 IdP,检查 IdP 配置是否正确,以及你在 IdP 中的用户账户是否符合策略要求(例如,是否属于某个特定的群组)。
- 查看 Zero Trust 面板的 “Logs” -> “Access” 日志。这里会记录每次访问尝试的详细信息,包括请求者、应用、命中的策略以及最终的决策(允许/拒绝),这对于排查问题非常有帮助。
- 访问应用时浏览器显示证书错误:
- 如果你使用 HTTPS 访问
my-app.yourdomain.com
,Cloudflare 会提供有效的 SSL 证书。如果内网应用本身也使用 HTTPS,但在 Tunnel 配置中选择了HTTPS
,并且内网证书是自签的,可能需要选择HTTPS (allow unverified cert)
。
- 如果你使用 HTTPS 访问
8. 总结与展望
通过本教程,你已经掌握了 Cloudflare Zero Trust 的基础,成功地使用 Access 和 Tunnel 安全发布并保护了一个内部 Web 应用。Access 提供了基于身份的访问控制,而 Tunnel 则提供了一种安全、无需端口暴露的连接方式。
这仅仅是 Cloudflare Zero Trust 的冰山一角。在你熟悉了基础操作后,可以进一步探索:
- 更多 Access 策略条件: 基于国家、IP 地址、设备类型等创建更精细的策略。
- Identity Provider 集成: 将你的 Zero Trust 认证与公司现有的身份管理系统集成。
- Cloudflare Gateway: 保护出站(员工访问互联网)流量,提供安全 Web 网关、DNS 过滤等功能。
- Cloudflare WARP & Device Posture: 在员工设备上安装 WARP 客户端,强制所有流量通过 Cloudflare 网络,并检查设备的健康状态(如是否安装杀毒软件、是否开启防火墙)作为访问策略的条件。
- 记录和监控: 利用 Zero Trust 日志和分析功能,深入了解用户行为和安全事件。
Cloudflare Zero Trust 提供了一个强大的、灵活的平台来实施现代安全模型。从保护一个简单的内部应用开始,逐步深入,它将成为你构建安全访问和网络环境的得力助手。现在,是时候亲自动手,去实践和探索了!