T Techclick ← Palo Alto hub
Palo Alto · PAN-OS · Security profiles · Interactive lesson

PAN-OS Security profiles — allow is not protect

The ticket says “the rule allows web-browsing and we log it — how did ransomware land?” App-ID opened the door. Nothing searched the bag. Official wording is an allow-but-scan rule: profiles are not match criteria; they inspect after the Security policy allows the application. This lesson is the six scanners, the group you attach once, and the Threat-log row that closes that ticket.

20 min read · L2 primary · Quiz at end

⚡ Quick Answer

PAN-OS Security profiles the way you will use them: allow is not protect. Attach Antivirus, Anti-Spyware, Vulnerability Protection, URL Filtering, File Blocking, and WildFire as a group on every allow rule, then prove it in Threat logs.

After this page you can

Quick answer (say this out loud)

A PAN-OS Security rule that allows an application without a profile is an uninspected tunnel. Profiles are not match criteria. After the rule allows the app, the attached Antivirus (known malware on HTTP/SMTP/FTP/SMB…), Anti-Spyware (C2 / DNS beacons), Vulnerability Protection (inbound exploits), URL Filtering (site category), File Blocking (risky types), and WildFire Analysis (unknown files to the sandbox) inspect the same decoded stream. Bundle them in Objects → Security Profile Groups, attach Profile Type = Group on every allow rule, name one group default so new rules inherit it. Prove it with test security-policy-match showing the group, then a Threat log action of reset-both — not a Traffic log allow.

1. Why allow without profiles is not protect

Sneha writes a clean rule: from trust to untrust, application web-browsing and ssl, action Allow, Log at Session End checked. Users browse. Two days later a finance laptop downloads a malicious invoice over HTTPS. The rule did exactly what it said. That is the problem.

Official PAN-OS admin wording: Security Profiles define an allow but scan rule. They are not used in the match criteria of a traffic flow. The profile is applied after the Security policy rule allows the application or category. App-ID answers “is this app allowed?” Profiles answer “is what is flowing through it clean?”

Hero · allow is not a scanner
User traffic through an NGFW allow rule with six profile scanners before the internet
Notice: the allow box is the door. The six nodes on the firewall are the bag scanners. Skip the scanners and the door is still open.

Three tickets this page is built to close:

Hard words before the runbook

Security Profile — inspection engine attached to an allow rule. Not a match field. Denied traffic is not scanned.

Security Profile Group — one named bundle of those engines. Attach the group once instead of six drop-downs on every rule.

default vs strict — predefined Anti-Spyware / Vulnerability Protection baselines. Default uses each signature’s own action (often alert). Strict overrides critical / high / medium to block / reset-both.

reset-both — TCP RST to client and server; UDP is dropped. Gateway default for dangerous signatures.

Name = default — if you name the group default, PAN-OS auto-selects it on new Security rules. No default group → Profile Setting = None.

2. Mental model · match, then scan

Hold three parts. Interviews fail when people mix them.

1. Match is the Security rule

Zones, users, apps, service. First match wins. Action Allow or Deny. Profiles are not in this decision. A deny never hands the session to scanners.

2. Scan is the profile stack

After Allow, the attached group inspects the decoded stream. Single-pass: one decode, all enabled profiles read it in parallel — not a relay race. That is why “six profiles will kill throughput” is usually an excuse, not a measurement.

3. Action is per signature

allow (pass, no log), alert (Threat log, still pass), drop, reset-client / reset-server / reset-both, block-ip. The predefined profile only picks a starting action. You own the clone.

4. The group is the operational unit

Change the group once; every allow that references it updates. Individual Profile Type on 40 rules is how one rule ships with no WildFire.

Say this out loud

Allow is the door. The profile group is the scanner. Default is leaky. Strict blocks crit/high/medium. Clone, do not edit predefined. Name the group default so the next engineer cannot forget. Threat log action is the proof — Traffic log allow is not.

Flow 1 · two gates on one allow rule
Gate 1 allows the app. Gate 2 searches the bag. untrust 203.0.113.45 Gate 1 · App-ID web-browsing → Allow not a content scan Gate 2 · Profile Group Antivirus · Anti-Spyware · Vuln URL Filtering · File Blocking WildFire Analysis same decode, parallel scan reset-both → Threat log (+ Data Filtering when DLP needed) trust · clean 10.20.5.10 Same allow · Profile Setting = None App-ID still says allow. Nothing inspects inside. The malware rides through. payload in known virus Allow ≠ safe. The profile group is what makes allow safe. Official: profiles scan after the Security policy allows the application.

Read top then bottom. Same allow rule. Top path has a group and can reset-both. Bottom path has Profile Setting None — the official “no default group” state for a new rule.

3. Which profile catches what

All six live under Objects → Security Profiles, one tab per type. You attach them to internet-facing allow rules. Pick the profile from the symptom, not from habit.

Decision · inspected lane vs open tunnel
Decision diamond splitting traffic into an inspected path and an open tunnel
Path A is allow + group. Path B is allow + None. The diamond is “does the matched rule carry a profile group?”
ProfileWhat it inspectsClassic hit
Antivirus Known malware, worms, trojans, spyware downloads on protocol decoders (HTTP, SMTP, IMAP, POP3, FTP, SMB). Stream-based — first packet, not a full-file wait. Known-bad invoice / PE over the allowed web app.
Anti-Spyware Already-infected host phoning home to C2, including DNS. Optional DNS sinkhole forges the reply so you can spot the client in Traffic + Threat. Regular lookups to random-looking domains every 60 seconds.
Vulnerability Protection Attempts to exploit system flaws entering the network (buffer overflow, illegal code execution). Official contrast: Anti-Spyware watches what leaves; VP watches what comes in. Scanner hitting a published app with a known CVE.
URL Filtering HTTP/HTTPS destination by PAN-DB category. Default profile blocks known malware, phishing, adult. Also the home of credential-theft controls — deep dive is its own lesson. User browsed a phishing category the allow rule never mentioned.
File Blocking File type + application + direction (upload / download / both). Predefined basic file blocking and strict file blocking (content 653+). Actions: alert, block, continue (web only). .exe / .dll download that AV has not signed yet.
WildFire Analysis Unknown files and email links forwarded to the public cloud or a WF-500. Public-cloud rules also forward files that already match AV signatures. Never-seen PE. Verdict + new signature come back; AV then blocks the next copy.

A seventh you should know but not put on every rule: Data Filtering (credit-card / SSN / keyword / file-property DLP). Zone Protection and DoS Protection are not Security Profiles on a Security rule — different objects, different policy types.

Journey · six scanners on one allow
Six glass panels for allow then the profile stack
Not a relay. After Allow, every enabled profile reads the same decode. Any reset-both ends the session and writes Threat.
Common mistake — profiles on the deny

Putting the group on interzone-default or on an explicit deny does not “cover everything.” Denied traffic is not handed to Content-ID. Inspection only runs on the allow that matched. The group belongs on every allow.

4. How to choose default, strict, group

Palo Alto ships predefined Anti-Spyware and Vulnerability Protection as default and strict. File Blocking ships basic file blocking and strict file blocking. Antivirus’s predefined default alerts SMTP/IMAP/POP3 and blocks FTP/HTTP/SMB. That is a starting point, not an internet-gateway finish line.

ChoiceUse whenDo not use when
Predefined default Lab, or a first commit so something is attached. Public gateway. Many signatures stay at alert — you log, you do not stop.
Predefined strict You want crit / high / medium blocked and low / informational left at signature default. You need packet capture or exceptions. Clone it. Do not edit the built-in.
Clone of strict + single-packet capture Production internet / DC allow. Best-practice starting point. You need a blank all-alert “monitor week” that you will forget to flip.
Profile Type = Profiles (individual) One oddball rule that must skip URL or WildFire. Forty outbound allows. One of them will miss a scanner.
Profile Type = Group, name default Every new Security allow should inherit the org baseline. You already have a group named default that is empty or lab-weak. Override per rule on the Actions tab.

Actions, least to most aggressive: allow (pass, no log) → alert (Threat log, still pass) → dropreset-client / reset-server / reset-bothblock-ip (source or source-destination pair, for N seconds). Official note: when the profile says reset-both but the firewall serves a 503 block page at session start, the Threat log may show reset-server — the client already got the page.

5. Runbook · Side A profiles, Side B group, Side C log

Pilot one vsys. Lab values below use RFC 5737 203.0.113.45 and 10.20.5.10. Primary source for Side A/B: PAN-OS Security Profiles + Create a Security Profile Group.

Side A — build (or clone) the six profiles

  1. Clone Antivirus

    Objects → Security Profiles → Antivirus. Clone the predefined profile to bp-av-reset. Set decoder Signature Action and WildFire Action to reset-both for HTTP, SMTP, IMAP, POP3, FTP, SMB. Packet Capture = single-packet on the clone. Do not edit the predefined row.

  2. Clone Anti-Spyware and Vulnerability Protection from strict

    Objects → Security Profiles → Anti-Spyware and → Vulnerability Protection. Clone strict to bp-as-strict and bp-vp-strict. Leave crit/high/medium at the strict override (block / reset-both). Enable single-packet capture. On Anti-Spyware, turn on DNS sinkhole if you have a sinkhole IP you own — infected hosts then show up as clients to that IP.

  3. URL, File Blocking, WildFire

    Clone or create bp-url (block malware / phishing / command-and-control at minimum). Attach predefined basic file blocking on general outbound, strict file blocking toward sensitive apps. WildFire Analysis: application any, file types you license, direction both, analysis location public cloud (or hybrid if you have a WF-500 for PDFs).

Side B — group, then attach on Actions

  1. Create the group

    Objects → Security Profile Groups → Add. Name default if this should auto-attach to every new Security rule; otherwise name it pg-outbound and attach it by hand. Multi-vsys: check Shared only if every vsys should inherit it. Drop in the six clones. OK.

  2. Attach on every existing allow

    Policies → Security → open each allow → Actions. Profile Type = Group. Group Profile = default or pg-outbound. Log at Session End stays checked. Profiles on a deny do nothing — skip those.

  3. Confirm new-rule inheritance

    If you named the group default: Policies → Security → Add → Actions. Profile Type should already be Group and Group Profile = default. If you see None, no default group exists — that is the official empty state.

  4. Commit

    The group is not live until Commit. Then prove the matched rule, not the rule you meant.

https://fw.lab.example.com/#objects/security-profile-groups Training mock · not live

Objects → Security Profile Groups → Add

Security Profile Group

default
cleared (this vsys only)
bp-av-reset
bp-as-strict
bp-vp-strict
bp-url
basic file blocking
bp-wf-fwd
Cancel OK

Click next: OK, then Policies → Security → each allow → Actions. Naming the group default auto-selects it on new rules. Source: Objects → Security Profile Groups (Create a Security Profile Group, PAN-OS 11.1).

https://fw.lab.example.com/#policies/security Training mock · not live

Policies → Security → allow-users-web → Actions

Security Policy Rule

General Source Destination Application Service Actions
Allow
Group
default
checked
none (lab) · Panorama / Strata Logging in prod
Cancel OK · then Commit

Click next: OK, Commit, fetch EICAR from 10.20.5.10 over the allow, then open Monitor → Logs → Threat. Source: Policies → Security → Actions → Profile Setting (PAN-OS).

Side C — prove the matched rule is scanning

  1. Which rule actually won?

    CLI: test security-policy-match from trust to untrust source 10.20.5.10 destination 203.0.113.45 application web-browsing protocol 6 destination-port 443. Read profile-setting group on the rule it prints. If a different, higher allow with no group won, that is the ticket.

  2. Safe content hit

    From the lab host, fetch the EICAR test file over the allowed app (HTTP first; HTTPS only after a decrypt rule). The download must fail. Monitor → Logs → Threat must show Type = virus, Action = reset-both (or reset-server if a 503 page was served), Rule = the allow you intended.

  3. WildFire path

    If you forwarded an unknown: Monitor → Logs → WildFire Submissions is not empty, and Device → Setup → WildFire shows the cloud reachable. An empty submissions log with a WildFire profile attached usually means egress to the WildFire FQDN is blocked or forwarding is off.

https://fw.lab.example.com/#monitor/logs/threat Training mock · not live

Monitor → Logs → Threat

Threat · filter (addr.src in 10.20.5.10)

13:12:04 type=virus threat=EICAR action=reset-both rule=allow-users-web app=web-browsing
13:11:51 type=spyware threat=DNS C2 action=sinkhole rule=allow-users-web app=dns
13:10:02 type=vulnerability threat=informational action=alert · log only — traffic still passed
Export CSV Add to filter · action eq reset-both

Green close: Rule is yours, Type matches the scanner, Action is reset-both (or sinkhole), not alert. Source: Monitor → Logs → Threat + Actions in Security Profiles.

CLI you will actually type
test security-policy-match from trust to untrust source 10.20.5.10 destination 203.0.113.45 application web-browsing protocol 6 destination-port 443
show running security-policy
show log threat direction equal backward receive_time in last-hour
show wildfire status
Green success = these fields

test security-policy-match prints the intended allow and profile-setting group default (or pg-outbound). Threat log: Rule Name = that allow, Type = virus / spyware / vulnerability, Action = reset-both (not alert), Source = 10.20.5.10. Traffic log allow without a matching Threat row after EICAR means the group is not on the rule that won — or the session was TLS and you have no decrypt.

Ops · proof cockpit
Operations desk verifying threat log health checks
Commit is not proof. A Threat row with your Rule Name and reset-both is proof. Traffic log allow is only the door.

6. Runtime path after commit

After go-live the firewall does not re-read your intent. It does this.

Flow 2 · session after commit
One session · match, allow, scan, act, log 1 · Ingress zones + App-ID first-match rule 2 · Action Deny → stop, no scan Allow → continue 3 · Profile Setting Group or Profiles None = open tunnel 4 · Parallel Content-ID AV · AS · VP · URL · File · WF one decode, not a relay 5a · reset-both / drop / block-ip session dies · Threat log writes WildFire still may have a copy 5b · alert or allow or None payload forwarded Threat log may still look “busy” TLS without a Decrypt rule stays dark — profiles cannot see the file A higher allow with Profile Setting None shadows a lower allow that has the group. First match wins. alert is monitoring. reset-both is prevention. allow on a signature writes nothing. Name the group default so the next Add Rule cannot ship with None.

Security policy still runs without profiles. You get an allow, not an inspection. That is why “the Security rule hit” is not proof of protection.

7. Traps + proof checklist

TrapWhat you seeWhat is true
Profile exists, not attached Objects shows Antivirus reset-both; user still infected test security-policy-match names a higher allow with Profile Setting None. First match wins.
alert left from “monitor week” Threat log is busy; payload still landed alert logs and forwards. Flip the clone to reset-both. Default predefined is often this trap.
Edited predefined strict Custom action vanished after a content update Predefined rows track Palo Alto. Clone, rename bp-*, edit the copy.
Group on the deny only “Everything is covered at the bottom” Denied sessions are not scanned. The group belongs on every allow.
No default group Every new rule ships with Profile Setting None Official empty state. Name one group default, Commit, Add a test rule, read Actions.
HTTPS + no decrypt Full group attached; file still arrives AV/WF cannot see inside TLS. Need Policies → Decryption. Separate lesson.
WildFire log empty Analysis profile on the group; no submissions Device → Setup → WildFire forwarding off, or the firewall cannot reach the cloud FQDN.
Traffic log as proof Action = allow, so “we are safe” Allow is the door. Quote Threat Type + Action + Rule Name, or you have not closed the ticket.
Pilot checklist before you leave the change window

Knowledge check

Six judgment items. Map each to a promise bullet. Check answers, then reset and retry the ones you miss.

Q1

The Security rule allows web-browsing, logs at session end, and has Profile Setting = None. A user downloads a known virus over that session. What does PAN-OS do?

Correct: b. Official: profiles are not match criteria; they scan after the Security policy allows the application. None means no scan. Traffic logging is not inspection. Re-read Why + Flow 1.
Q2

A LAN host makes machine-like DNS lookups to random-looking domains every 60 seconds. Which Security Profile is built for that, and what is the behaviour called?

Correct: d. Official Anti-Spyware job is phone-home / C2, including DNS; sinkhole is the optional ident tool. VP is inbound exploits. Re-read Which profile catches what.
Q3

You need Vulnerability Protection that actually blocks critical / high / medium on a public gateway and still tracks Palo Alto’s recommended baseline. Cleanest move?

Correct: c. Strict already overrides crit/high/medium to block. Clone so content updates do not wipe your capture/exceptions. Default is often alert. Re-read How to choose + Side A.
Q4

Sneha needs the same six profiles on 40 internet allows and one place to change them later. What should she configure?

Correct: a. A group is treated as a unit; edit once, all referencing allows update. Deny is not scanned. AV is one decoder, not the stack. Re-read Side B + official Create a Security Profile Group.
Q5

Antivirus exists in Objects (reset-both). A user still got the file. test security-policy-match prints a different, higher rule. Most likely root cause?

Correct: d. The match output already named another rule. Profiles on a lower rule never execute. Re-read Traps + Side C.
Q6

Every new Security allow ships with Profile Setting = None. What is the official fix so the next engineer cannot forget the group?

Correct: b. Official Set Up or Override a Default Security Profile Group: name the group default; new policies show Profile Type = Group. No default group → None. Re-read Side B + Quick answer.

Sources

Related: PAN-OS Security policy · App-ID, Content-ID, User-ID · SSL/TLS decryption · URL Filtering · WildFire · Palo Alto interview hub · Palo Alto course