许多第三方服务(例如银行或合作伙伴的 API)只允许来自已知 IP 地址列表的连接。默认情况下,通过 Cloudflare Gateway 出站的流量与所有其他 Cloudflare One Client 用户共享同一个源 IP 地址,因此上游服务无法仅凭 IP 识别您的组织。
专用出口 IP 解决了这个问题。它们是仅分配给您账户的静态 IP 地址,您可以将其添加到上游白名单中。
出口策略控制针对给定连接使用哪个专用出口 IP。您可以根据用户身份、源或目的 IP 地址以及地理位置等属性来匹配流量。不匹配出口策略的流量默认使用性能最高的专用出口 IP。
Cloudflare 不会公布 Cloudflare One Client 的出口 IP 范围。Cloudflare One Client 出口 IP 未列在 Cloudflare IP 范围 ↗中。要获取专用的 Cloudflare One Client 出口 IP,请联系您的账户团队。
不匹配任何出口策略的流量将使用默认的 Gateway 出口 IP 从最近的 Cloudflare 数据中心出站。无论您的账户使用的是专用出口 IP 还是默认的共享 IP,这都适用。
如果两个数据中心与用户的距离相同,Gateway 会在它们之间分流流量。负载均衡器会使每个用户保持在同一个出口 IP 上,而不管是由哪个数据中心处理该请求。
一些上游服务仅接受基于特定 IP 版本的连接。要强制所有出口流量仅使用 IPv4 或 IPv6,请首先验证您正在过滤 DNS 流量,然后创建一条 DNS 策略以阻止 AAAA 或 A 记录。
以下出口策略配置发往第三方网络的所有流量使用静态源 IP:
| 策略名称 | 选择器 | 运算符 | 值 | Egress 方式 |
|---|---|---|---|---|
| 访问第三方提供商 | 目标 IP (Destination IP) | is | 198.51.100.158 |
专用 Cloudflare egress IP |
| 主 IPv4 地址 | IPv6 地址 |
|---|---|
203.0.113.88 |
2001:db8::/32 |
许多 SaaS 提供商(例如 Microsoft 365、Salesforce 或 Workday)允许您限制来自特定 IP 地址的连接的访问。您可以使用 Gateway 的专用出口 IP 来强制执行此限制:
- 从您的账户团队获取专用出口 IP,并记录分配的 IPv4 和 IPv6 地址。
- 创建一条出口策略,将发往 SaaS 提供商的流量通过您的专用出口 IP 进行路由。使用 Destination IP 选择器并指定该提供商公布的 IP 范围。或者,使用 Application 选择器(Beta)按名称匹配提供商。
- 将出口 IP 添加到 SaaS 提供商的白名单中,以便提供商仅接受来自您组织 IP 的连接。
- 配合 HTTP 策略以添加更深层次的控制。例如,阻止向个人账户上传文件,强制执行 DLP 配置文件以防止敏感数据流出组织,或者在允许访问前要求进行设备姿态检查。
这种模式可确保对 SaaS 应用程序的访问仅限于通过 Gateway(在此处执行您的安全策略)的流量,且 SaaS 提供商能够验证流量确实源自您的组织。
如果没有 catch-all 策略,任何与明确出口策略不匹配的流量都将尝试使用最近的专用出口 IP 位置。为避免出现异常的 IP 分配并保持最佳性能,请创建一条 catch-all 策略,将剩余流量通过默认的 Zero Trust IP 范围路由:
| 策略名称 | 选择器 | 运算符 | 值 | 出口方法 |
|---|---|---|---|---|
| 默认出口策略 | Protocol | in | All options (Protocol) |
Cloudflare 默认出口方法 |
UI 中的 Gateway 策略按从上到下的顺序进行评估。将 catch-all 策略放在列表底部,以便先评估更具体的策略。
当您配置出口策略时,您可以选择是使用默认的 Cloudflare 出口方法还是使用专用出口 IP 来进行流量出站。
Use default Cloudflare egress method 将流量通过所有 Zero Trust 账户共享的默认源 IP 范围进行路由。流量从最近的 Cloudflare 数据中心出站,从而提供最佳性能。
Use dedicated egress IPs (Cloudflare or BYOIP)(使用专用出口 IP(Cloudflare 或 BYOIP)) 将流量通过您在下拉菜单中选择的主 IPv4 地址和 IPv6 范围进行路由。
在使用专用出站 IP 创建出站策略时,您必须设置一个辅助 IPv4 地址以确保流量弹性。您可以将辅助 IPv4 地址设置为 0.0.0.0,或设置为与您的主 IPv4 地址不同的特定 Cloudflare 位置。如果您将辅助 IPv4 地址设置为 0.0.0.0,Gateway 会将流量路由到离用户最近的位置。如果主 IPv4 地址的物理位置不可用,Gateway 会将流量路由到默认的 Cloudflare 出站范围或指定的辅助位置。
如果与您的主要 IPv4 地址关联的数据中心发生故障,Gateway 将故障转移到二级数据中心以防止流量中断。不需要二级 IPv6 地址,因为 IPv6 流量可以从任何 Cloudflare 数据中心出站。您可以使用 Cloudflare 提供的 IP,也可以自带 IP 地址 (BYOIP)。
如需详细了解 IPv4 和 IPv6 出站行为,请参阅出口位置。
选择器是 Gateway 用于将出口流量与策略进行匹配的标准。Gateway 评估以下选择器:
您可以将 egress 策略应用于不断增加的流行 Web 应用程序列表。有关详细信息,请参阅 应用程序和应用类型。
| UI 名称 | API 示例 |
|---|---|
| Application(应用程序) | any(app.ids[*] in {505}) |
此选择器仅适用于接入到流量和 DNS 模式、PAC 文件或浏览器隔离 (Browser Isolation) 的流量。有关详细信息,请参阅 选择器前提条件。
由 Cloudflare Radar 分类属于特定安全类别的应用程序。
| UI 名称 | API 示例 |
|---|---|
| Content Categories(内容类别) | any(net.fqdn.content_category[*] in {1}) |
此选择器仅适用于接入到流量和 DNS 模式、PAC 文件或浏览器隔离 (Browser Isolation) 的流量。有关详细信息,请参阅 选择器前提条件。
请求发往的大陆。地理位置由目标 IP 地址决定。要指定大陆,请在 Value(值) 字段中输入其两位字母代码:
| 大陆 | 代码 |
|---|---|
| 非洲 | AF |
| 南极洲 | AN |
| 亚洲 | AS |
| 欧洲 | EU |
| 北美洲 | NA |
| 大洋洲 | OC |
| 南美洲 | SA |
| Tor 网络 | T1 |
| UI 名称 | API 示例 |
|---|---|
| Destination Continent IP Geolocation(目标大陆 IP 地理位置) | net.dst.geo.continent == "EU" |
请求发往的国家。地理位置由目标 IP 地址决定。要指定国家,请在 Value(值) 字段中输入其 ISO 3166-1 Alpha 2 代码 ↗。
| UI 名称 | API 示例 |
|---|---|
| Destination Country IP Geolocation(目标国家/地区 IP 地理位置) | net.dst.geo.country == "RU" |
请求目标的 IP 地址。
| UI 名称 | API 示例 |
|---|---|
| Destination IP(目标 IP) | any(net.dst.ip[*] in {10.0.0.0/8}) |
请求目标的端口号。
| UI 名称 | API 示例 |
|---|---|
| Destination Port(目标端口) | net.dst.port == 2222 |
通过设备状态 (Device Posture) 选择器,管理员可以使用来自最终用户设备的信号来保护对其内部和外部资源的访问。例如,安全管理员可以根据设备上是否安装了特定软件以及/或者设备或软件是否以特定方式配置,来选择限制对内部应用程序的所有访问。
有关设备状态检测的更多信息,请参阅 设备状态 (Device posture)。
| UI 名称 | API 示例 |
|---|---|
| Passed Device Posture Checks(已通过的设备状况检查) | any(device_posture.checks.failed[*] in {"1308749e-fcfb-4ebc-b051-fe022b632644"}), any(device_posture.checks.passed[*] in {"1308749e-fcfb-4ebc-b051-fe022b632644"})" |
使用此选择器可匹配某个域名及其所有子域名。例如,您可以匹配 example.com 及其子域名,如 www.example.com。
| UI 名称 | API 示例 |
|---|---|
| Domain(域名) | any(net.fqdn.domains[*] == "example.com") |
Gateway 策略不支持直接使用包含非拉丁字符的 domain。要使用包含非拉丁字符的 domain,请将其添加到列表中。
此选择器仅适用于接入到流量和 DNS 模式、PAC 文件或浏览器隔离 (Browser Isolation) 的流量。有关详细信息,请参阅 选择器前提条件。
使用此选择器仅匹配指定的主机名。例如,您可以匹配 test.example.com,但不能匹配 example.com 或 www.test.example.com。
| UI 名称 | API 示例 |
|---|---|
| Host(主机) | net.fqdn.host == "example.com" |
Gateway 策略不支持直接使用包含非拉丁字符的 hostname。要使用包含非拉丁字符的 hostname,请将其添加到列表中。
此选择器仅适用于接入到流量和 DNS 模式、PAC 文件或浏览器隔离 (Browser Isolation) 的流量。有关详细信息,请参阅 选择器前提条件。
用于发送数据包的协议。
| UI 名称 | API 示例 |
|---|---|
| Protocol(协议) | net.protocol == "tcp" |
您的浏览器转发 HTTP 流量的目标代理服务器。
| UI 名称 | API 示例 |
|---|---|
| Proxy Endpoint(代理端点) | proxy.endpoint == "3ele0ss56t.proxy.cloudflare-gateway.com" |
发起请求的用户的源大陆。
地理位置是根据设备的公网 IP 地址(通常由用户的 ISP 分配)决定的。要指定大洲,请在值字段中输入其两位字母代码:
| 大洲 | 代码 |
|---|---|
| 非洲 | AF |
| 南极洲 | AN |
| 亚洲 | AS |
| 欧洲 | EU |
| 北美洲 | NA |
| 大洋洲 | OC |
| 南美洲 | SA |
| Tor 网络 | T1 |
| UI 名称 | API 示例 |
|---|---|
| Source Continent IP Geolocation(源大陆 IP 地理位置) | net.src.geo.continent == "North America" |
发起请求的用户的源国家/地区。
地理位置是根据设备的公网 IP 地址(通常由用户的 ISP 分配)决定的。要指定国家/地区,请在值字段中输入其 ISO 3166-1 Alpha-2 代码 ↗。
| UI 名称 | API 示例 |
|---|---|
| Source Country IP Geolocation(源国家/地区 IP 地理位置) | net.src.geo.country == "RU" |
使用此选择器将 egress 策略应用于用户本地网络分配的、向 Gateway 发送请求的私有 IP 地址。
| UI 名称 | API 示例 |
|---|---|
| Source Internal IP(源内部 IP) | net.src.internal_src_ip == "192.168.86.0/27" |
由 Gateway 代理的设备的原始 IP 地址。
| UI 名称 | API 示例 |
|---|---|
| Source IP(源 IP) | net.src.ip[*] in {10.0.0.0/8} |
由 Gateway 代理的设备的原始端口。
| UI 名称 | API 示例 |
|---|---|
| Source Port(源端口) | net.src.port == "2222" |
使用这些选择器来匹配身份属性。
| UI 名称 | API 示例 |
|---|---|
| User Email(用户电子邮件) | identity.email == "[email protected]" |
| User Name(用户名) | identity.name == "Test User" |
| User Group IDs(用户组 ID) | any(identity.groups[*].id in {"group_id"}) |
| User Group Names(用户组名称) | any(identity.groups[*].name in {"group_name"}) |
| User Group Emails(用户组电子邮件) | any(identity.groups[*].email in {"[email protected]"}) |
| SAML Attributes(SAML 属性) | any(identity.saml_attributes["http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"] in {"Test User"}) |
使用此选择器匹配所有通过 Cloudflare One 客户端路由到特定虚拟网络(Virtual Network)的流量。
| UI 名称 | API 示例 |
|---|---|
| Virtual Network(虚拟网络) | net.vnet_id == "957fc748-591a-e96s-a15d-1j90204a7923" |
比较运算符是 Gateway 将流量与选择器进行匹配的方式。当您在仪表板策略生成器中选择 Selector(选择器) 时,Operator(运算符) 下拉菜单将显示该选择器的可用选项。
| 运算符 | 含义 |
|---|---|
| is(等于) | 等于所定义的值 |
| is not(不等于) | 不等于所定义的值 |
| in(属于) | 匹配至少一个所定义的值 |
| not in(不属于) | 不匹配任何所定义的值 |
| in list(在列表中) | 在预定义的列表值中 |
| not in list(不在列表中) | 不在预定义的列表值中 |
| matches regex(匹配正则表达式) | 正则表达式计算结果为 true |
| does not match regex(不匹配正则表达式) | 正则表达式计算结果为 false |
| greater than(大于) | 超过所定义的数字 |
| greater than or equal to(大于或等于) | 超过或等于所定义的数字 |
| less than(小于) | 低于所定义的数字 |
| less than or equal to(小于或等于) | 低于或等于所定义的数字 |
您可以输入单个值,也可以使用正则表达式指定值范围。
Gateway 使用 Rust 来评估正则表达式。Rust 的实现与其它地方使用的正则表达式库略有不同。要评估您的正则表达式是否匹配,可以使用 Rustexp ↗。
要在表达式中评估多个条件,请选择 And(与) 逻辑运算符。这些表达式可以使用 Or(或) 逻辑运算符进行进一步比较。
| 运算符 | 含义 |
|---|---|
| And(与) | 匹配表达式中的所有条件 |
| Or(或) | 匹配表达式中的任一条件 |
Or(或) 运算符仅适用于同一表达式组中的条件。例如,您无法将流量中的条件与 Identity or Device Posture 中的条件进行比较。
Application、Content Categories、Domain 和 Host 选择器在出口策略中起作用前,需要额外的设置。在部署带有这些选择器的策略之前,请参阅主机选择器。
这些选择器也是在 Gateway 处理 DNS 查询时解析目的地 IP 地址,而不是在应用出口策略时解析。如果解析的目的地 IP 与您的出口 IP 位于不同区域,发往执行地理限制或 IP 白名单的目标站点的连接可能会失败。详情请参阅DNS 解析位置。