[BP 2.4] The Exchange Online Quick Checklist

Every action from the Exchange Online baseline as a scannable list, with the way to check each one and a pointer to the article that argues for it. Tiered critical, recommended and optional, grouped by control-plane domain.


The terse version. Every action from this series as a list you can run down, with the way to check each one and a pointer to the article that argues for it. No reasoning here on purpose. If a row makes you uneasy, the article behind it is where the argument lives.

Tiers mean the same thing they meant in the identity series. C is critical: the cost of getting it wrong is a breach or an outage and I would not sign off without it. R is recommended: I would want a reason for not doing it. O is optional: worth a decision, not worth an argument. Commands assume a connected Exchange Online session unless noted.


1. Data and email: authentication

TierDo thisHow to verifySee
CHold the registrar and DNS hosting account under privileged-access disciplineNamed owners, strong auth, documented recovery path at the provider[BP 2.1]
CPublish SPF per sending domain, ending -allResolve-DnsName <domain> -Type TXT shows one v=spf1 record ending -all[BP 2.1], [BP 2.1.1]
CStay inside the ten-lookup limit and never flatten Microsoft’s includeEvaluate the record recursively, not off its face; nested includes count and Microsoft’s own include is not a leaf. No literal Microsoft addresses present[BP 2.1.1]
CEnable DKIM for every custom domain, publishing the values the service gives youGet-DkimSigningConfig | FL Domain,Enabled,Status returns enabled and valid[BP 2.1.1]
CTake DMARC to p=reject on every domain and subdomainResolve-DnsName _dmarc.<domain> -Type TXT shows p=reject[BP 2.1], [BP 2.1.1]
CProve enforcement in both directions, not just in DNSA forgery from outside the SPF record fails aligned SPF and DKIM, and reaches the intended verdict both inside your tenant and at an external receiver[BP 2.1.1]
CSend aggregate reports to a monitored address, not a personReports are received and parsed rather than read, senders are categorised as authorised or not, a new source triggers review, and retention is defined. A hosted service or your own parser both qualify; a mailbox alone does not[BP 2.1.1]
CPublish DMARC for the initial onmicrosoft.com domainA record exists at _dmarc.<tenant>.onmicrosoft.com[BP 2.1.1]
CWhere a gateway fronts the tenant, enable enhanced filtering on that connectorGet-InboundConnector | FL Name,EFSkipLastIP,EFSkipIPs,EFUsers; EFSkipLastIP False with an empty EFSkipIPs is off, not on; inbound mail through the gateway carries X-MS-Exchange-ExternalOriginalInternetSender[BP 2.1]
RAdd trusted ARC sealers only where an intermediary demonstrably breaks authenticationGet-ArcConfig | FL ArcTrustedSealers lists only vendors you chose[BP 2.1.1]
OEnable inbound DANE with DNSSEC and publish a TLS reporting recordGet-SmtpDaneInboundStatus -DomainName <domain>; _smtp._tls record present[BP 2.1.1]

Note on inbound honouring: the anti-phishing policy already honours the sender’s DMARC policy by default, including in the default policy, and rejects on reject. There is no row for turning it on because there is nothing to turn on. The row above about enhanced filtering is what determines whether that default does anything in your estate.


2. Identity and access

TierDo thisHow to verifySee
CBlock legacy authentication with a Conditional Access policy you ownA policy exists in your own naming convention, enabled, with break-glass excluded[BP 2.1]
CDisable basic authentication for SMTP client submission org-wideGet-TransportConfig | FL SmtpClientAuthenticationDisabled returns True; a basic-authentication submission attempt fails[BP 2.1], [BP 2.3]
CInventory and date every per-mailbox SMTP AUTH exceptionGet-CASMailbox finds explicit overrides only; a $null inherits the organisation setting, so the real inventory is Entra sign-in logs filtered to Authenticated SMTP, corroborated by message trace[BP 2.3]
CBlock sign-in on shared and resource mailbox accountsCorrelate ExternalDirectoryObjectId to the Entra object and read accountEnabled; every row returns False. Synced objects are disabled on-premises, because a change here is overwritten[BP 2.1]
RReject Direct Send unless a named device depends on itGet-OrganizationConfig | FL RejectDirectSend returns True; an anonymous submission using an accepted domain in the envelope sender is refused with 550 5.7.68, while authenticated submission and connector relay still deliver[BP 2.1]

3. Data and email: threat policies

TierDo thisHow to verifySee
RAssign the Standard preset to all users, or Strict where tolerance is lowerGet-EOPProtectionPolicyRule and Get-ATPProtectionPolicyRule show enabled rules covering everyone[BP 2.2]
RIf you run custom policies instead, author a quarantine policy with notifications onGet-QuarantinePolicy shows a custom policy with end-user notification enabled[BP 2.2]
RPopulate user and domain impersonation protectionProtected users include the people who get impersonated, with external addresses; partner domains listed[BP 2.2]
RSet outbound automatic forwarding explicitly offGet-HostedOutboundSpamFilterPolicy | FL AutoForwardingMode[BP 2.2]
RBlock automatic forwarding at the remote domain as wellGet-RemoteDomain | FT DomainName,AutoForwardEnabled returns False on the default domain; any named partner exception carries a documented owner and purpose. Sweep mail flow rules separately, because a redirect action is not covered by the outbound policy[BP 2.2]

The two forwarding rows are not a duplicate. The compliance baselines check the remote domain and the product exposes the outbound policy, and an estate that sets only one will be correctly configured and still fail an assessment.


4. Monitoring and response

TierDo thisHow to verifySee
CConfirm the unified audit log is on, never assume it on Business SKUsGet-AdminAuditLogConfig | FL UnifiedAuditLogIngestionEnabled, run from an Exchange session; a test action appears in an audit search[BP 2.1]
CConfirm mailbox auditing is on at the organisation levelGet-OrganizationConfig | FL AuditDisabled returns False[BP 2.1]
REnable search-query auditing on the accounts where it mattersSet-Mailbox <user> -AuditOwner @{Add="SearchQueryInitiated"} on executives, privileged admins, legal and HR, and sensitive shared mailboxes. Needs premium auditing to generate, and customising AuditOwner stops Microsoft managing that sign-in type’s defaults[BP 2.1]
CRoute alert notifications to a monitored queueGet-ProtectionAlert recipients are a shared queue, not an individual[BP 2.1]
RDecide audit retention against the incident you expect, before you need itLicensing and any retention policy match the stated requirement; note ten years is not retroactive[BP 2.1]
RSet the user-reported destination explicitly, never leave it blankThe submission policy names a monitored mailbox, not an unset default[BP 2.2]
RRemove the legacy reporting add-ins in favour of the built-in buttonNeither add-in appears under integrated apps; the report button is enabled[BP 2.2]

Do not set the mailbox audit age limit. It no longer governs retention in Exchange Online and a script that sets it reports success while doing nothing.


5. Device trust

TierDo thisHow to verifySee
OApply read-only Outlook web access plus application-enforced restrictions for unmanaged devicesGet-OwaMailboxPolicy | FL ConditionalAccessPolicy plus a matching Conditional Access policy[BP 2.2]
RDisable consumer and third-party storage providersGet-OwaMailboxPolicy | FL AdditionalStorageProvidersAvailable returns False[BP 2.2]

Both rows now reach the desktop, not just the browser, because Outlook web policies govern the new Outlook for Windows. And read-only blocks download and offline mode, not printing; attachments stay viewable in the browser unless you use the stricter variant.


6. Data and email: retention and archiving

TierDo thisHow to verifySee
RExtend deleted item retention to 30 days on existing mailboxes and the mailbox planGet-Mailbox | FT RetainDeletedItemsFor and Get-MailboxPlan | FT RetainDeletedItemsFor[BP 2.2]
RUse Purview retention policies as the general instrument; reserve litigation hold for live mattersA retention policy covers Exchange; holds map to named matters[BP 2.2]
OEnable archive mailboxes only where growth warrants itGet-Mailbox | FT ArchiveStatus[BP 2.2]
ODecide the automatic archiving position deliberately; there is no enable parameter, but a threshold of 100 disables it tenant-wideGet-OrganizationConfig | FL AutoArchivingThresholdPercentage[BP 2.2]
OTreat auto-expanding archiving as irreversible and scope it deliberatelyEnabled only on mailboxes with a stated growth case, never tenant-wide by default[BP 2.3]

7. Tenant governance

TierDo thisHow to verifySee
OAudit legacy distribution lists and public folders and decide case by caseA written decision per collaboration-heavy object; broadcast lists left alone[BP 2.2]

8. The dated items, which are not settings

TierDo thisHow to verifySee
CConfirm no POP3 or IMAP4 client still negotiates TLS 1.0 or 1.1Deadline 31 July 2026; rollout 1 August to 31 December; failures are hard, not degraded[BP 2.3]
CBuild your Exchange Web Services allow list before Microsoft infers one for youAn explicit list exists and every entry is an application you can name[BP 2.3]
CKnow the organisation-level EWS setting overrides per-mailbox settingsYour inventory was built from the organisation setting, not from mailboxes[BP 2.3]
CDiary the basic-auth submission date and re-verify it before actingEnd of December 2026 recorded, with the withdrawn earlier date noted as withdrawn[BP 2.3]
RReplace any runbook step using retired search, hold or client access rule surfacesNo runbook references classic content search, mailbox search or client access rules[BP 2.3]
RIf first-party backup is enabled, record what it is not governed byThe retention design states that backups are outside Purview retention and not discoverable[BP 2.3]

One closing note on the reference frameworks, because someone will ask. Where a federal SCuBA control corresponds to a row above, I have anchored to it, and its Exchange section was restructured recently enough that a good deal of published commentary cites identifiers that no longer exist. Several rows here have no corresponding control at all, including everything on archiving, deleted-item retention, user reporting and transport authentication. That is a property of the framework rather than a gap in the row.


Best Practices
‹ Previous: [BP 2.3.1] Build Sheet: Protocol Retirement Discovery
Next: [BP 3] Collaboration: The Surface You Already Shared