T Techclick ← All lessons
Palo Alto · PAN-OS · Migration · Interactive lesson

Check Point, ASA & FortiGate → Palo Alto, with proof

Friday 22:00. The converter said “success.” Saturday 09:10, inside cannot reach DMZ, site-to-site is half-up, and nobody can say which file was imported. This lesson is the migration document you actually run: the right export, the zone rewrite, the click path, and the log that closes the ticket.

22 min read · L2 primary · Quiz at end

After this page you can

Quick answer (say this in an interview)

A firewall migration is a language rewrite, not a file copy. Export the vendor’s documented file, convert like-for-like onto a matching PAN-OS base, map interfaces to named zones, prove sessions in Monitor → Logs → Traffic, then move ports to App-ID with Policy Optimizer. Expedition can type objects; it cannot invent the implicit ASA permit or the missing Check Point route file.

Why this migration fails on Saturday

Hero · three languages, one NGFW
Three legacy firewalls converting into one next-generation firewall
The converter moves objects. You still have to rewrite how the box thinks: security-level vs zone vs interface-pair.

Check Point, Cisco ASA, and FortiGate all keep “who may talk.” They do not keep it the same way. ASA can allow inside→DMZ because security-level 100 is higher than 50. Check Point can hide the real rule across policy layers and NAT. FortiGate can hide destination NAT inside a VIP while the policy still says the public IP.

PAN-OS is zone-based and denies all interzone traffic until a Security rule allows it. If you only import objects, Saturday’s outage is already scheduled.

Classic ticket

“Expedition said 0 errors. Users on VLAN 20 cannot reach 10.20.8.15. Traffic log is empty.” Empty log usually means the packet never matched a session you expected — wrong zone, wrong virtual router, or implicit deny — not “PAN is broken.”

Mental model: translate, then improve

Feel · six-phase pipeline
Audit Map Convert Review Pilot Cutover pipeline
Two jobs, in this order: (1) make the new box behave like the old one, (2) then make it a real NGFW with App-ID.

Hold two jobs in your head. Job 1 — translate: same IPs, same ports, same NAT direction, same VPN peers, traffic still flows. Job 2 — improve: replace “tcp/443 any” with the applications you actually saw, attach Security profiles, turn on decryption only after the path is proven.

Palo Alto’s own best-practice guide says the first phase is a like-for-like port-based policy on PAN-OS, then Policy Optimizer converts those rules to applications. Do not App-ID the entire internet on the cutover night.

Say this out loud

The tool types. I decide zones, NAT direction, and when App-ID is safe. If I skip the route file or the implicit ASA permit, the XML can still be “valid.”

Hard word · Zone

A named security boundary bound to one or more interfaces. Policy is zone-to-zone, not “GigabitEthernet0/1.”

Hard word · Like-for-like

The first imported Security policy still uses services/ports so Saturday traffic matches Friday traffic.

Hard word · Policy Optimizer

PAN-OS view that shows which applications a port-based rule actually saw, so you can replace the port safely.

Hard word · Expedition

Palo Alto’s old migration VM. Useful parsers. End of Life January 2025. TAC does not support it.

The six-phase path (flowchart first)

Flow 1 · migrate, then harden
1 Audit what must live 2 Map IF → zone → VR 3 Convert like-for-like 4 Review NAT / VPN / unused 5 Pilot one VLAN / one VPN 6 Cut prove logs After traffic is stable → Policy Optimizer (Job 2). Not on the cutover night.

Read left → right. Diamond of death is skipping Map: a converted rule with the wrong zone is a silent deny.

Decision feel · level vs zone vs pair
Three source models merging into PAN-OS zones
ASA thinks in security-levels. Check Point thinks in layers and gateways. FortiGate thinks in interface pairs / VIPs. PAN-OS asks: source zone, dest zone, app, user.

Which source file to bring

If the file is wrong, every later click is theatre. These are the files Palo Alto’s Expedition export guide documents — still the right inputs even if a human or Migration Factory does the typing.

SourceWhat you exportAlso collectWhat the tool will not invent
Check Point ≥ R80 ShowPolicyPackage .tar.gz (JSON/HTML snapshot) Route table: netstat -nr or show route all Which policy package is actually installed on the gateway; inline layer order
Check Point < R80 objects_5_0.C (or objects.C), Policy.W / rulebases_5_0.fws Same route file from the gateway Provider-1 / CMA context if you pulled the wrong CMA
Cisco ASA terminal pager 0 then more system:running-config / show running as .txt Each context (changeto context), PSKs, crypto maps, same-security permit setting Implicit security-level allows; those become explicit PAN rules or they die
FortiGate Admin → Configuration → Backup → Local PC (.conf) If VDOMs: VDOM Config + the VDOM name; VIP list; central vs policy NAT mode VIP/DNAT paired Security rule; SD-WAN rules (often rebuild)

Expedition 2’s published matrix (beta) lists Check Point R75/R77 and >R80, Cisco ASA 8.2–9.6 (and Firepower in ASA syntax), FortiGate 4.0/5.0/6.0 for address/service/security/NAT/L3/static routes. VPN is marked for Cisco ASA only in that table. Anything outside the matrix is a rebuild, not a surprise “success.”

Expedition after January 2025

Palo Alto ended support for Expedition 1 and 2 in January 2025. TAC does not support the tool. Their public alternatives are Strata Cloud Manager cleanup/optimization for SCM-managed configs, plus Professional Services / Migration Factory. If you still run a local VM, keep it offline, treat XML as a draft, and never expose it to the internet. Source: pan.dev/expedition and the LiveCommunity EoL note.

Click the vendor — then do it

Click your source. Side A is only the export. Side B is convert + zone map. Side C is PAN-OS load and proof. Same three sides for every vendor.

Side A — Export Check Point

Primary source: Expedition Export · Checkpoint and Check Point ShowPolicyPackage.

  1. R80+ : run ShowPolicyPackage on the management server

    Expedition documents tool v2.0.6. On many R80+ Jumbo systems the wrapper is already there:

    Check Point management (expert / wrapper)
    $MDS_FWDIR/scripts/web_api_show_package.sh
    $MDS_FWDIR/scripts/web_api_show_package.sh -k Standard
    $MDS_FWDIR/scripts/web_api_show_package.sh -k Standard -d "Corp-Domain"

    Output is a .tar.gz. Use domain name or CMA IP, not CMA name. Pull the package that is installed on the gateway, not an old unused package.

  2. Collect the route file (mandatory for zone math)

    On the gateway: netstat -nr or show route all. Expedition uses this to guess zones. No route file → wrong zones → Saturday deny.

  3. Pre-R80 : pull $FWDIR/conf files

    objects_5_0.C (or objects.C), Policy.W / rulebases_5_0.fws, plus the same route file. On Provider-1, switch context to the right CMA first.

Side B — Convert and map (all three sources)

Primary source: Migrate a Port-Based Policy to PAN-OS Using Expedition.

  1. Create a project and import the vendor file

    Inspect format, required files, and parser logs. If Check Point imported zero rules, you likely fed HTML instead of the .tar.gz, or the wrong package name.

  2. Import a PAN-OS base that matches the target version

    Factory default or an Iron-Skillet Day-1 XML for the same PAN-OS major version you will run. Do not merge a 9.1 export onto a 11.1 box and hope.

  3. Clean before you merge

    Remove or replace non-TCP/UDP “services” (ping/ICMP become applications). Delete unused and duplicate objects. Drop disabled rules. Rename interfaces to PAN names (ethernet1/1, not port1).

  4. Rename zones to the job they do

    Expedition auto-assigns zone names. Change them to trust, untrust, dmz (or your standard) and bind them to the right interfaces. Check the virtual router for static routes — bulk-migrate if there are many; type them if there are three.

  5. Merge onto the base, then export

    New box: Generate XML & Set Output, import, load. Existing box: load config partial over SSH so you do not wipe management. Clear ARP on adjacent switches if the MAC is about to change (clear arp all on PAN-OS).

https://192.0.2.50 · Expedition project (offline VM)
Training mock · not live

Projects → Mumbai-DC-Cutover → Import

Import source + PAN-OS base

Checkpoint ≥ R80
Standard.tar.gz + routes.txt
PA-3410 · PAN-OS 11.1 factory / Iron-Skillet
Rules 186 · NAT 24 · unused objects 41
Open logsMerge to base
Training mock of the Expedition project workflow in the official best-practice article. Keep this VM offline after the January 2025 EoL.

Side C — Load on PAN-OS and prove it

Primary source: same Expedition best-practice page, then Policy Optimizer.

  1. Commit the like-for-like policy

    Confirm Network → Interfaces and Network → Zones match the spreadsheet from phase 2. Management profile still allows your jump host.

  2. Pilot one path before the building

    One VLAN or one IPSec peer. Generate traffic. Open Monitor → Logs → Traffic. You want Rule, From Zone, To Zone, App, Action = allow, bytes > 0.

  3. Only then open Policy Optimizer

    Policies → Security → Policy Optimizer. Start with rules that saw a small, stable set of well-known apps. Replace the service with those applications (often application-default). Leave noisy port-80/443 rules until you have a week of logs.

https://fw.lab.example.com · Policies / Security / Policy Optimizer
Training mock · not live

Policies → Security → Policy Optimizer → No App Specified

No App Specified

allow-trust-untrust-web · service tcp/80,443 · apps seen: ssl, web-browsing
Convert to apps: ssl, web-browsing · service application-default
CompareConvert
After like-for-like is green. This is Job 2. Source: Palo Alto “Migrate to Application-Based Policy Using Policy Optimizer.”
Need the exact click for Zones after import?

Network → Zones — each zone type Layer3, interfaces attached. Then Policies → Security — Source Zone / Dest Zone must match those names. A rule that still says zone Inside while the interface sits in trust will never hit.

After go-live: packet to log

Flow 2 · runtime on PAN-OS
Host 10.20.8.50 Ingress zone trust / ethernet1/2 NAT then policy dest NAT first Security rule zone / app / action Traffic log Rule · Zone · App · Action

If the log is empty, the session never formed. Check zone + VR + routing before you add another any-any rule.

Ops · proof cockpit
Operations desk verifying firewall cutover
Cutover is not “commit succeeded.” Cutover is a green Traffic log on the pilot path plus the rollback file still in your pocket.

Traps and the proof checklist

What you seeLikely causeFirst fixProof
Inside → DMZ dead, no deny log ASA implicit security-level allow was never written as a PAN rule Add explicit trust→dmz Security rule; check interzone-default Traffic log: Rule name + allow + bytes
Check Point import is empty Wrong package, HTML instead of .tar.gz, or no R80 ShowPolicyPackage Re-run web_api_show_package.sh -k <installed package> Parser shows rule count > 0
Zones look random No route file on Check Point; FortiGate port names left as port1 Import netstat -nr; rename interfaces to ethernet1/x Network → Zones matches the spreadsheet
Inbound VIP works, return path uses private IP FortiGate VIP / bidirectional NAT not paired on PAN Destination NAT + Security rule using PAN NAT semantics Session table shows bidirectional NAT
Everything on tcp/443 breaks after “App-ID cleanup” Job 2 done on night 1; Policy Optimizer not given time Revert those rules to service; convert only stable apps Policy Optimizer “apps seen” is a short, known list
Expedition VM on a LAN with a browser EoL software, known critical bugs historically, no TAC Isolate / power off after export; prefer PS / Migration Factory / SCM VM has no default route to the internet
Pilot checklist (print this)
Unsafe vs safe

Unsafe: import, commit, delete the old firewall, then discover interzone-default. Safe: convert → review NAT/VPN/unused → pilot one path → cut → watch logs → Policy Optimizer later.

Knowledge check

Six judgment calls. Pick the first fix a sober L2 would do on Saturday.

Q1

ASA 5525-X used security-level 100 (inside), 50 (dmz), 0 (outside). No ACL covered inside→dmz. After a clean convert, inside users cannot reach DMZ and the Traffic log is quiet. What failed?

Correct: b. Re-read “Why this migration fails” and the ASA Side A implicit-allow note. PAN-OS is deny-between-zones until you allow it.
Q2

You are migrating a Check Point R81.10 SmartConsole policy. Which pair is the documented Expedition input?

Correct: c. Re-read Side A Check Point. Pre-R80 uses objects_5_0.C; R80+ uses ShowPolicyPackage. The route file drives zone calculation.
Q3

Leadership asks you to “just run Expedition on a public jump host, TAC will support us.” What is the accurate answer?

Correct: b. Re-read the Expedition EoL callout. FortiConverter is Fortinet’s tool toward FortiOS, not toward PAN-OS.
Q4

FortiGate VIP 203.0.113.20 → 10.20.8.20. After convert, inbound hits the server but the server’s replies leave with 10.20.8.20. First place to look?

Correct: a. Re-read FortiGate Side A step 3 and the VIP trap row. Do not invent ASA security-levels on PAN-OS.
Q5

The like-for-like policy is passing. An engineer wants to set every tcp/443 rule to any application tonight “because we bought App-ID.” What do you do?

Correct: b. Re-read the mental model and Side C. Palo Alto’s own guide is like-for-like first, Policy Optimizer second.
Q6

Check Point convert finished, but Expedition zones do not match the live gateways. Which missing file is called out for zone calculation?

Correct: b. Re-read Check Point Side A step 2. Expedition documents the route file specifically for zone calculations.

Sources

Related: Check Point → Palo Alto (zones, NAT, App-ID) · Firewall migration playbook (multi-destination) · PAN-OS Security policy · Zones, interfaces, VR · PAN-OS NAT · Check Point vs Palo Alto vs Fortinet · ASA interview