ObsidianDocumentation Sign in

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

  1. Start from the default policy (Protect › Policies › Default policy › Edit, MSP administrators only).
  2. Collect the enabled overrides that match the message: global overrides first, then the message's organization's overrides.
  3. Within each group the override with the lowest priority number wins - it is applied last, on top of the others.
  4. 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.

Example. "Finance - strict" for @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 @domain entries, 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.