网络策略控制用户与网络目的地之间的 TCP 和 UDP 流量。使用它们可以根据 IP 地址、端口和协议允许或阻止非 HTTP 流量,如 SSH、RDP 和数据库连接。
因为 Cloudflare One 与您的身份提供商集成,您还可以创建基于身份的网络策略。这使您能够跨用户控制对非 HTTP 资源的访问,而无需考虑用户的位置或设备。
网络策略由一个 **Action(操作)**和一个决定操作范围的逻辑表达式组成。要构建表达式,请选择 **Selector(选择器)**和 Operator(运算符),然后在 **Value(值)**字段中输入值或值范围。您可以使用 And 和 Or 逻辑运算符来评估多个条件。
如果表达式中的条件结合了 query 属性(例如 Source IP)和响应属性(例如 Resolved IP),则该条件将在收到响应时进行评估。
与 DNS 和 HTTP 策略中的操作类似,网络策略中的操作定义了您想要应用于给定的一组元素的决策。您可以为每条策略分配一个操作。
API 值:allow
可用选择器
流量
- Access Infrastructure Target
- Access Private App
- Application
- Content Categories
- Destination Continent IP Geolocation
- Destination Country IP Geolocation
- Destination IP
- Destination Port
- Detected Protocol
- Protocol
- Proxy Endpoint
- Security Risks
- SNI
- SNI Domain
- Source Continent IP Geolocation
- Source Country IP Geolocation
- Source Internal IP
- Source IP
- Source Port
- Virtual Network
身份
设备姿态
具有 Allow 操作的策略允许网络流量到达某些 IP 或端口。在默认阻止(default-block)配置中,Allow 策略定义了例外情况 —— 不匹配 Allow 策略的流量将被优先级较低的兜底 Block 策略所阻止。例如,以下配置允许特定用户到达给定的 IP 地址:
| 选择器 | 运算符 | 值 | 逻辑 | 操作 |
|---|---|---|---|---|
| Destination IP(目标 IP) | in(属于) | 92.100.02.102 |
And(且) | Allow(允许) |
| Email(电子邮件) | in(属于) | *@example.com |
API 值:audit_ssh
可用选择器
流量
- Application
- Destination Continent IP Geolocation
- Destination Country IP Geolocation
- Destination IP
- Source Continent IP Geolocation
- Source Country IP Geolocation
- Source Internal IP
- Source IP
- Source Port
- Virtual Network
身份
设备姿态
具有 Audit SSH 操作的策略允许管理员记录 SSH 流量。Gateway 将检测端口 22 上的 SSH 流量。例如,以下配置记录发送到给定 IP 地址的 SSH 命令:
| 选择器 | 运算符 | 值 | 操作 |
|---|---|---|---|
| Destination IP(目标 IP) | in(属于) | 203.0.113.83 |
Audit SSH(审计 SSH) |
Gateway 仅审计端口 22 上的 SSH 流量。不支持非标准端口,包括使用 Destination Port 选择器指定的端口。
有关 SSH 记录日志的更多信息,请参阅配置 SSH 代理和命令日志。
API 值:block
可用选择器
流量
- Access Infrastructure Target
- Access Private App
- Application
- Content Categories
- Destination Continent IP Geolocation
- Destination Country IP Geolocation
- Destination IP
- Destination Port
- Detected Protocol
- Protocol
- Proxy Endpoint
- Security Risks
- SNI
- SNI Domain
- Source Continent IP Geolocation
- Source Country IP Geolocation
- Source Internal IP
- Source IP
- Source Port
- Virtual Network
身份
设备姿态
具有 Block 操作的策略会阻止网络流量到达某些 IP 或端口。例如,以下配置会阻止指向端口 443 的所有流量:
| 选择器 | 运算符 | 值 | 操作 |
|---|---|---|---|
| Destination Port(目标端口) | in(属于) | 443 |
Block(阻止) |
功能可用性
| 客户端模式 | Zero Trust 计划 ↗ |
|---|---|
|
Enterprise |
| 系统 | 可用性 | 最低客户端版本 |
|---|---|---|
| Windows | ✅ | 2024.1.159.0 |
| macOS | ✅ | 2024.1.160.0 |
| Linux | ❌ | |
| iOS | ✅ | 1.7 |
| Android | ✅ | 1.4 |
| ChromeOS | ✅ | 1.4 |
开启 Display block notification for Cloudflare One Client 以显示 Gateway 拦截事件的通知。被拦截的用户将收到来自 Cloudflare One 客户端的操作系统通知,其中包含您设置的自定义消息。如果您没有设置自定义消息,Cloudflare One 客户端将显示默认消息。自定义消息长度必须在 100 个字符或以内。Cloudflare One 客户端每分钟只会显示一条通知。
选择该通知后,Cloudflare One 客户端将引导您的用户访问您配置的 Gateway 拦截页面。或者,您也可以将用户引导至自定义 URL,例如内部支持表单。
开启发送策略上下文时,Gateway 会将匹配请求的详细信息作为查询字符串附加到重定向的 URL 中。并非每个上下文字段都会被包含。可能包含的策略上下文字段包括:
策略上下文字段
| 字段 | 定义 | 示例 |
|---|---|---|
| User email(用户电子邮件) | 发起查询的用户的电子邮件。 | &cf_user_email=user@example.com |
| Site URL | 原始 HTTP 请求的完整 URL,或 DNS 查询中的域名。 | &cf_site_uri=https%3A%2F%2Fmalware.testcategory.com%2F |
| URL category | 要重定向的 URL 的域类别。 | &cf_request_categories=New%20Domains,Newly%20Seen%20Domains |
| Original HTTP referer | 对于 HTTP 流量,则是 HTTP 请求的原始 HTTP referer 标头。 | &cf_referer=https%3A%2F%2Fexample.com%2F |
| Rule ID | 与请求匹配的 Gateway 策略的 ID。 | &cf_rule_id=6d48997c-a1ec-4b16-b42e-d43ab4d071d1 |
| Source IP | 匹配策略的设备的源 IP 地址。 | &cf_source_ip=203.0.113.5 |
| Device ID | 匹配策略的设备的 UUID。 | &cf_device_id=6d48997c-a1ec-4b16-b42e-d43ab4d071d1 |
| Application names | 重定向的域所对应的应用程序名称(如果有)。 | &cf_application_name=Salesforce |
| Filter | 触发拦截的流量类型过滤器。 | &cf_filter=http, &cf_filter=dns, &cf_filter=av, or &cf_filter=l4 |
| Account ID | 关联的 Zero Trust 账户的 Cloudflare 账户 ID。 | &cf_account_id=d57c3de47a013c03ca7e237dd3e61d7d |
| Query ID | 重定向对其生效的 DNS 查询的 ID。 | &cf_query_id=f8dc6fd3-a7a5-44dd-8b77-08430bb4fac3 |
| Connection ID | 重定向对其生效的代理连接的 ID。 | &cf_connection_id=f8dc6fd3-a7a5-44dd-8b77-08430bb4fac3 |
| Request ID | 重定向对其生效的 HTTP 请求的 ID。 | &cf_request_id=f8dc6fd3-a7a5-44dd-8b77-08430bb4fac3 |
确保您的操作系统允许 Cloudflare One 客户端发送通知。如果启用了专注模式、勿扰模式或屏幕共享设置,您的设备可能不会显示通知。要在运行 DisplayLink 软件的 macOS 设备上启用客户端通知,您可能需要在镜像显示器时允许系统通知。有关更多信息,请参阅 macOS 文档 ↗。
API 值:l4_override
可用选择器
流量
- Destination Continent IP Geolocation
- Destination Country IP Geolocation
- Destination IP
- Destination Port
- Protocol
- SNI
- SNI Domain
- Source Continent IP Geolocation
- Source Country IP Geolocation
- Source Internal IP
- Source IP
- Source Port
- Virtual Network
身份
设备姿态
具有 Network Override 操作的策略会覆盖流向或来自特定 IPv4/IPv6 地址或端口的流量。目标 IP 可以是公网 IP,也可以是连接到您的 Zero Trust 网络的私网 IP。例如,以下配置根据用户的身份,将发送到公网 IP 的流量覆盖为私网 IP:
| 选择器 | 运算符 | 值 | 逻辑 | 操作 |
|---|---|---|---|---|
| Destination IP(目标 IP) | in(属于) | 95.92.143.151 |
And(且) | Network Override(网络覆盖) |
| User Email(用户电子邮件) | in(属于) | *@example.com |
And(且) | |
| Override IP(覆盖 IP) | 10.0.0.1 |
Gateway 仅在您的网络日志中记录成功的覆盖连接。
Gateway 会将网络流量与以下选择器(或标准)进行匹配。
由 Access 基础设施应用程序 保护的所有 目标。
| UI 名称 | API 示例 |
|---|---|
| Access Infrastructure Target(Access 基础设施目标) | access.target |
由 Access 自托管私有应用程序 保护的所有目标 IP 和主机名。
| UI 名称 | API 示例 |
|---|---|
| Self-hosted Access App with Private Address(具有私有地址的自托管 Access 应用程序) | access.private_app |
您可以将 network 策略应用于不断增加的流行 Web 应用程序列表。有关详细信息,请参阅 应用程序和应用类型。
| UI 名称 | API 示例 |
|---|---|
| Application(应用程序) | any(app.ids[*] in {505}) |
由 Cloudflare Radar 分类属于特定安全类别的应用程序。
| UI 名称 | API 示例 |
|---|---|
| Content Categories(内容类别) | any(net.fqdn.content_category[*] in {1}) |
请求发往的大陆。地理位置由目标 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 |
基于 Cloudflare 的协议检测所推导出的网络协议。
| UI 名称 | API 示例 |
|---|---|
| Detected Protocol(检测到的协议) | net.protocol.detection == "ssh" |
通过设备状态 (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"})" |
用于发送数据包的协议。
| UI 名称 | API 示例 |
|---|---|
| Protocol(协议) | net.protocol == "tcp" |
您的浏览器转发 HTTP 流量的目标代理服务器。
| UI 名称 | API 示例 |
|---|---|
| Proxy Endpoint(代理端点) | proxy.endpoint == "3ele0ss56t.proxy.cloudflare-gateway.com" |
由 Cloudflare Radar 分类属于特定安全类别的应用程序。
| UI 名称 | API 示例 |
|---|---|
| Security Categories(安全类别) | any(net.fqdn.security_category[*] in {1}) |
服务器名称指示 (SNI) 是客户端在 TLS 握手期间(加密开始前)发送的主机名。Gateway 读取 SNI 以识别加密流量的目的地。SNI 选择器匹配确切的主机名。
默认情况下,SNI 选择器仅适用于端口 443 上的 HTTPS 流量。要检查所有端口上的流量,请开启协议检测并选择在所有端口上进行检查。
| UI 名称 | API 示例 |
|---|---|
| SNI | net.sni.host == "www.example.com" |
Gateway 将针对其服务器名称指示 (SNI) 标头过滤流量的域名。例如,针对 example.com 的规则将匹配 example.com、www.example.com 和 my.test.example.com。
默认情况下,SNI 选择器仅适用于端口 443 上的 HTTPS 流量。要检查所有端口上的流量,请开启协议检测并选择在所有端口上进行检查。
| UI 名称 | API 示例 |
|---|---|
| SNI Domain(SNI 域名) | net.sni.domains == "example.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" |
使用此选择器将 network 策略应用于用户本地网络分配的、向 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 == "user@example.com" |
| 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 {"group@example.com"}) |
| 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(小于或等于) | 低于或等于所定义的数字 |
在值字段中,当使用等值比较运算符(例如 is)时,您可以输入单个值;当使用包含比较运算符(例如 in)时,您可以输入多个值。此外,您可以使用正则表达式来为受支持的选择器指定值范围。
正则表达式使用 Rust 进行评估。Rust 的实现与其他地方使用的正则表达式库略有不同。有关更多信息,请参阅我们的通配符指南。要评估您的正则表达式是否匹配,可以使用 Rustexp ↗。
如果您想匹配多个值,可以使用管道符号(|)作为 OR 运算符。您不需要在管道符号之前使用转义字符(\)。例如,当 SNI host 匹配 .*whispersystems.org 或 .*signal.org 时,以下表达式的计算结果为 true:
| 选择器 | 运算符 | 值 |
|---|---|---|
| SNI | matches regex | .*whispersystems.org|.*signal.org |
除了正则表达式外,您还可以使用逻辑运算符来匹配多个值。
要在表达式中评估多个条件,请选择 And(与) 逻辑运算符。这些表达式可以使用 Or(或) 逻辑运算符进行进一步比较。
| 运算符 | 含义 |
|---|---|
| And(与) | 匹配表达式中的所有条件 |
| Or(或) | 匹配表达式中的任一条件 |
Or(或) 运算符仅适用于同一表达式组中的条件。例如,您无法将流量中的条件与 Identity or Device Posture 中的条件进行比较。