手把手教你:Cloudflare Zero Trust 基础教程 – wiki基地


手把手教你:Cloudflare Zero Trust 基础教程

在当今复杂的网络环境中,传统的“边界安全”模式正面临前所未有的挑战。随着企业应用、数据、用户分布日益广泛,仅仅依靠防火墙来保护内部网络已经远远不够。这时,“零信任”(Zero Trust)安全模型应运而生,其核心思想是“永不信任,始终验证”(Never Trust, Always Verify)。

Cloudflare Zero Trust 是 Cloudflare 提供的一套全面解决方案,它将零信任原则应用于各种场景,帮助企业保护其内部应用、数据和用户,无论他们身在何处。它提供了强大的身份验证、访问控制、网络过滤等功能,而且许多基础功能对于个人用户或小型团队甚至是免费的,极具吸引力。

本篇文章将手把手带你入门 Cloudflare Zero Trust,重点介绍其最常用、最基础的功能:通过 Cloudflare Access 和 Cloudflare Tunnel 安全地发布你的内部应用,让你无需打开防火墙端口,就能让授权用户访问内网服务。

文章目录

  1. 什么是零信任(Zero Trust)?
  2. 为何选择 Cloudflare Zero Trust?
  3. 入门准备:你需要什么?
  4. Cloudflare Zero Trust 核心组件概览(基础部分)
    • Cloudflare Access
    • Cloudflare Tunnel
  5. 手把手搭建:保护你的第一个内部应用
    • 步骤 1:登录 Cloudflare 并进入 Zero Trust 面板
    • 步骤 2:创建你的第一个 Tunnel
    • 步骤 3:安装并运行 Tunnel Agent (cloudflared)
    • 步骤 4:配置通过 Tunnel 访问的内部应用
    • 步骤 5:创建 Access 策略,定义谁可以访问
    • 步骤 6:测试你的设置
  6. 更进一步:Access 的身份提供商 (IdP) 配置
  7. 基础故障排除
  8. 总结与展望

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 面板

  1. 登录到你的 Cloudflare 账号。
  2. 在左侧导航栏找到并点击 “Zero Trust”
  3. 如果是第一次进入,你可能需要点击 “Launch Zero Trust dashboard”。你会被引导到一个新的面板页面。
  4. Cloudflare Zero Trust 有不同的计划,对于基础功能,Free 计划通常足够。如果需要升级,面板会有提示。

步骤 2:创建你的第一个 Tunnel

Tunnel 是连接你的内网服务到 Cloudflare 的桥梁。

  1. 在 Zero Trust 面板左侧导航栏,选择 “Networks” -> “Tunnels”
  2. 点击 “Create a tunnel” 按钮。
  3. 给你的 Tunnel 起一个名字,例如 my-internal-tunnel。这个名字仅用于识别,可以随意填写。点击 “Save tunnel”
  4. 进入下一个页面,你会看到安装 cloudflared 的指示。

步骤 3:安装并运行 Tunnel Agent (cloudflared)

现在,你需要将 cloudflared 代理程序安装到可以访问你内部应用 http://192.168.1.100:8080 的那台内网机器上。

  1. 在 Cloudflare Zero Trust 面板上,你创建 Tunnel 后会看到不同操作系统的安装指南。选择你对应操作系统的 Tab (例如,Linux, Windows, macOS, Docker)。
  2. 按照指示下载并安装 cloudflared 程序。
  3. 核心步骤: 复制页面上提供的连接命令。这个命令通常是 cloudflared tunnel run <Tunnel UUID or Name>,但首次连接时,它会包含一个授权令牌(--token ...)。
    • 重要提示: 这个包含令牌的命令只需运行一次来注册 Tunnel。令牌非常重要,不要泄露。一旦注册成功,cloudflared 就会记住 Tunnel 的配置,之后你只需使用 cloudflared tunnel run <Tunnel UUID or Name> 命令来启动它。
  4. 打开你内网机器的终端或命令提示符,粘贴并运行这个命令。
  5. 如果一切顺利,cloudflared 会连接到 Cloudflare 并保持连接状态。在 Zero Trust 面板的 “Tunnels” 页面,你应该能看到你刚创建的 Tunnel 状态变为 “Healthy”。这意味着你的内网已经通过 Tunnel 安全地连接到了 Cloudflare 网络。

4. 配置通过 Tunnel 访问的内部应用

现在 Tunnel 已经就绪,我们需要告诉 Cloudflare Access 如何通过这个 Tunnel 找到你的内部应用,并为它设置一个外部可访问的域名。

  1. 仍在 Cloudflare Zero Trust 面板的 Tunnel 创建/编辑页面,或者回到 “Networks” -> “Tunnels”,点击你创建的 Tunnel 的名字,然后点击 “Configure”
  2. 向下滚动到 “Public Hostnames” 部分。
  3. 点击 “Add a public hostname”
  4. 配置以下信息:
    • Subdomain: 填写你想要用来访问应用的子域名,例如 my-app
    • Domain: 选择你的主域名 (yourdomain.com)。最终外部访问地址将是 my-app.yourdomain.com
    • Path: 通常留空,除非你想只代理特定路径。
    • Service:
      • Type: 选择你内网应用的协议,通常是 HTTPHTTPS。如果内网应用使用 HTTPS 但证书是自签的,选择 HTTPS (allow unverified cert)
      • URL: 填写你的内网应用实际运行的地址和端口,例如 192.168.1.100:8080localhost:8080 (如果 cloudflared 运行在应用服务器本身)。
  5. 点击 “Save hostname”
  6. 点击 “Save tunnel” 完成 Tunnel 配置。

此时,如果你直接访问 my-app.yourdomain.com,应该会看到 Cloudflare Access 的默认阻止页面(如果没有配置 Access 策略的话)。这是因为我们还没有设置谁可以访问。

5. 创建 Access 策略,定义谁可以访问

Access 策略是零信任的核心,它决定了谁、在什么条件下可以访问你的应用。

  1. 在 Zero Trust 面板左侧导航栏,选择 “Access” -> “Applications”
  2. 你应该能看到刚才通过 Tunnel 配置的 my-app.yourdomain.com 应用。点击它。
  3. 进入应用配置页面,选择 “Policies” 标签页。
  4. 点击 “Add a Policy”
  5. 配置策略规则:

    • 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 条件(谨慎使用)。
    • 示例:只允许特定邮箱地址访问

      • Policy name: Allow Specific Emails
      • Action: 选择 Allow (允许访问)。
      • Rules:
        • Include: Selector 选择 Everyone (范围是所有人)。
        • Require: Selector 选择 EmailsValue 填写允许访问的邮箱地址列表,每行一个,例如:
          [email protected]
          [email protected]
    • 示例:允许通过某个身份提供商登录的用户访问 (假设你已经配置了身份提供商,将在下一节简要介绍)

      • Policy name: Allow IdP Users
      • Action: 选择 Allow
      • Rules:
        • Include: Selector 选择 Everyone
        • Require: Selector 选择 Login MethodValue 选择你配置好的身份提供商(如 Google, GitHub 等)。
    • Action:

      • Allow: 允许访问。
      • Deny: 拒绝访问。
      • Bypass: 跳过 Access 验证,直接访问应用(谨慎使用,通常用于无需认证的静态资源)。
      • Authenticate: 强制用户通过 Access 认证,但不做进一步的权限判断(通常用于测试或作为第一个策略)。
  6. 点击 “Save policy”

策略评估顺序: Cloudflare Access 按照策略列表从上到下的顺序评估规则。一旦用户命中一个策略(即满足 Include 条件),Access 会检查 Require 和 Exclude 条件。如果符合 Include 且符合 Require 且不符合 Exclude,那么该策略的 Action 就会生效。如果命中了 Allow 策略,访问即被允许,后续策略不再评估。如果没有命中任何 Allow 或 Bypass 策略,最终会被默认的 Deny 策略阻止。因此,通常将最具体的允许或拒绝策略放在前面。

6. 测试你的设置

现在,你可以测试你刚刚搭建的 Zero Trust 访问通道了。

  1. 打开一个新的浏览器窗口(最好是隐私模式或清除 Cookies,以确保没有之前的登录状态)。
  2. 访问你设置的应用域名,例如 https://my-app.yourdomain.com
  3. 你应该会被重定向到 Cloudflare Access 的登录页面。
  4. 如果你的策略是基于邮箱的,系统可能会提示你输入邮箱地址,然后发送一次性密码到该邮箱。输入密码后,如果邮箱地址在允许列表中,你将成功登录并看到你的内部应用界面。
  5. 如果你的策略是基于身份提供商的,系统会提示你选择或跳转到对应的 IdP 登录页面进行认证。认证成功后,如果你的 IdP 用户符合策略条件,你将获得访问权限。
  6. 尝试使用一个不允许的邮箱或身份进行访问,你应该会被阻止,看到 Cloudflare Access 的拒绝页面。

恭喜你!你已经成功地使用 Cloudflare Zero Trust 的 Access 和 Tunnel 功能,安全地将一个内网应用发布到了互联网上,而且无需打开防火墙端口,并且实现了基于身份的访问控制。

6. 更进一步:Access 的身份提供商 (IdP) 配置

在上面的步骤 5 中,我们提到了基于邮箱的一次性密码或基于身份提供商 (IdP) 的认证方式。虽然基于邮箱很简单,但对于企业或团队来说,集成现有的 IdP(如 Google Workspace、Microsoft Entra ID (Azure AD)、Okta、GitHub、GitLab 等)通常更方便和安全。

配置 IdP 的步骤通常是:

  1. 在 Zero Trust 面板左侧导航栏,选择 “Settings” -> “Authentication”
  2. “Login Methods” 部分,点击 “Add new”
  3. 选择你想要添加的 IdP。
  4. 按照 Cloudflare 提供的指南,在你的 IdP 控制台进行相应的配置(例如,创建 OIDC 应用,配置回调 URL,获取 Client ID 和 Client Secret 等)。
  5. 将 IdP 提供的 Client ID 和 Client Secret 等信息填写回 Cloudflare Zero Trust 面板。
  6. 保存配置。

配置好 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 或浏览器测试访问内网地址。
  • 被重定向到 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)

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 提供了一个强大的、灵活的平台来实施现代安全模型。从保护一个简单的内部应用开始,逐步深入,它将成为你构建安全访问和网络环境的得力助手。现在,是时候亲自动手,去实践和探索了!


发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部