T Techclick ← All lessons
Fortinet · FortiSASE · Interactive lesson

FortiSASE policy web, private, then path

Ticket: FortiClient is green, HTTPS to the internet works, and 10.20.20.80 still times out. That is not “SASE is down.” FortiSASE is three engines in one portal. SWG inspects internet. ZTNA opens a named TCP app. SD-WAN SPA is the IPsec/BGP path to a FortiGate hub. Classify the destination first. Lab: private net 10.20.20.0/24, hub 10.20.20.1, WAN 192.0.2.1, app 10.20.20.80:443.

16 min read · L2 primary · Quiz at end

After this page you can

Lessons · FortiSASE · SWG, ZTNA, SD-WAN policy

This page vs steering and FortiGate ZTNA

This lesson is which FortiSASE policy engine owns the session. FortiClient tunnel vs PAC is steering. On-prem ZTNA tags on a FortiGate without FortiSASE is a different control plane.

FortiClient steering · FortiGate ZTNA tags · FortiGate zone / NAT

Hero · one user, three exits
Laptop user through a FortiSASE cloud splitting to web, private app, and hub path
Mood, not a wiring diagram. Exact split is in the SVG: internet hits SWG, TCP app hits ZTNA, subnet 10.20.20.0/24 rides SD-WAN SPA. A green client icon is not an allow.
Quick answer

FortiSASE policy is not one list. SWG (Secure Internet Access / proxy) inspects internet and SaaS after FortiClient or PAC steers HTTP(S) to a PoP. ZTNA publishes a named TCP application through a FortiGate access proxy, matched on user and security posture tag. SD-WAN SPA makes FortiSASE PoPs spokes of a FortiGate hub over IPsec + BGP so 10.20.20.0/24 (TCP and UDP) is reachable — then a separate Secure private access policy (To hubs / From hubs) still has to accept. Order: web, private, then path. Proof is the matching log plus hub tunnel health, not FortiClient connected.

Why internet working is not private access

The day-one ticket is always the same: “SASE is up, so the private app should work.” Wrong. SWG succeeding only proves the endpoint reached a FortiSASE PoP and hit an internet policy. RFC1918 never uses that list.

Three silent-zero states look identical from the laptop (timeout to 10.20.20.80):

FortiClient green proves steering, not the allow

Agent-based SIA uses FortiClient to the PoP. Agentless SWG uses an explicit proxy / PAC. Neither is a private-access grant. Debug the engine that owns the destination, not the icon.

SWG, ZTNA, SD-WAN — three engines

Fortinet’s SASE split is SSE + networking. In the product that is FortiSASE (cloud SWG, ZTNA, FWaaS, CASB) joined to FortiGate Secure SD-WAN as the SPA hub. You still configure three policy families in the FortiSASE portal.

Path · web, then private, then path
Three glass panels labeled Web, Private and Path
Feel of the order. Exact objects — SWG policy, ZTNA application, SPA To-hubs — are in the SVG below. Do not read the Path panel as “SD-WAN replaces ZTNA.”

SWG / SIA

Internet and SaaS. Agent-based tunnel or agentless explicit proxy. Security › Traffic › Policies (internet / proxy). Profile group: web filter, DNS, AV, IPS, DLP, SSL inspection.

ZTNA

Named TCP app behind a FortiGate access proxy. User + security posture tag. Shortest path. Agentless ZTNA is a bookmark portal — still not a subnet VPN.

SD-WAN SPA

FortiSASE PoPs as spokes to a FortiGate hub. IPsec, BGP, SLA. All protocols. Then Secure private access › To hubs / From hubs still has to accept.

Shared glue

Identity (SAML/LDAP/RADIUS), FortiClient or PAC, security posture tags, security profile groups. Tags do not replace the destination object.

Say this out loud

Internet is SWG. A private TCP app is ZTNA. A private network, UDP, or existing SD-WAN hub is SPA. The path is not the permit. Each engine has its own policy list.

Web, private, then path

Do not start at the hub. Classify the destination. Internet stays on SWG. Private TCP with an access proxy stays on ZTNA. Everything that needs a routed overlay — subnet, UDP, spoke-to-hub — takes SD-WAN SPA, then a To-hubs accept.

Flow 1 · classify, then pick the engine
1 Endpoint FortiClient or PAC 2 PoP + identity user · posture tag 3 Destination class internet · named TCP app · routed subnet SWG / SIA 203.0.113.80:443 Traffic › Policies · internet profile group on accept ZTNA 10.20.20.80:443 TCP access proxy + app object user + SASE-Compliant SD-WAN SPA 10.20.20.0/24 any proto IPsec + BGP to hub To hubs accept still required Miss: SWG accept does not grant 10.20.20.80. ZTNA app does not grant UDP. Hub up does not grant To-hubs. Fix the engine that owns the destination. Do not rebuild the PAC file. Newer portal labels: Secure Internet Access / Proxy policies = SWG. Secure private access To hubs / From hubs = SPA. Source: FortiSASE Administration Guide — SWG Policies; SPA; Agentless ZTNA. FortiSASE Architecture Guide — SIA vs SPA using ZTNA vs SD-WAN.

Read left → right, then the three columns. Identity is shared. The allow is not.

ObjectLab valueIf missing
EndpointFortiClient agent, or PAC for agentless SWGNever reaches a PoP. Internet and private both fail.
Identity / taggroup remote-users · tag SASE-CompliantPolicy match empty. Tagged accept never hits.
SWG policySIA accept + profile group, dest internetHTTPS to 203.0.113.80 dies. Private app is a different ticket.
ZTNA appweb-int TCP 10.20.20.80:443 via access proxyBrowser to the FQDN times out. Subnet ping is not this engine.
SPA hubFortiGate 10.20.20.1, WAN 192.0.2.1, BGP 10.20.20.0/24No route to RFC1918 from the PoP. To-hubs policy never sees a dest.
SPA policyTo hubs Allow-SASE-Compliant before Allow-AllHub up, traffic denied. Order is first-match, same as FortiOS.

Which engine for this ticket

Pick by destination and protocol, not by license SKU. Mixing engines is the usual “internet is fine” ticket.

Flow 2 · allow is not the path
Inspect web SWG / SIA / proxy URL / DNS / SSL / DLP not dest 10.20.20.0/24 Publish app ZTNA access proxy TCP only · per session auth shortest path to 10.20.20.80 Carry overlay SD-WAN SPA hub IPsec + BGP + SLA TCP and UDP · then policy You can run all three for one user. You cannot substitute one policy list for another. Agentless SWG = HTTP/HTTPS via PAC. Agentless ZTNA = bookmark portal. Proxy policies cannot use posture tags the way agent-based SPA can. SPA still needs To hubs (client→server) and, if the hub initiates, From hubs. Hub firewall policy on the FortiGate is a fourth list — not FortiSASE SWG. Source: FortiSASE Architecture Guide; Unified SASE security policies (SIA, SPA To Hub, SPA From Hub); SPA using ZTNA vs FortiGate SD-WAN.

Three columns, three tickets. Do not toggle SD-WAN to “fix” a missing ZTNA app.

NeedUseSkip
Consistent internet / SaaS inspectionSWG / SIA policy + security profile group. Agent: FortiClient. Agentless: PAC from System › SWG Configuration.ZTNA app objects. They are not URL filters.
One HTTPS app at 10.20.20.80, identity + postureSPA using ZTNA (access proxy) or agentless ZTNA bookmark. Application policy, not a /24.Advertising the whole LAN in BGP “because it is easier.”
SMB, DNS, ICMP, or any UDP to 10.20.20.0/24SD-WAN SPA: service connection to hub, BGP, To-hubs accept.ZTNA access proxy. Docs: TCP-based applications only.
Existing FortiGate SD-WAN hub-and-spokeFortiSASE PoPs as extra spokes. Same overlay, SPA policies in the cloud.Replacing hub firewall policy with an SWG rule.

Runbook Side A / B / C

Side A is identity and steering. Side B is the three policy families. Side C is logs plus hub health. Do not start at C.

Side A — who is on the wire

  1. Identity and posture

    SAML / LDAP / RADIUS group remote-users. Security posture tagging rule set that emits SASE-Compliant / SASE-Non-Compliant for agent-based users. Source: FortiSASE Administration Guide — Configuring security posture tagging rule sets; Supporting external IdP users.

  2. Steering

    Agent-based: FortiClient connected to the FortiSASE instance. Agentless SWG: PAC from System › SWG Configuration, corporate prefixes returned DIRECT so 10.20.20.0/24 is not hairpinned into the proxy. Source: FortiSASE — Downloading and customizing the PAC file.

PAC — keep RFC1918 off SWG
function FindProxyForURL(url, host) {
  if (isInNet(host, "10.20.20.0", "255.255.255.0") ||
      isInNet(host, "127.0.0.0", "255.0.0.0")) {
    return "DIRECT";
  }
  return "PROXY <fortisase-swg-host>:10447; DIRECT";
}

Side B — one policy family per destination

https://fortisase.forticloud.com/ · Security › Traffic › Policies › Create
Training mock · not live

Security › Traffic › Policies › Create · Secure Internet Access

Allow-Web-HTTPS

remote-users
all (internet)
HTTPS / webproxy
Accept · default profile group

Source: FortiSASE Administration Guide — Default SWG policies; Configuring a SWG policy. Newer builds: Security › Traffic › Proxy policies. Place explicit denies above the pre-defined Allow-All. This rule never matches 10.20.20.80.

  1. SWG / SIA

    Security › Traffic › Policies (internet / SWG / proxy). Accept for remote-users, dest internet, attach a profile group (web filter, DNS, AV, SSL). Log all sessions. Source: FortiSASE — Security profiles; Configuring a SWG policy.

  2. ZTNA application

    SPA using ZTNA: FortiGate access proxy publishes web-int = 10.20.20.80:443. Agentless: Configuration › Agentless ZTNA — private application, application policy, bookmark portal. Still TCP. Source: FortiSASE Architecture Guide — SPA using ZTNA; Administration Guide — Agentless ZTNA.

https://fortisase.forticloud.com/ · Security › Traffic › Policies › Secure private access › To hubs
Training mock · not live

Security › Traffic › Policies › Secure private access › To hubs › Create

Allow-SASE-Compliant

All Agent Devices
SASE-Compliant
All agent users
PrivateServer 10.20.20.80/32 · Private Access Hub
ALL
Accept · Enable

Source: FortiSASE — Configuring a private access policy for client-to-server traffic; Configuring dynamic private access policies using security posture tags. Place Allow-SASE-Compliant above Allow-All Private Traffic. Destination host Location = Private Access Hub.

  1. SD-WAN SPA hub, then To-hubs

    Service connection: FortiSASE PoPs as spokes of hub 10.20.20.1 / WAN 192.0.2.1. BGP advertises 10.20.20.0/24. Then the To-hubs policy above. If the hub initiates to users, add From hubs. Source: FortiSASE — Configuring a new service connection; Viewing health and VPN tunnel status.

Side C — prove the engine that fired

  1. SWG proof

    From the laptop, HTTPS to 203.0.113.80. FortiView / Analytics traffic log: policy Allow-Web-HTTPS (or Allow-All), dest is internet, action accept. Empty private-access log is expected.

  2. ZTNA proof

    HTTPS to web-int. Log shows the application policy, user, tag SASE-Compliant. Access-proxy health on the FortiGate is up. A SWG hit for that FQDN means you steered it to the internet engine — wrong class.

  3. SPA proof

    Operations › SPA hub monitoring: IPsec up, BGP has 10.20.20.0/24. Traffic log on Secure private access, policy Allow-SASE-Compliant. On the hub: IPsec and BGP as in FortiSASE — Verifying IPsec tunnels on the FortiGate hub; Verifying BGP routing.

Green proof

Same user, three rows: SIA log to 203.0.113.80, ZTNA app log to 10.20.20.80:443, SPA To-hubs log to 10.20.20.0/24 with IPsec up. That is the close — not “FortiClient is connected.”

One flow after go-live

Laptop SYN to 203.0.113.80:443. FortiClient steers to PoP. Identity remote-users. Dest is internet → SWG policy accept + profile group. Session logged on SIA. Private prefixes in PAC stay DIRECT / off this path.

Same laptop SYN to 10.20.20.80:443 as ZTNA app web-int. Dest class = named TCP app → access proxy, posture SASE-Compliant, application policy accept. No BGP required for that one host if ZTNA is the design.

Same laptop SMB to 10.20.20.10. Dest class = routed subnet / UDP-capable → SPA overlay. PoP IPsec to hub 192.0.2.1, BGP next-hop 10.20.20.1, To-hubs Allow-SASE-Compliant. Hub FortiGate still needs its own LAN policy. SWG never sees this flow.

Proof · three log rows, not one dashboard tile
Engineer verifying FortiSASE logs and hub health on a monitor
Ops feel. Actual evidence is FortiView policy name + SPA hub IPsec/BGP + posture tag on the session. Artwork checkmarks are not FortiSASE.

Traps + proof

SymptomLikely causeProof
Internet works, 10.20.20.80 times outSWG healthy; no ZTNA app and no To-hubs match.SIA log present. SPA / ZTNA log empty for that dest.
HTTPS app works, SMB/UDP failsZTNA access proxy is TCP-only. Need SD-WAN SPA for the subnet.Architecture Guide — ZTNA vs SD-WAN SPA. Hub has no IPsec from PoPs.
Hub IPsec up, traffic deniedTo-hubs catch-all below a deny, or tag miss (SASE-Non-Compliant).Policy order. Session tagged wrong. Move Allow-SASE-Compliant above Allow-All.
Agentless user cannot use posture tagProxy / SWG policies cannot leverage security posture tags the way agent-based SPA can.Unified SASE security policies note. Use user/group on SWG; tags on agent SPA.
Private prefix sent to SWGPAC missing DIRECT for 10.20.20.0/24. Hairpin into proxy.PAC file. SWG log for dest 10.20.20.80 — wrong engine.
SPA up, server still darkFortiGate hub LAN policy missing, or From hubs not built for inbound.Hub diagnose sys session list empty. FortiSASE To-hubs hit is not hub allow.
Bookmark portal 404 / denyAgentless ZTNA application policy, not SWG, not SPA To-hubs.Agentless ZTNA verify steps in the admin guide.
Do not put 10.20.20.0/24 in an SWG destination to “make it work”

SWG is internet inspection. RFC1918 on that list is a classification bug. Publish the host on ZTNA or advertise the subnet on SPA, then accept on To-hubs.

Pilot checklist

Knowledge check

Six judgment items. Submit once. Reasons point back at the section to re-read.

Q1

FortiClient is connected. HTTPS to 203.0.113.80 works. 10.20.20.80:443 times out. What does the working internet session actually prove?

Correct: b. SWG success is internet inspection only. Re-read Why internet working is not private access and Flow 1.
Q2

Which assignment of roles is accurate for FortiSASE?

Correct: a. Three engines, three objects. Path is not the permit. Re-read SWG, ZTNA, SD-WAN — three engines and Flow 2.
Q3

Remote users need SMB to 10.20.20.10 as well as HTTPS to 10.20.20.80. What is the right private design?

Correct: c. Architecture Guide: ZTNA is TCP via access proxy; SD-WAN/NGFW SPA covers TCP and UDP. Re-read Which engine for this ticket.
Q4

You create Allow-SASE-Compliant under Secure private access › To hubs. Destination host Location must be what?

Correct: b. Docs: Location = Private Access Hub; order tagged accept before Allow-All. Re-read Side B portal and Side C.
Q5

What is the proof that SD-WAN SPA actually forwarded the lab subnet, not just that the client is online?

Correct: d. Overlay health plus the SPA policy log. Client icon and SWG logs are the wrong engine. Re-read Side C and Traps.
Q6

Why keep 10.20.20.0/24 as DIRECT in the PAC instead of PROXY?

Correct: a. PAC steers HTTP(S) to SWG. RFC1918 in PROXY is a classification bug. Agentless still cannot use posture tags like agent SPA. Re-read Side A and Traps.

Sources

Related: FortiClient steering and private access · FortiGate ZTNA tags · FortiGate zone, policy, NAT