TL;DR
- Cosa imparerai: Come diagnosticare falsi positivi in Exchange Online, liberare email in quarantena e configurare override per proteggere i mittenti fidati
- Tempo richiesto: 20-45 minuti per la diagnosi, altri 30 per le whitelist
- Difficoltà: Media — serve accesso Global Admin o Security Admin
Il Problema
L'8 febbraio 2026, i sysadmin di mezzo mondo hanno iniziato a ricevere segnalazioni strane: email attese non arrivano, messaggi Teams spariscono nel nulla, i mittenti giurano di aver inviato tutto. Controlli sul mail server? Tutto verde. SMTP? OK. SPF, DKIM, DMARC? Tutti validati. Eppure le email non arrivano.
La colpa era di Microsoft — o meglio, delle sue regole euristiche anti-phishing aggiornate di recente. Una modifica alle detection rule in Exchange Online Protection (EOP) ha iniziato a classificare come "credential phishing" una serie di email assolutamente legittime, spedendole direttamente in quarantena senza notifica adeguata agli utenti finali.
Se stai leggendo questo probabilmente hai visto una di queste situazioni:
- Un utente ti dice "non ho ricevuto la conferma d'ordine" ma nel tenant non c'è traccia della mail
- Nel Security & Compliance Center trovi decine di messaggi in quarantena con label
Phish che non ti convincono
- Il Message Trace mostra
FilteredAsSpam su email con mittenti che usi da anni
- Teams ha smesso di recapitare alcuni messaggi di canale senza errori visibili
Il problema reale non è questo singolo incidente Microsoft — è che i tuoi utenti probabilmente non ti hanno avvisato subito, e nel frattempo hanno perso email critiche. Clienti, fornitori, contratti. Roba seria.
Vediamo come uscirne, e soprattutto come costruire un sistema che non ti lasci di nuovo all'oscuro.
Prerequisiti
Prima di mettere mani alla configurazione, assicurati di avere:
- Accesso al Microsoft 365 Defender portal (security.microsoft.com) con ruolo Global Admin o Security Admin
- Accesso al Exchange Admin Center (admin.exchange.microsoft.com)
- PowerShell con modulo ExchangeOnlineManagement installato e connesso
- Log di Message Trace degli ultimi 10 giorni (limite del portale grafico; per periodi più lunghi serve il report Extended Message Trace)
- Lista dei mittenti o domini che risultano bloccati
Step-by-Step
Step 1 — Verifica cosa c'è in quarantena
Primo controllo: quante email sono finite in quarantena nelle ultime 48-72 ore con verdict Phish?
Dal Defender portal: Email & collaboration → Review → Quarantine
Filtra per:
- Reason: Phish
- Date: ultimi 7 giorni
In alternativa, da PowerShell:
Get-QuarantineMessage -QuarantineTypes Phish -StartReceivedDate (Get-Date).AddDays(-7) |
Select-Object SenderAddress, RecipientAddress, ReceivedTime, Subject, Released |
Sort-Object ReceivedTime -Descending |
Format-Table -AutoSize
Se vedi mittenti con reputazione solida (provider SaaS noti, partner storici, notifiche automatiche da sistemi interni) finiti qui, sei nel problema descritto.
Errore comune: Controllare solo lo Spam folder degli utenti. I messaggi classificati come Phish non vanno in Junk — vanno in quarantena amministrativa e l'utente non li vede nemmeno.
Per ogni messaggio sospetto, scarica gli header completi dal portale quarantena e cerca la voce X-Forefront-Antispam-Report.
Esempio di header problematico:
X-Forefront-Antispam-Report: CIP:40.107.X.X;CTRY:US;LANG:en;
SCL:9;SRV:;IPV:NLI;SFV:SKN;
PTR:mail-eopbgr1360123.outbound.protection.outlook.com;
CAT:PHSH;SFS:(...);
DIR:INB;SFP:1501
I campi chiave:
CAT:PHSH = categorizzato come phishing
SCL:9 = Spam Confidence Level massimo
SFV:SKN = azione: quarantena
Se il mittente è @outlook.com, @microsoft.com o un provider legittimo con buona reputazione IP, e il contenuto non ha link sospetti, è quasi certamente un falso positivo da regola euristica.
# Recupera il messaggio e analizza le proprietà
Get-QuarantineMessage -Identity "<MessageID>" |
Select-Object -ExpandProperty CustomData
Step 3 — Rilascia i messaggi legittimi dalla quarantena
Per rilasciare singoli messaggi dalla UI: seleziona → Release → scegli se segnalare come falso positivo a Microsoft (fallo sempre — aiuta il modello).
Per rilascio bulk da PowerShell:
# Rilascia tutti i messaggi Phish delle ultime 24h da un mittente specifico
Get-QuarantineMessage -QuarantineTypes Phish -SenderAddress "noreply@esempio.com" |
Release-QuarantineMessage -ReleaseToAll
Attenzione: non rilasciare in blocco senza prima verificare almeno a campione. In mezzo ai falsi positivi potrebbero esserci messaggi realmente malevoli.
Step 4 — Configura una safe sender list o un transport rule override
Per i mittenti che sai essere sicuri, hai due opzioni:
Opzione A — Tenant Allow/Block List (consigliata)
Dal Defender portal: Policies & rules → Threat policies → Tenant Allow/Block Lists → Senders
Aggiungi il dominio o l'indirizzo con entry type Allow. Attenzione: Microsoft può rimuovere automaticamente le allow dopo 30 giorni se il mittente non invia traffico. Imposta un reminder.
Opzione B — Exchange Transport Rule (per scenari complessi)
New-TransportRule -Name "Bypass Phish Filter - Partner Fidato" `
-SenderDomainIs "partner-fidato.com" `
-SetHeaderName "X-MS-Exchange-Organization-SkipSafeLinksProcessing" `
-SetHeaderValue "1" `
-SetSCL -1 `
-Comments "Override manuale - verificato 2026-02-10"
Impostare SCL -1 bypassa completamente il filtro spam. Usalo solo per mittenti di cui hai il pieno controllo (es. sistemi interni, partner con IP fissi).
Errore comune: Aggiungere interi TLD alla whitelist (es. *.it). Non farlo. Whitelist granulari per dominio o IP specifici.
Step 5 — Configura gli alert per non perdere future quarantene
Se non hai alert attivi sulla quarantena, sei cieco. Configuriamoli ora.
Dal Defender portal: Alerts → Alert policies → New alert policy
Crea un alert per:
- Activity: Messages quarantined (volume spike)
- Threshold: Più di 50 messaggi in quarantena in 1 ora (adatta alla tua baseline)
- Notification: Email al team IT + ticket automatico se hai un sistema di ticketing integrato
In alternativa, via PowerShell:
New-ActivityAlert -Name "Spike Quarantena" `
-Operation QuarantineMessage `
-Threshold 50 `
-TimeWindow 60 `
-NotifyUser "sysadmin@tuazienda.it"
Questo da solo ti avrebbe salvato ore di debug in questo incidente.
Verifica
Dopo aver applicato le configurazioni, verifica che tutto funzioni:
1. Test con Message Trace
Invia una mail di test dal mittente che era in blacklist e tracciala immediatamente:
Get-MessageTrace -SenderAddress "test@partner-fidato.com" `
-RecipientAddress "utente@tuazienda.it" `
-StartDate (Get-Date).AddMinutes(-30) `
-EndDate (Get-Date) |
Select-Object Received, SenderAddress, RecipientAddress, Status, ToIP, FromIP
Cerchi Status: Delivered — non FilteredAsSpam o Quarantined.
2. Controlla il Quarantine digest degli utenti
Verifica che gli utenti ricevano notifiche di quarantena periodiche (il default è ogni 3 giorni). Se non le ricevono, non sapranno mai di messaggi bloccati:
Get-QuarantinePolicy | Select-Object Name, QuarantinePolicyType,
EndUserQuarantinePermissions, EsnEnabled
EsnEnabled: True significa che le notifiche sono attive.
3. Verifica i log di audit
Controlla che i rilasci manuali siano tracciati:
Search-UnifiedAuditLog -StartDate (Get-Date).AddDays(-1) `
-EndDate (Get-Date) `
-Operations ReleaseQuarantinedMessage |
Select-Object CreationDate, UserIds, Operations
Troubleshooting
Il messaggio è stato rilasciato ma l'utente non lo vede nella inbox
Verifica che non sia finito nella cartella Junk dopo il rilascio. Exchange può applicare un secondo livello di filtering lato client (Outlook/OWA). Controlla anche le regole client-side dell'utente.
La Transport Rule è attiva ma i messaggi vengono ancora filtrati
Le Transport Rule hanno un ordine di priorità. Se hai una policy anti-phishing con priorità più alta che sovrascrive il SCL, la tua regola viene ignorata. Controlla l'ordine con:
Get-AntiPhishPolicy | Select-Object Name, Priority, IsDefault
Get-TransportRule | Select-Object Name, Priority | Sort-Object Priority
I messaggi Teams non arrivano nonostante le email funzionino
Teams usa un canale separato. I blocchi sui messaggi di canale o chat esterni richiedono verifica nelle Teams Message Policies e nei log del Communication Compliance. Controlla anche se il mittente esterno è in un tenant federato con politiche restrittive.
Microsoft ha rimosso la mia allow list entry
Microsoft rimuove automaticamente le entry allow se il mittente non genera traffico per 30 giorni, o se il sistema ritiene che la minaccia sia rientrata. Esporta regolarmente la tua allow list e automatizza il monitoraggio:
Get-TenantAllowBlockListItems -ListType Sender |
Export-Csv -Path "allowlist-backup-$(Get-Date -Format yyyyMMdd).csv" -NoTypeInformation
Non riesco ad accedere alla quarantena di un utente specifico
Solo Global Admin, Security Admin o un ruolo custom con permesso QuarantinePermission può gestire la quarantena altrui. Verifica i ruoli nel portale con Get-RoleGroupMember -Identity "Security Administrator".
Conclusione
Quello che è successo con Microsoft non è un caso isolato — i filtri euristici vengono aggiornati continuamente e i falsi positivi sono un rischio strutturale di qualsiasi soluzione cloud-first. Il punto non è trovare il filtro perfetto che non sbaglia mai: non esiste.
Il punto è avere visibilità immediata quando qualcosa va storto, procedure chiare per il rilascio dei messaggi legittimi e una configurazione che protegga davvero senza paralizzare l'operatività.
Se vuoi una protezione email che separa nettamente i layer di analisi e ti dà controllo granulare senza dover ogni volta sperare che l'euristica di turno non impazzisca, dai un'occhiata a MailSniper — costruito su Libraesva con policy configurabili e trasparenza sui verdetti.
Per approfondire come funziona l'analisi multi-layer, la pagina Come Funziona è il punto di partenza. E se hai domande specifiche sulla gestione dei falsi positivi, la FAQ copre i casi più comuni.