Skip to content

Egress policies

Many third-party services (for example, a bank or partner API) only allow connections from a known list of IP addresses. By default, traffic that exits through Cloudflare Gateway shares a source IP address with all other Cloudflare One Client users, so upstream services cannot identify your organization by IP alone.

Dedicated egress IPs solve this problem. They are static IP addresses assigned only to your account, which you can add to upstream allowlists.

Egress policies control which dedicated egress IP is used for a given connection. You can match traffic on attributes such as user identity, source or destination IP address, and geolocation. Traffic that does not match an egress policy defaults to the most performant dedicated egress IP.

Cloudflare does not publish Cloudflare One Client egress IP ranges. Cloudflare One Client egress IPs are not listed at Cloudflare's IP Ranges. To obtain a dedicated Cloudflare One Client egress IP, contact your account team.

Load balancing

Traffic that does not match any egress policy exits from the closest Cloudflare data center using a default Gateway egress IP. This applies whether your account uses dedicated egress IPs or the default shared IPs.

If two data centers are equally close to the user, Gateway splits traffic between them. The load balancer keeps each user on the same egress IP regardless of which data center handles the request.

Force IP version

Some upstream services only accept connections over a specific IP version. To force all egress traffic to use IPv4 or IPv6 only, first verify you are filtering DNS traffic, then create a DNS policy to block AAAA or A records.

Example policies

The following egress policy configures all traffic destined for a third-party network to use a static source IP:

Policy nameSelectorOperatorValueEgress method
Access third-party providerDestination IPis198.51.100.158Dedicated Cloudflare egress IPs
Primary IPv4 addressIPv6 address
203.0.113.882001:db8::/32

Catch-all policy

Without a catch-all policy, any traffic that does not match an explicit egress policy will attempt to use the closest dedicated egress IP location. To avoid unexpected IP assignments and maintain the best performance, create a catch-all policy that routes remaining traffic through the default Zero Trust IP range:

Policy nameSelectorOperatorValueEgress method
Default egress policyProtocolinAll options (Protocol)Cloudflare default egress method

Gateway policies evaluate from top to bottom in the UI. Place the catch-all policy at the bottom of the list so that more specific policies are evaluated first.

Egress methods

When you configure your egress policy, you can choose whether to egress traffic using the default Cloudflare egress method or dedicated egress IPs.

Use default Cloudflare egress method

Use default Cloudflare egress method routes traffic through the default source IP range shared across all Zero Trust accounts. Traffic exits from the nearest Cloudflare data center, which provides the best performance.

Use dedicated egress IPs

Use dedicated egress IPs (Cloudflare or BYOIP) routes traffic through the primary IPv4 address and IPv6 range you select in the dropdown menus.

When creating egress policies with dedicated egress IPs, you must set a secondary IPv4 address to ensure traffic resilience. You can set the secondary IPv4 address to 0.0.0.0 or a specific Cloudflare location different from your primary IPv4 address. If you set the secondary IPv4 address to 0.0.0.0, Gateway will route traffic to the location closest to the user. If the physical location of your primary IPv4 address is not available, Gateway will route traffic to either the default Cloudflare egress range or the secondary location specified.

If the data center associated with your primary IPv4 address goes down, Gateway fails over to the secondary data center to prevent traffic drops. A secondary IPv6 address is not required because IPv6 traffic can exit from any Cloudflare data center. You can use IPs provided by Cloudflare or bring your own IP addresses (BYOIP).

To learn more about IPv4 and IPv6 egress behavior, refer to Egress locations.

Selectors

Selectors are the criteria that Gateway uses to match egress traffic against a policy. Gateway evaluates the following selectors:

Application Beta

You can apply egress policies to a growing list of popular web applications. Refer to Application and app types for more information.

UI nameAPI example
Applicationany(app.ids[*] in {505})

This selector is only available for traffic onboarded to Traffic and DNS mode, PAC files, or Browser Isolation. For more information, refer to Selector prerequisites.

Content Categories Beta

Applications within a specific security category as categorized by Cloudflare Radar.

UI nameAPI example
Content Categoriesany(net.fqdn.content_category[*] in {1})

This selector is only available for traffic onboarded to Traffic and DNS mode, PAC files, or Browser Isolation. For more information, refer to Selector prerequisites.

Destination Continent

The continent where the request is destined. Geolocation is determined from the target IP address. To specify a continent, enter its two-letter code into the Value field:

ContinentCode
AfricaAF
AntarcticaAN
AsiaAS
EuropeEU
North AmericaNA
OceaniaOC
South AmericaSA
Tor networkT1
UI nameAPI example
Destination Continent IP Geolocationnet.dst.geo.continent == "EU"

Destination Country

The country that the request is destined for. Geolocation is determined from the target IP address. To specify a country, enter its ISO 3166-1 Alpha 2 code in the Value field.

UI nameAPI example
Destination Country IP Geolocationnet.dst.geo.country == "RU"

Destination IP

The IP address of the request's target.

UI nameAPI example
Destination IPany(net.dst.ip[*] in {10.0.0.0/8})

Destination Port

The port number of the request's target.

UI nameAPI example
Destination Portnet.dst.port == 2222

Device Posture

With the Device Posture selector, admins can use signals from end-user devices to secure access to their internal and external resources. For example, a security admin can choose to limit all access to internal applications based on whether specific software is installed on a device and/or if the device or software are configured in a particular way.

For more information on device posture checks, refer to Device posture.

UI nameAPI example
Passed Device Posture Checksany(device_posture.checks.failed[*] in {"1308749e-fcfb-4ebc-b051-fe022b632644"}), any(device_posture.checks.passed[*] in {"1308749e-fcfb-4ebc-b051-fe022b632644"})"

Domain Beta

Use this selector to match against a domain and all subdomains. For example, you can match example.com and its subdomains, such as www.example.com.

UI nameAPI example
Domainany(net.fqdn.domains[*] == "example.com")

Gateway policies do not support domains with non-Latin characters directly. To use a domain with non-Latin characters, add it to a list.

This selector is only available for traffic onboarded to Traffic and DNS mode, PAC files, or Browser Isolation. For more information, refer to Selector prerequisites.

Host Beta

Use this selector to match against only the hostname specified. For example, you can match test.example.com but not example.com or www.test.example.com.

UI nameAPI example
Hostnet.fqdn.host == "example.com"

Gateway policies do not support hostnames with non-Latin characters directly. To use a hostname with non-Latin characters, add it to a list.

This selector is only available for traffic onboarded to Traffic and DNS mode, PAC files, or Browser Isolation. For more information, refer to Selector prerequisites.

Protocol

The protocol used to send the packet.

UI nameAPI example
Protocolnet.protocol == "tcp"

Proxy Endpoint

The proxy server where your browser forwards HTTP traffic.

UI nameAPI example
Proxy Endpointproxy.endpoint == "3ele0ss56t.proxy.cloudflare-gateway.com"

Source Continent

The continent of the user making the request.

Geolocation is determined from the device's public IP address (typically assigned by the user's ISP). To specify a continent, enter its two-letter code into the Value field:

ContinentCode
AfricaAF
AntarcticaAN
AsiaAS
EuropeEU
North AmericaNA
OceaniaOC
South AmericaSA
Tor networkT1
UI nameAPI example
Source Continent IP Geolocationnet.src.geo.continent == "North America"

Source Country

The country of the user making the request.

Geolocation is determined from the device's public IP address (typically assigned by the user's ISP). To specify a country, enter its ISO 3166-1 Alpha-2 code in the Value field.

UI nameAPI example
Source Country IP Geolocationnet.src.geo.country == "RU"

Source Internal IP

Use this selector to apply egress policies to a private IP address, assigned by a user's local network, that requests arrive to Gateway from.

UI nameAPI example
Source Internal IPnet.src.internal_src_ip == "192.168.86.0/27"

Source IP

The originating IP address or addresses of a device proxied by Gateway.

UI nameAPI example
Source IPnet.src.ip[*] in {10.0.0.0/8}

Source Port

The originating port of a device proxied by Gateway.

UI nameAPI example
Source Portnet.src.port == "2222"

Users

Use these selectors to match against identity attributes.

UI nameAPI example
User Emailidentity.email == "user@example.com"
User Nameidentity.name == "Test User"
User Group IDsany(identity.groups[*].id in {"group_id"})
User Group Namesany(identity.groups[*].name in {"group_name"})
User Group Emailsany(identity.groups[*].email in {"group@example.com"})
SAML Attributesany(identity.saml_attributes["http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"] in {"Test User"})

Virtual Network

Use this selector to match all traffic routed through a specific Virtual Network via the Cloudflare One Client.

UI nameAPI example
Virtual Networknet.vnet_id == "957fc748-591a-e96s-a15d-1j90204a7923"

Comparison operators

Comparison operators are the way Gateway matches traffic to a selector. When you choose a Selector in the dashboard policy builder, the Operator dropdown menu will display the available options for that selector.

OperatorMeaning
isequals the defined value
is notdoes not equal the defined value
inmatches at least one of the defined values
not indoes not match any of the defined values
in listin a pre-defined list of values
not in listnot in a pre-defined list of values
matches regexregex evaluates to true
does not match regexregex evaluates to false
greater thanexceeds the defined number
greater than or equal toexceeds or equals the defined number
less thanbelow the defined number
less than or equal tobelow or equals the defined number

Value

You can input a single value or use regular expressions to specify a range of values.

Gateway uses Rust to evaluate regular expressions. The Rust implementation is slightly different than regex libraries used elsewhere. To evaluate if your regex matches, you can use Rustexp.

Logical operators

To evaluate multiple conditions in an expression, select the And logical operator. These expressions can be compared further with the Or logical operator.

OperatorMeaning
Andmatch all of the conditions in the expression
Ormatch any of the conditions in the expression

The Or operator will only work with conditions in the same expression group. For example, you cannot compare conditions in Traffic with conditions in Identity or Device Posture.

Limitations

Selector prerequisites

The Application, Content Categories, Domain, and Host selectors require additional setup before they work in egress policies. Before deploying policies with these selectors, refer to Host selectors.