Chapitre 1019 minIntermédiaire
Messagerie : SMTP, IMAP, MX, SPF, DKIM et DMARC
Par Josselyn C., prof de BTS SIO. Mis à jour le .
À la fin de ce chapitre, tu sauras
- suivre le trajet d'un courriel et nommer les agents de messagerie ;
- associer chaque protocole de messagerie à son port ;
- écrire les enregistrements SPF, DKIM et DMARC d'un domaine ;
- évaluer l'alignement DMARC d'un message ;
- configurer un relais Postfix pour les notifications internes.
4 exercices corrigés1 schéma
La messagerie électronique repose sur deux familles de protocoles : SMTP pour envoyer et transporter les courriels de serveur en serveur, IMAP (ou POP3) pour les lire dans sa boîte. Le DNS y tient un rôle central : l'enregistrement MX dit où livrer les courriels d'un domaine, et trois enregistrements TXT, SPF, DKIM et DMARC, permettent au destinataire de vérifier qu'un courriel vient bien du domaine qu'il affiche. Ce chapitre suit le trajet d'un courriel, détaille ports et protocoles, explique SPF, DKIM et DMARC avec les exigences actuelles des grandes messageries, et configure un relais Postfix pour les notifications internes.
Les acteurs d'un courriel
| Sigle | Nom | Rôle | Exemple |
|---|---|---|---|
| MUA | Mail User Agent | Le logiciel de l'utilisateur, qui rédige et lit | Outlook, Thunderbird, un webmail, le client de messagerie du téléphone |
| MSA | Mail Submission Agent | Reçoit les courriels soumis par les utilisateurs authentifiés | Le service de soumission du serveur de l'entreprise, port 587 ou 465 |
| MTA | Mail Transfer Agent | Transporte les courriels de serveur en serveur | Postfix, Exim, Microsoft Exchange, les serveurs des hébergeurs |
| MDA | Mail Delivery Agent | Range le courriel dans la boîte du destinataire | Dovecot, le stockage d'Exchange |
| Serveur IMAP ou POP3 | Donne accès à la boîte | Dovecot, Exchange |
Le trajet d'un courriel
Julie Lefèvre, comptable chez Sorbier, écrit à un transporteur partenaire, contact@transporteur.example. La messagerie de Sorbier est hébergée chez un prestataire, sur le serveur mail.sorbier.example (198.51.100.25).
- Soumission. L'Outlook de Julie (MUA) envoie le message au service de soumission de
mail.sorbier.example, sur le port 587 avec STARTTLS (ou 465 en TLS direct), en s'authentifiant avec le compte de Julie. - Recherche du destinataire. Le serveur de Sorbier, devenu MTA, demande au DNS l'enregistrement MX de
transporteur.example. - Le DNS répond :
mx.transporteur.example, préférence 10. - Transport. Le serveur de Sorbier ouvre une connexion SMTP sur le port 25 du serveur du transporteur, chiffrée par STARTTLS si les deux serveurs le proposent, et lui transmet le message.
- Vérifications. Le serveur du transporteur contrôle l'expéditeur : SPF (l'adresse qui lui parle a-t-elle le droit d'envoyer pour
sorbier.example?), DKIM (la signature du message est-elle valide ?), DMARC (que veut le propriétaire du domaine en cas d'échec ?). Il passe aussi le message à l'antispam et à l'antivirus. - Remise. Le MDA range le message dans la boîte du destinataire.
- Lecture. Le destinataire le lit en IMAP sur le port 993.
Les protocoles et leurs ports
| Protocole | Port | Usage | Chiffrement |
|---|---|---|---|
| SMTP | 25 | Transport entre serveurs | STARTTLS (le chiffrement se négocie après la connexion) |
| SMTP, soumission | 587 | Envoi par les utilisateurs, authentifiés | STARTTLS |
| SMTP, soumission en TLS direct | 465 | Envoi par les utilisateurs, recommandé par la RFC 8314 | TLS dès la connexion |
| IMAP | 143 | Lecture, messages laissés sur le serveur, dossiers synchronisés | STARTTLS |
| IMAPS | 993 | Lecture, chiffrée | TLS dès la connexion |
| POP3 | 110 | Lecture, messages téléchargés puis en général supprimés du serveur | STARTTLS |
| POP3S | 995 | Lecture, chiffrée | TLS dès la connexion |
IMAP ou POP3 ? IMAP laisse les messages sur le serveur et synchronise les dossiers entre tous les appareils de l'utilisateur : c'est le choix normal aujourd'hui. POP3 télécharge les messages sur un seul appareil ; il ne survit que dans de vieilles configurations. Les messageries d'entreprise hébergées utilisent souvent leurs propres protocoles (Exchange, API web) en plus d'IMAP.
Le dialogue SMTP, l'enveloppe et l'en-tête
SMTP est un protocole texte. Voici un échange entre deux serveurs, simplifié (S: le serveur qui reçoit, C: celui qui envoie) :
S: 220 mx.transporteur.example ESMTP
C: EHLO mail.sorbier.example
S: 250-mx.transporteur.example
S: 250-STARTTLS
S: 250 SIZE 52428800
C: STARTTLS
S: 220 Ready to start TLS
(la suite est chiffrée ; le client renvoie EHLO)
C: MAIL FROM:<julie.lefevre@sorbier.example>
S: 250 OK
C: RCPT TO:<contact@transporteur.example>
S: 250 OK
C: DATA
S: 354 End data with <CR><LF>.<CR><LF>
C: From: Julie Lefèvre <julie.lefevre@sorbier.example>
C: To: contact@transporteur.example
C: Subject: Livraison du 4 novembre
C:
C: Bonjour, ...
C: .
S: 250 OK queued as 4F2A1
C: QUIT
Deux « expéditeurs » apparaissent, et la différence compte pour la sécurité :
- l'enveloppe (
MAIL FROM, appelée aussi Return-Path) sert au transport et aux messages d'erreur ; l'utilisateur ne la voit pas ; - l'en-tête
From:est l'adresse affichée par le logiciel du destinataire.
Rien, dans SMTP, n'oblige les deux à être cohérents, ni à être vrais : un escroc peut écrire n'importe quel From:. C'est exactement le problème que DMARC résout.
SPF : qui a le droit d'envoyer pour le domaine
SPF (Sender Policy Framework, RFC 7208) est un enregistrement TXT, à l'apex du domaine, qui liste les serveurs autorisés à envoyer des courriels pour ce domaine. Le serveur qui reçoit vérifie si l'adresse IP qui lui parle figure dans la liste du domaine de l'enveloppe (MAIL FROM).
sorbier.example. IN TXT "v=spf1 mx include:_spf.emailing.example -all"
| Élément | Sens |
|---|---|
v=spf1 | Version, obligatoire, au début |
mx | Les serveurs listés dans les MX du domaine sont autorisés |
a | L'adresse du A du domaine est autorisée |
ip4:198.51.100.25 | Une adresse ou un réseau IPv4 autorisé (ip6: pour IPv6) |
include:_spf.emailing.example | Reprendre la liste d'un autre domaine : un prestataire d'envoi de lettres d'information, par exemple |
-all | Tous les autres : échec (fail), rejet recommandé |
~all | Tous les autres : échec léger (softfail), accepté mais suspect |
?all | Neutre : SPF ne dit rien |
Un domaine qui n'envoie jamais de courriel (un domaine racheté pour protéger une marque) se protège avec "v=spf1 -all" : personne n'a le droit d'envoyer pour lui.
DKIM : une signature dans chaque message
DKIM (DomainKeys Identified Mail, RFC 6376) signe chaque message sortant avec une clé privée du serveur d'envoi. La signature, placée dans l'en-tête DKIM-Signature, porte sur le corps et sur les principaux en-têtes (From, Subject, Date…). Le destinataire récupère la clé publique dans le DNS et vérifie la signature : le message vient bien d'un serveur qui détient la clé du domaine, et il n'a pas été modifié en route.
L'en-tête de signature indique où chercher la clé :
DKIM-Signature: v=1; a=rsa-sha256; d=sorbier.example; s=2026a; ...
d= est le domaine signataire, s= le sélecteur, un nom libre qui permet d'avoir plusieurs clés (une par prestataire, ou une nouvelle à chaque changement). La clé publique est publiée sous le nom <sélecteur>._domainkey.<domaine> :
2026a._domainkey.sorbier.example. IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOC..."
(la valeur p= est tronquée ici ; une clé RSA de 2 048 bits fait près de 400 caractères). C'est l'hébergeur de la messagerie qui génère la paire de clés et te donne l'enregistrement à publier. Change de clé régulièrement (une fois par an, par exemple) : publie le nouveau sélecteur, bascule la signature, puis retire l'ancien.
DMARC : la politique du domaine et l'alignement
SPF vérifie l'enveloppe, DKIM le domaine d= de la signature. Aucun des deux ne vérifie l'adresse affichée au destinataire. Un escroc peut donc envoyer depuis son propre domaine (SPF et DKIM valides pour son domaine) tout en affichant From: comptabilite@sorbier.example.
DMARC (Domain-based Message Authentication, Reporting and Conformance, RFC 9989, qui remplace depuis 2026 la RFC 7489) comble ce trou par l'alignement : le message ne passe DMARC que si SPF ou DKIM réussit pour le domaine du From: affiché. Il publie aussi la politique à appliquer en cas d'échec et une adresse pour recevoir des rapports.
_dmarc.sorbier.example. IN TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@sorbier.example; adkim=r; aspf=r"
| Balise | Sens |
|---|---|
p=none | Ne rien faire, seulement envoyer des rapports : la phase d'observation |
p=quarantine | Classer en indésirables les messages qui échouent |
p=reject | Rejeter les messages qui échouent : la protection complète |
rua=mailto:… | Adresse qui reçoit les rapports agrégés quotidiens des destinataires |
adkim=r / aspf=r | Alignement souple (relaxed) : un sous-domaine du From: suffit ; s exige le même domaine exact |
t=y | Mode test : le récepteur applique un niveau de moins que la politique publiée (quarantine au lieu de reject, rien au lieu de quarantine), pour une montée progressive. Il remplace l'ancienne balise pct, retirée par la RFC 9989 ; les récepteurs qui suivent encore l'ancienne norme lisent toujours pct |
np= | La politique des sous-domaines inexistants (facture.sorbier.example, qu'un escroc inventerait) |
La démarche se fait par étapes : publier p=none, lire les rapports pendant quelques semaines pour découvrir tous les services qui envoient au nom du domaine (le logiciel de facturation, l'outil de lettres d'information, le copieur), les autoriser dans SPF ou leur faire signer DKIM, puis passer à quarantine, et enfin à reject.
Les exigences des grandes messageries
Les grands services de messagerie ont transformé ces bonnes pratiques en conditions d'acceptation.
| Service | Depuis | Exigences pour les expéditeurs de plus de 5 000 messages par jour vers leurs utilisateurs |
|---|---|---|
| Gmail, Yahoo | Février 2024 | SPF et DKIM, DMARC publié (au moins p=none) et aligné, désinscription en un clic pour les envois commerciaux, faible taux de plaintes |
| Outlook.com, Hotmail (comptes grand public de Microsoft) | 5 mai 2025 | SPF, DKIM et DMARC (au moins p=none) alignés, sous peine de rejet |
Même en dessous de ces seuils, Gmail demande à tous les expéditeurs au moins SPF ou DKIM, un PTR cohérent pour l'adresse d'envoi et des connexions chiffrées. Une PME comme Sorbier n'envoie pas 5 000 messages par jour, mais ses factures et ses notifications doivent arriver : publier les trois enregistrements est aujourd'hui le minimum.
Lire le résultat des vérifications
Le serveur destinataire écrit le résultat de ses contrôles dans l'en-tête Authentication-Results du message. Dans Outlook, il se lit dans les propriétés du message ; dans Gmail, avec Afficher l'original.
Authentication-Results: mx.transporteur.example;
spf=pass smtp.mailfrom=sorbier.example;
dkim=pass header.d=sorbier.example header.s=2026a;
dmarc=pass header.from=sorbier.example
Les valeurs possibles : pass, fail, softfail (SPF ~all), neutral, none (pas d'enregistrement), temperror (DNS injoignable), permerror (enregistrement invalide). L'analyse des en-têtes d'un courriel d'hameçonnage, étape par étape, est un exercice classique de l'E7 (cours Réponse à incident).
Le relais des notifications internes avec Postfix
Les applications et les appareils de Sorbier envoient des courriels : les notifications de GLPI, les alertes de la supervision, les copieurs qui numérisent vers une adresse. Ils ne doivent pas parler directement à Internet (le port 25 est bloqué en sortie). Ils déposent leurs messages sur un relais interne, Postfix sur srv-intranet, qui les transmet au serveur de messagerie de l'hébergeur en s'authentifiant sur le port 587.
sudo apt install postfix libsasl2-modules
# À la question du type de configuration, choisir « Système satellite » ; on règle le reste ci-dessous
Dans /etc/postfix/main.cf, les lignes utiles :
myhostname = srv-intranet.ad.sorbier.example
myorigin = sorbier.example
inet_interfaces = all
mydestination =
mynetworks = 127.0.0.0/8, 192.168.10.176/28, 192.168.10.116/30
relayhost = [mail.sorbier.example]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_security_level = encrypt
| Paramètre | Rôle |
|---|---|
mydestination = (vide) | Ce serveur ne reçoit de courriel pour personne : il ne fait que relayer |
mynetworks | Les seules machines autorisées à déposer des messages : lui-même, les serveurs (/28) et les quatre copieurs .116 à .119 |
relayhost = [mail.sorbier.example]:587 | Tout passe par le serveur de l'hébergeur, en soumission. Les crochets évitent une recherche MX |
smtp_sasl_* | Authentification auprès de l'hébergeur, avec le compte de service stocké dans sasl_passwd |
smtp_tls_security_level = encrypt | Refuser d'envoyer si la connexion ne peut pas être chiffrée |
# Le compte de service, lisible par root seulement
echo "[mail.sorbier.example]:587 notifications@sorbier.example:MotDePasseLong" | sudo tee /etc/postfix/sasl_passwd
sudo chmod 600 /etc/postfix/sasl_passwd
sudo postmap /etc/postfix/sasl_passwd
sudo postfix check # vérifier la configuration
sudo systemctl reload postfix
postconf -n # les paramètres modifiés
mailq # la file d'attente
journalctl -u postfix@- -f # les journaux, en direct
Sous Debian 13, les journaux de Postfix sont dans le journal système (journalctl -u postfix@- : l'unité postfix.service ne fait que lancer l'instance postfix@-.service, qui tourne vraiment) ; le fichier /var/log/mail.log n'existe que si rsyslog est installé.
Exercices
Exercice 1 sur 4 Les ports de la messagerie Réussi À revoir
Pour chaque flux, donne le protocole et le port, et dis s'il doit être autorisé par le pare-feu de Sorbier.
- Le téléphone d'un commercial, sur un réseau 4G, envoie un courriel par
mail.sorbier.example. - Le poste de Karim lit sa boîte avec Thunderbird.
- Un poste du VLAN 10 ouvre une connexion directe vers le serveur MX de Gmail.
- Le relais
srv-intranettransmet à l'hébergeur une notification de l'outil de tickets.
Voir la réponseMasquer la réponse de l'exercice 1
- Soumission SMTP, port 587 (STARTTLS) ou 465 (TLS direct), authentifiée. Le flux ne passe pas par le pare-feu de Sorbier (le téléphone est en 4G et le serveur est chez l'hébergeur).
- IMAPS, port 993, vers le serveur de l'hébergeur : à autoriser des postes vers
198.51.100.25. - SMTP, port 25 : à refuser. Un poste n'a aucune raison de parler SMTP à un serveur extérieur ; c'est le signe d'un logiciel malveillant qui envoie du spam.
- SMTP, port 587, authentifié et chiffré, du relais
srv-intranet(192.168.21.10) vers198.51.100.25: à autoriser, pour ce seul serveur. Les applications, comme celle desrv-gestion, déposent leurs messages sur le relais en SMTP 25, du VLAN 20 vers le VLAN 21 : un flux interne à autoriser lui aussi.
Tu avais trouvé ?
Exercice 2 sur 4 Évaluer SPF Réussi À revoir
Le domaine sorbier.example publie "v=spf1 mx include:_spf.emailing.example -all". Son MX est mail.sorbier.example (198.51.100.25), et _spf.emailing.example autorise 192.0.2.0/24.
Pour chaque courriel dont l'enveloppe est @sorbier.example, donne le résultat SPF :
- Envoyé depuis
198.51.100.25. - Envoyé depuis
192.0.2.80. - Envoyé directement par un poste de Sorbier, depuis l'adresse publique
203.0.113.17. - Le stagiaire ajoute un second enregistrement
"v=spf1 ip4:203.0.113.17 -all". Que se passe-t-il pour tous les courriels ?
Voir la réponseMasquer la réponse de l'exercice 2
- pass : l'adresse est celle du MX (mécanisme
mx). - pass : l'adresse est dans
192.0.2.0/24, autorisée par l'include. - fail : l'adresse ne correspond à aucun mécanisme, et
-alldit d'échouer. C'est voulu : les postes ne doivent pas envoyer directement. - Deux enregistrements SPF pour un même domaine : permerror pour tous les courriels, SPF ne protège plus rien et DMARC ne peut plus s'appuyer que sur DKIM. Il fallait ajouter
ip4:203.0.113.17à l'enregistrement existant (et encore : seulement si cette adresse doit vraiment envoyer).
Tu avais trouvé ?
Exercice 3 sur 4 L'alignement DMARC Réussi À revoir
sorbier.example publie p=reject, alignement souple. Pour chaque message reçu par un partenaire, dis s'il passe DMARC.
| Message | From: affiché | Enveloppe (SPF) | Signature DKIM |
|---|---|---|---|
| A | julie.lefevre@sorbier.example | sorbier.example, SPF pass | d=sorbier.example, pass |
| B | factures@sorbier.example | bounce.emailing.example, SPF pass | d=sorbier.example, pass |
| C | direction@sorbier.example | escroc.example, SPF pass | d=escroc.example, pass |
| D | alertes@sorbier.example | sorbier.example, SPF fail | aucune |
Voir la réponseMasquer la réponse de l'exercice 3
- A : pass. SPF et DKIM réussissent, et tous deux pour le domaine du
From:. - B : pass. SPF réussit pour un autre domaine (non aligné), mais DKIM réussit pour
sorbier.example, aligné avec leFrom:: un seul des deux suffit. - C : fail, donc rejeté. SPF et DKIM réussissent, mais pour
escroc.example, qui n'est pas aligné avec leFrom:affiché. C'est exactement l'usurpation que DMARC arrête. - D : fail, donc rejeté. Le service d'alertes envoie depuis un serveur non autorisé et sans signature. Il faut l'autoriser dans SPF ou, mieux, le faire passer par le relais interne et l'hébergeur, qui signe en DKIM.
Tu avais trouvé ?
Exercice 4 sur 4 Le relais ouvert Réussi À revoir
Un audit trouve dans le main.cf d'un relais Postfix, publié sur Internet par une redirection du port 25 : mynetworks = 0.0.0.0/0.
- Quel est le risque ?
- Quels symptômes l'entreprise risque-t-elle de constater ?
- Corrige la configuration et l'architecture.
Voir la réponseMasquer la réponse de l'exercice 4
- Le relais accepte et transmet les messages de n'importe quelle adresse : c'est un relais ouvert, que les spammeurs utilisent pour envoyer en masse avec l'adresse de l'entreprise.
- File d'attente énorme (
mailq), bande passante saturée, adresse publique inscrite sur des listes noires, et courriels légitimes de l'entreprise rejetés ou classés en indésirables par les autres messageries. - Limiter
mynetworksaux seules machines internes qui en ont besoin (127.0.0.0/8, 192.168.10.176/28…), supprimer la redirection du port 25 depuis Internet (un relais interne n'a pas à être joignable de l'extérieur), vider la file des messages de spam (postsuper -d ALLaprès analyse), puis demander le retrait des listes noires.
Tu avais trouvé ?