跳转到内容
搜索文档

代理终结点

最后更新 查看 MarkdownAgent 设置

代理终结点允许您在不安装客户端的情况下将 Gateway 策略应用到您的设备上。通过在浏览器级别配置代理自动配置 (PAC) 文件,您可以通过 Gateway 路由流量以进行过滤和策略执行。Cloudflare 支持配置两种类型的代理终结点:基于身份的授权终结点源 IP 代理终结点

何时使用代理终结点

代理终结点适用于无法部署 Cloudflare One Client 的环境。常见用例包括:

  • 虚拟桌面 (VDI):用户登录虚拟机并使用浏览器访问互联网。
  • 受合规限制的终结点:在法律上或技术上禁止您在终结点上安装软件的环境。
  • 旧版 SWG 迁移:从使用 PAC 文件的旧版安全 Web 网关(Secure Web Gateway)过渡的组织。

日志记录

通过代理终结点发送的流量会生成 Zero Trust 网络会话日志,这些日志可以通过 LogpushLog Explorer 获取。

什么是 PAC 文件

A PAC file is a file containing a JavaScript function which can instruct a browser to forward traffic to a proxy server instead of directly to the destination server.

当最终用户访问网站时,其浏览器会将请求发送到与您的账户关联的 Cloudflare 代理服务器,以便由 Gateway 进行过滤。浏览器会对每个请求评估 PAC 文件,从而确定流量是应通过代理还是直接连接。请注意,Gateway 无法过滤通过 PAC 文件代理的每种类型的 HTTP 流量

PAC 文件具有以下几个优点:

  • 集中管理:在一个位置更新路由规则,而无需重新配置单个设备。
  • 灵活路由:根据域、IP 范围或协议将不同的流量类型路由到不同的代理或直接连接。
  • 负载均衡:在多个代理服务器之间分配流量并实现自动故障转移。

代理终结点类型

Cloudflare One 提供两种类型的代理终结点,每种都具有不同的授权方法。

一旦创建了代理终结点,就无法更改其类型。如果需要不同的授权方法,则必须创建新的代理终结点。

授权终结点

授权终结点使用 Cloudflare Access 来提供 Zero Trust 授权。用户必须通过身份提供程序进行身份验证并通过 Access 策略,然后才能使用代理终结点。

在以下情况下使用授权终结点:

  • 您需要用户级身份验证和基于身份的策略。
  • 您希望将特定用户与其代理流量相关联。
  • 您的组织要求通过身份提供程序(例如 Okta、Microsoft Entra ID 或 Google Workspace)进行登录。
  • 您需要对谁可以访问代理进行细粒度控制。

源 IP 终结点

源 IP 终结点根据源 IP 地址授权流量。只有来自预先配置的 IP 地址的流量才能使用该代理终结点。

在以下情况下使用源 IP 终结点:

  • 您拥有固定的办公室或网络位置。
  • 您希望简化设置,无需用户身份验证。
  • 您的设备共享一个公共出口 IP 地址。
  • 您不需要识别单个用户。

1. 创建代理终结点

Authorization endpoint

要添加授权终结点

  1. Cloudflare One 中,转到 Networks(网络) > Resolvers & Proxies(解析器和代理),然后转到 Proxy endpoints(代理终结点)
  2. Proxy endpoints(代理终结点) 中,选择 Add endpoint(添加终结点)
  3. 选择 Add authorization endpoint(添加授权终结点)
  4. 为您的终结点命名。
  5. 添加 Access 策略以控制谁可以访问您的应用程序。您可以选择现有策略或创建新策略。
  6. 选择要支持的登录方法。要接受所有登录方法,请开启 Accept all available identity providers(接受所有可用的身份提供程序)。 7.(可选)如果仅配置了一个身份提供程序,请开启 Instant Auth(应用即时身份验证),以便当您的用户到达代理终结点时跳过身份提供程序选择。
  7. 选择 Create(创建)

Source IP endpoint

要添加源 IP 终结点

  1. Cloudflare One 中,转到 Networks(网络) > Resolvers & Proxies(解析器和代理),然后转到 Proxy endpoints(代理终结点)
  2. Proxy endpoints(代理终结点) 中,选择 Add endpoint(添加终结点)
  3. 选择 Add source IP endpoint(添加源 IP 终结点)
  4. 为您的终结点命名。
  5. 以 CIDR 表示法添加设备的源 IP 地址。例如:
    • IPv4: 192.0.2.0/8
    • IPv6: 2001:0db8:0000:0000:0000:1234:5678:0000/32
  6. 选择 Save endpoint(保存终结点)

Authorization endpoint

要创建授权终结点:

  1. 使用 创建代理终结点 并进行以下调用:

    Create a proxy endpointbash
    curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/gateway/proxy_endpoints" \
    	--request POST \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
    	--json '{
    		"kind": "identity",
    		"name": "any_name"
    	}'
  2. 响应返回类似于以下内容之输出:

    Example outputjson
    {
    	"result": {
    		"kind": "identity",
    		"id": "d969d7bf-ec28-4291-9af0-86825f472c21",
    		"name": "Identity Proxy Endpoint",
    		"created_at": "2014-01-01T05:20:00.12345Z",
    		"updated_at": "2014-01-01T05:20:00.12345Z",
    		"subdomain": "3ele0ss56t"
    	},
    	"success": true,
    	"errors": [],
    	"messages": []
    }

    注意 API 返回的 subdomain 值。您将使用它来创建 Access 应用程序。

  3. 使用 添加 Access 应用程序 将代理终结点与 Access 策略相关联:

    Required API token permissions

    At least one of the following token permissions is required:
    • Access: Apps and Policies Write
    Add an Access applicationbash
    curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/apps" \
    	--request POST \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
    	--json '{
    		"domain": "<SUBDOMAIN>.proxy.cloudflare-gateway.com",
    		"name": "Proxy Endpoint App",
    		"session_duration": "12h",
    		"type": "proxy_endpoint",
    		"policies": [
    				{
    						"id": "<ACCESS_POLICY_ID>"
    				}
    		]
    	}'

    <SUBDOMAIN> 替换为步骤 2 中的子域,并将 <ACCESS_POLICY_ID> 替换为现有 Access 策略的 ID。

Source IP endpoint

要创建源 IP 终结点:

  1. 使用 创建代理终结点 并进行以下调用:

    Create a proxy endpointbash
    curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/gateway/proxy_endpoints" \
    	--request POST \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
    	--json '{
    		"name": "any_name",
    		"ips": [
    				"<PUBLIC_IP>",
    				"<PUBLIC_IP2>",
    				"<PUBLIC_IP3>"
    		]
    	}'

    以 CIDR 表示法将 <PUBLIC_IP> 替换为您的设备的源 IP 地址。例如:

    • IPv4: 192.0.2.0/8
    • IPv6: 2001:0db8:0000:0000:0000:1234:5678:0000/32
  2. 响应返回类似于以下内容之输出:

    Example outputjson
    {
    	"result": {
    		"id": "d969d7bf-ec28-4291-9af0-86825f472c21",
    		"name": "test",
    		"created_at": "2022-03-02T10:57:18.094789Z",
    		"updated_at": "2022-03-02T10:57:18.094789Z",
    		"ips": ["90.90.241.229/8"],
    		"subdomain": "3ele0ss56t"
    	},
    	"success": true,
    	"errors": [],
    	"messages": []
    }

    注意 API 返回的 subdomain 值。您的 Cloudflare 代理服务器域名的格式为:

    <SUBDOMAIN>.proxy.cloudflare-gateway.com

    在上面的示例中,子域是 3ele0ss56t,代理服务器域名是 3ele0ss56t.proxy.cloudflare-gateway.com

2. 创建 PAC 文件

PAC 文件是一个使用 JavaScript 编写的文本文件,用于指定哪些流量应重定向到代理服务器。您可以在 Cloudflare 仪表板中创建 PAC 文件,也可以编写自己的自定义 PAC 文件。

创建托管的 PAC 文件

当您在 Cloudflare One 中创建 PAC 文件时,Cloudflare 将在公开可访问的 Worker 中托管该文件。托管的 PAC 文件会自动通过 Cloudflare 的全球网络分发。

要创建托管的 PAC 文件:

  1. Cloudflare One 中,转到 Networks(网络) > Resolvers & Proxies(解析器和代理)

  2. 选择 Proxy endpoints(代理终结点)

  3. 创建代理终结点或选择现有终结点,然后选择 Edit(编辑)

  4. 选择 Add PAC file(添加 PAC 文件)

  5. 配置您的 PAC 文件:

    在 **PAC file details(PAC 文件详细信息)**中:

    1. 输入 Basic information(基本信息),包括名称和可选的描述。 2.(可选)自定义 **URL alias (slug)(URL 别名)**以创建易于记忆的 URL 路径。别名在创建后无法更改。
    2. 在 **PAC file configuration(PAC 文件配置)**中,选择 **Browse PAC file configuration templates(浏览 PAC 文件配置模板)**并选择一个预配置的模板进行自定义。可用的模板包括 Okta 和 Azure。选择模板后,PAC file JavaScript(PAC 文件 JavaScript) 将填充所选模板的内容。
    3. 修改 JavaScript 以匹配您的网络要求。

    在 **Setup instructions(设置说明)**中:

    1. 选择浏览器。
    2. 按照 Cloudflare One 中的说明配置设备。
  6. 选择 Create(创建)

您的托管 PAC 文件 URL 将为:

https://pac.cloudflare-gateway.com/<account-id>/<slug>

其中:

  • <account-id> 是您的 Cloudflare 账户 ID
  • <slug> 是您指定的自定义路径(如果未自定义,则为自动生成的值)

托管 PAC 文件的限制

Cloudflare 托管的 PAC 文件具有以下限制:

  • 最大文件大小:每个 PAC 文件 256 KB
  • 每个账户的最大 PAC 文件数:50 个(非 Enterprise 计划)或 1,000 个(Enterprise 计划)
  • 更新传播:对 PAC 文件的更改会在几秒到几分钟内传播到全球网络

缓存行为

出于性能和可靠性考虑,托管的 PAC 文件在全球范围内进行缓存:

  • 浏览器和操作系统可能会根据其自身的策略在本地缓存 PAC 文件
  • 对托管 PAC 文件的更新会自动使缓存失效
  • 如果需要强制客户端获取新版本,您可能需要根据客户端配置清除浏览器缓存或重启浏览器

自托管 PAC 文件

您还可以将 PAC 文件托管在您自己的基础设施上,例如内部 Web 服务器或 Cloudflare Workers。自托管可让您完全控制托管环境,但需要您管理可用性和分发。

代理终结点限制

每个账户拥有的代理终结点最大数量为:

  • 非 Enterprise 计划:50 个代理终结点
  • Enterprise 计划:500 个代理终结点

3. 配置您的设备

3a. 安装 Cloudflare 证书

您必须在您的设备上安装 Cloudflare 证书。授权终结点使用该证书来检查 TLS 流量并读取授权 Cookie。源 IP 终结点使用该证书来应用 Gateway HTTP 策略,例如拦截特定域或显示 Gateway 拦截页面。

3b. 配置浏览器以使用 PAC 文件

所有主流浏览器都支持 PAC 文件。您可以配置单个浏览器,也可以配置适用于设备上所有浏览器的系统级代理设置。只要多个设备的源 IP 地址已包含在代理终结点配置中,它们就可以调用同一个 PAC 文件。

有关特定于操作系统的详细说明(包括 Windows、macOS、Linux、iOS ... Android、ChromeOS 和企业部署),请参阅在设备上配置 PAC 文件

基于 Chromium 的浏览器

基于 Chromium 的浏览器(例如 Google Chrome、Microsoft Edge 和 Brave)依赖于操作系统的代理服务器设置。在您的操作系统代理设置中配置 PAC 文件 URL。

Mozilla Firefox

Firefox 默认使用自己的代理设置,不继承操作系统代理配置。您必须单独配置 Firefox。有关分步说明,请参阅单独配置 Firefox

Safari

Safari 依赖于操作系统的代理服务器设置。在您的macOS 代理设置中配置 PAC 文件 URL。

4. 测试您的 HTTP 策略

要测试您的配置,请创建一个 HTTP 策略以拦截测试域。当您在浏览器中访问被拦截的域时,您应该会看到 Gateway 拦截页面。

您现在可以使用网络HTTP 策略中的 Proxy Endpoint 选择器来过滤通过 PAC 文件代理的流量。

5.(可选)配置防火墙

您可能需要配置组织的防火墙以允许用户连接到代理终结点。根据您的防火墙,您将需要使用代理终结点的域名或 IP 地址创建规则。

要获取代理终结点的域名:

  1. Cloudflare One 中,转到 Networks(网络) > Resolvers & Proxies(解析器和代理) > Proxy endpoints(代理终结点)
  2. 选择代理终结点。选择 Edit(编辑)
  3. Proxy Endpoint(代理终结点) 中,复制域名。
  1. 使用 列出代理终结点 操作来获取您的代理终结点及其详细信息的列表。例如:

    List proxy endpointsbash
    curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/gateway/proxy_endpoints" \
    	--request GET \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
    {
    	"success": true,
    	"result": {
    		"id": "ed35569b41ce4d1facfe683550f54086",
    		"created_at": "2014-01-01T05:20:00.12345Z",
    		"ips": ["192.0.2.1/32"],
    		"name": "DevOps team",
    		"subdomain": "oli3n9zkz5.proxy.cloudflare-gateway.com",
    		"updated_at": "2014-01-01T05:20:00.12345Z"
    	}
    }
  2. 找到您要使用的代理终结点。

  3. 复制 subdomain 键的值。

使用您的代理终结点的域名,您可以获取分配给该代理终结点的 IP 地址:

  1. 打开终端。

  2. 在您的代理终结点的 A 记录上运行 dig 以获取其 IPv4 地址。例如:

    dig A example.cloudflare-gateway.com +short
    162.159.36.5
    162.159.36.20
  3. 在您的代理终结点的 AAAA 记录上运行 dig 以获取其 IPv6 地址。例如:

    dig AAAA example.cloudflare-gateway.com +short
    2606:4700:54::a29f:2407
    2606:4700:5c::a29f:2e07
  1. 打开 PowerShell 终端。

  2. 在您的代理终结点的 A 记录上运行 Resolve-DnsName。您的代理终结点的 IPv4 地址将显示在 IPAddress 下。例如:

    Resolve-DnsName -Name example.cloudflare-gateway.com -Type A
    Name                                           Type   TTL   Section    IPAddress
    ----                                           ----   ---   -------    ---------
    example.cloudflare-gateway.com                 A      300   Answer     162.159.36.5
    example.cloudflare-gateway.com                 A      300   Answer     162.159.36.20
  3. 在您的代理终结点的 AAAA 记录上运行 Resolve-DnsName。您的代理终结点的 IPv6 地址将显示在 IPAddress 下。例如:

    Resolve-DnsName -Name example.cloudflare-gateway.com -Type AAAA
    Name                                           Type   TTL   Section    IPAddress
    ----                                           ----   ---   -------    ---------
    example.cloudflare-gateway.com                 AAAA   300   Answer     2606:4700:5c::a29f:2e07
    example.cloudflare-gateway.com                 AAAA   300   Answer     2606:4700:54::a29f:2407

要确保允许响应通过您的防火墙,请添加一条入站规则以允许 Cloudflare 代理终结点的静态 IPv4 地址:162.159.193.21

编辑代理终结点

您可以在创建后修改代理终结点设置。

编辑授权终结点

  1. Cloudflare One 中,转到 Networks(网络) > Resolvers & Proxies(解析器和代理) > Proxy endpoints(代理终结点)
  2. 找到您的授权终结点(在 Type(类型) 下显示为 Authorization)。
  3. 选择三个点,然后选择 Configure(配置)
  4. 选择要编辑的内容:
    • Basic information(基本信息):更新终结点名称和描述。
    • Access policies(Access 策略):添加、删除或修改控制谁可以使用终结点的 Access 策略。
    • Login methods(登录方法):选择用户可以使用哪些身份提供程序进行身份验证。
  5. 选择 Save(保存)

编辑源 IP 终结点

  1. Cloudflare One 中,转到 Networks(网络) > Resolvers & Proxies(解析器和代理) > Proxy endpoints(代理终结点)
  2. 找到您的源 IP 终结点(在 Type(类型) 下显示为 Source IP)。
  3. 选择三个点,然后选择 Configure(配置)
  4. 更新终结点名称或修改允许的源 IP 地址。
  5. 选择 Save(保存)

日志

代理终结点流量会记录在以下位置:

  • 身份验证日志:当用户通过授权终结点进行身份验证时,登录事件将显示在您的 Access 日志中。
  • 流量日志:通过终结点代理的 HTTP 和网络流量将显示在 Gateway 日志中,并指明具体的代理终结点。

计费

每个通过授权代理终结点进行身份验证的用户都会占用一个 Gateway 席位(seat),与通过 Cloudflare One Client 连接的用户相同。

局限性

授权终结点局限性

使用授权终结点时,请注意以下局限性。关于包含证书锁定的应用的配置指南,请参阅 PAC 文件最佳实践

需要 TLS 检查

授权终结点要求对所有代理的流量进行 TLS 检查。Gateway 必须解密 HTTPS 请求以读取标识每个用户会话的授权 Cookie。Gateway 始终会对通过授权终结点路由的流量执行 TLS 解密,即使您在账户级别关闭了 TLS 解密。在使用授权终结点时,您无法针对特定目标选择性地绕过 TLS 检查。

明文 HTTP 流量

授权终结点不支持明文 HTTP 流量,除非该流量是通过 Access 应用程序配置的,或者在 PAC 文件中被绕过。

Referer 标头流量

如果流量包含的 referer HTTP 标头与来自同一源 IP 的最近登录用户的域匹配,则该流量将被允许通过,并使用以下无身份电子邮件地址进行记录:

auth-proxy-non-identity@<your-team-name>.cloudflareaccess.com

其中 <your-team-name> 是您的团队名称

发生这种情况是因为浏览器不会使用验证用户身份验证的身份 Cookie 来标记 HTTP 子请求。这是基于代理的 Secure Web Gateway 的行业标准行为。

要过滤此流量,您有两种选择:

  • 设置一个 HTTP 策略以拦截或允许与 auth-proxy-non-identity@<your-team-name>.cloudflareaccess.com 电子邮件地址匹配的所有流量。
  • 要将无身份流量限制在特定的源 IP 上,请创建一条同时匹配源 IP 和代理终结点的网络策略

流量限制

每种类型的代理终结点支持以下功能:

功能 源 IP 终结点 授权终结点
HTTP/HTTPS 流量 1 2
非 HTTP TCP 流量
UDP 流量
HTTP3
基于身份的策略
mTLS 身份验证
Happy Eyeballs
浏览器 HTTPS 自动升级 3 3

会话持续时间

所有通过 Cloudflare Gateway 代理的连接最大保证持续时间为 10 小时。欲了解更多信息,请参阅故障排除

Gateway DNS 和解析器策略

Gateway DNS解析器策略将始终适用于通过 PAC 文件代理的流量,无论设备配置如何。

Footnotes

  1. 对于 源 IP 终结点,要访问明文 HTTP(非 HTTPS)源站,请将其配置为 自托管的 Access 应用程序。这允许用户访问 HTTP 资源,同时通过 Access 策略维持安全性。

  2. 要使用 授权终结点 访问明文 HTTP(非 HTTPS)源站,请参阅 明文 HTTP 流量

  3. 当浏览器自动将 HTTP 请求升级为 HTTPS 时(例如 Chrome 的自动 HTTPS 升级),代理终结点不支持 HTTPS。如果您在访问被自动升级的网站时遇到连接问题,您可能需要禁用浏览器设置中的自动 HTTPS 升级或将该网站配置为例外。 2

这篇文档对您有帮助吗?