Policies
A policy decides thresholds and what happens to each kind of threat. There is one default policy for everything, plus optional overrides for an organization, a group of recipients or a direction.
How policies combine
- Start from the default policy (Protect › Policies › Default policy › Edit, MSP administrators only).
- Collect the enabled overrides that match the message: global overrides first, then the message's organization's overrides.
- Within each group the override with the lowest priority number wins - it is applied last, on top of the others.
- An override only changes the values saved on it; everything else comes from the policies beneath.
The message page lists the overrides that applied (Envelope › Policies). When a message has several recipients, the first recipient's policy is used.
@finance.contoso.com, priority 10: quarantine at 6, BEC always quarantined, AI always consulted. Everything else in Contoso keeps the defaults.Creating an override
Policies › New policy. The form starts with the default values; change what you need and save. Scope fields:
- Name
- Shown in lists and on messages.
- Organization
- (MSP administrators.) "All organizations" makes a global override; organization administrators' overrides always belong to their organization.
- Recipients
- Addresses or
@domainentries, comma or line separated. Blank = everyone in scope. - Direction
- Any, Inbound, Outbound, or API-scanned mailboxes.
- Priority
- Lower wins. Default 100.
- Enabled
- Untick to keep the policy without applying it.
Delete (on an existing override) removes it immediately.
Every option
Score thresholds
- Tagthresholds.tag
- Score at which mail is delivered but marked as spam (X-Obsidian-Spam: Yes, optional subject prefix) so your Junk rule moves it.Default: 5.0
- Quarantinethresholds.quarantine
- Score at which the verdict's action applies (quarantine by default).Default: 8.0
- Rejectthresholds.reject
- Score at which mail is refused during the SMTP conversation (550). The sender's server bounces it; nothing is stored unless it is a virus.Default: 15.0
- Tag subjecttag_subject
- Prefix the subject of tagged spam/phishing with the subject tag.Default: True
- Subject tagsubject_tag
- Text prefixed to tagged subjects, e.g. [SPAM].Default: [SPAM]
- Add headersadd_headers
- Add X-Obsidian-* and Authentication-Results headers to delivered mail. Required for the Junk transport rules on M365 / Google / Exchange.Default: True
- Dmarc enforcedmarc_enforce
- Honour a sender domain's DMARC p=reject: failing mail that also scores at least the tag threshold is treated as phishing and handled admin-only.Default: True
Actions per verdict
- Spamactions.spam
- What to do with spam above the quarantine threshold.Default: quarantine
- Bulkactions.bulk
- What to do with bulk / marketing mail (newsletters). 'Deliver + tag' lets Junk rules or users decide.Default: tag
- Phishactions.phish
- What to do with phishing (credential theft, fake invoices, QR / callback lures).Default: quarantine
- Becactions.bec
- What to do with business email compromise (impersonation, payment / gift-card / payroll requests).Default: quarantine
- Virusactions.virus
- What to do when ClamAV or Spamhaus HBL identifies malware. Quarantined viruses are always admin-only.Default: quarantine
- Malwareactions.malware
- What to do with malware-like mail found by attachment rules (disguised executables, macros, smuggling) at or above the quarantine threshold.Default: quarantine
- Blockedactions.blocked
- What to do with mail from a block-listed sender. Reject is the default.Default: reject
- Policyactions.policy
- What to do when an attachment policy is violated (blocked file type, macro, encrypted archive) but the score stays below the quarantine threshold.Default: quarantine
- User releaseuser_release
- Which verdicts end users may release from their own quarantine and from digest links. Virus and malware are never user-releasable.Default: spam, bulk, policy
AI analysis
- Enabledai.enabled
- Use the local LLM for this policy's mail.Default: True
- Modeai.mode
- hold = grey-zone mail is parked until the model decides (auto-released if clean); async = deliver immediately and claw back through the API connector if the model finds a threat; inline = wait for the model during SMTP (only for fast GPU models).Default: hold
- Min scoreai.min_score
- Mail scoring from this value up to (but not including) the quarantine threshold is reviewed by the model.Default: 1.5
- Always if links from new senderai.always_if_links_from_new_sender
- Always ask the model when a first-time sender includes links, whatever the score.Default: True
- Always if vip display nameai.always_if_vip_display_name
- Always ask the model when an external sender uses a VIP's display name.Default: True
- Hold max minutesai.hold_max_minutes
- If the model cannot be reached for this long, held mail is decided by the rules alone.Default: 30
Attachments
- Blocked extensionsattachments.blocked_extensions
- File types refused as attachments - checked on the last extension, inside archives, and against the real file type.Default: exe, scr, pif, com, bat, cmd, vbs, vbe, js, jse, wsf, wsh, hta, cpl, msi, msp, jar, ps1, psm1, reg, lnk, iso, img, vhd, vhdx, one, chm, application, gadget, msc, appx, appxbundle, msix, library-ms, settingcontent-ms, xll, wiz, url, svg
- Macro actionattachments.macro_action
- Office documents containing VBA macros: quarantine, score only (rule ATTACH_OFFICE_MACRO adds points), or allow.Default: quarantine
- Encrypted archive actionattachments.encrypted_archive_action
- Password-protected ZIP / 7z / RAR archives (cannot be virus-scanned): quarantine, score only, or allow.Default: quarantine
- Max archive depthattachments.max_archive_depth
- How many nested archive levels are unpacked and inspected.Default: 3
- Max archive membersattachments.max_archive_members
- Maximum files inspected inside one archive (not on the policy page; default 500).Default: 500
Action choices
Every "Actions per verdict" field offers Deliver, Deliver + tag (Junk), Quarantine, Reject at SMTP and Discard silently - see Actions. Rejection only happens at SMTP time for gateway mail; API-scanned mail that would be rejected is quarantined instead.
Tuning tips
- Too much spam getting through: lower quarantine by 1 at a time and watch Message trace for false positives.
- Newsletters annoying users: set bulk to Quarantine for that organization - users can still release them.
- A partner constantly failing SPF/DMARC: fix it on their side if you can; otherwise allow-list their domain (a spoof that fails DMARC p=reject is still caught).
- The AI host is slow or busy: raise Ask the model from score so fewer messages are held, or switch to async where an API connector exists.