Configurer Postfix sous Debian comme relais SMTP vers Microsoft 365 avec OAuth2
- Mise à jour le 14 juil. 2025

Dans cet article, je vous montre comment configurer un serveur de messagerie Postfix sous Debian 12.
L’objectif est de configurer ce serveur Postfix comme un relais SMTP pour des applications ou des périphériques (comme des imprimantes multifonctions) qui ne prennent pas en charge l’authentification OAuth. Cette configuration leur permettra de continuer à envoyer des e-mails, même lorsque Microsoft désactivera définitivement l’authentification de base à partir du 1er mars 2026.
Pour cela, nous utiliserons le plugin SASL sasl-xoauth2, qui permet la prise en charge d’OAuth 2.0 côté client. Vous pouvez trouver plus d’informations sur la page GitHub officielle du projet.
Architecture
Comme mentionné précédemment, le serveur Postfix agira comme un relais pour les clients qui ne prennent en charge que l’authentification de base. Les autres clients compatibles avec l’authentification moderne continueront à utiliser directement OAuth.
Le schéma ci-dessous illustre le fonctionnement du relais d’e-mails entre les clients anciens (comme les imprimantes ou applications), le serveur relais Postfix et Microsoft 365 via OAuth2.

Configurer Microsoft Entra pour l’authentification OAuth2
Créer l’utilisateur M365 et activer le SMTP authentifié
Commencez par créer un compte utilisateur Microsoft 365 avec licence, qui sera utilisé pour l’envoi des e-mails. C’est ce compte qui demandera le jeton OAuth. Dans mon cas, j’ai créé un utilisateur nommé postfix@std.rocks
.
Il est important d’activer le SMTP authentifié pour ce compte via le portail d’administration Microsoft 365. Sans cette option activée, l’authentification OAuth ne fonctionnera pas.

Nous allons maintenant créer une application avec les autorisations nécessaires pour envoyer des e-mails. C’est cette application à laquelle le serveur Postfix se connectera pour obtenir le jeton OAuth.
Enregistrer une application dans Microsoft Entra
- Dans la barre de recherche en haut du centre d’administration Microsoft Entra, tapez App registrations et sélectionnez le résultat correspondant :

- Cliquez sur le bouton Nouvel enregistrement pour commencer à créer votre application :

- Donnez à l’application un nom qui identifie clairement son usage (par exemple OAuth-Postfix) :

- Accédez au menu Autorisations d’API, puis cliquez sur Ajouter une autorisation :

- Ajoutez l’autorisation
SMTP.Send
, puis cliquez sur Accorder le consentement d’administration pour l’approuver pour le locataire :

Récupérer l’ID client et l’ID du locataire
Depuis le portail Microsoft Entra, vous devez également récupérer certaines informations clés pour la configuration à venir.
- Allez dans l’onglet Vue d’ensemble de votre application enregistrée et copiez les valeurs suivantes :
ID client
— également appelé ID d’applicationID du locataire
— également appelé ID de l’annuaire

Installer Postfix et sasl-xoauth2 sous Debian
Sur votre serveur Debian 12 qui agira comme relais de messagerie, commencez par installer le plugin sasl-xoauth2, puis le serveur de messagerie Postfix.
Installer le plugin sasl-xoauth2
Le plugin sasl-xoauth2 n’est pas encore disponible en tant que paquet dans les dépôts officiels de Debian, nous allons donc le compiler depuis les sources.
- Depuis un terminal root, installez les dépendances requises pour compiler le plugin :
root@host:~# apt update && apt install build-essential cmake debhelper libcurl4-openssl-dev libjsoncpp-dev libsasl2-dev pandoc pkg-config python3-argparse-manpage python3-msal python3-distutils pip
- Rendez-vous sur la page officielle des versions GitHub et téléchargez la dernière version avec
wget
. Dans cet exemple, nous utilisons la version 0.25 :
root@host:~# wget https://github.com/tarickb/sasl-xoauth2/archive/refs/tags/release-0.25.tar.gz
- Extrayez l’archive
.tar.gz
téléchargée :
root@host:~# tar xzvf release-0.25.tar.gz
- Compilez puis installez le plugin :
root@host:~# cd sasl-xoauth2-release-0.25/
root@host:~# mkdir build && cd build
root@host:~# cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_SYSCONFDIR=/etc
root@host:~# make
root@host:~# make install
- Vérifiez la configuration par défaut pour confirmer que le plugin fonctionne correctement :
root@host:~# sasl-xoauth2-tool test-config --config-file /etc/sasl-xoauth2.conf
Config check passed.
Installer et configurer Postfix
- Installez Postfix (choisissez « Aucune configuration » lorsque cela est demandé) :
root@host:~# apt update && apt install postfix
- Créez le fichier
/etc/mailname
pour définir le nom de domaine par défaut :
root@host:~# echo "std.rocks" > /etc/mailname
- Modifiez le fichier
/etc/postfix/main.cf
pour configurer Postfix.
Note : ajoutez les IPs de votre réseau local dans la directivemynetworks
si vous prévoyez de relayer des mails depuis d'autres machines.
Voici un exemple de configuration permettant d’activer Postfix comme relais avec OAuth2 en utilisant le mécanisme sasl-xoauth2
:
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
# Debian specific: Specifying a file name will cause the first
# line of that file to be used as the name. The Debian default
# is /etc/mailname.
myorigin = /etc/mailname
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
# delay_warning_time = 4h
readme_directory = no
# See http://www.postfix.org/COMPATIBILITY_README.html -- default to 3.6 on
# fresh installs.
compatibility_level = 3.6
# TLS parameters
## SMTPD
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_security_level=may
## SMTP
smtp_tls_CApath=/etc/ssl/certs
smtp_always_send_ehlo = yes
smtp_tls_security_level = encrypt
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = postfix.std.local
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = $myhostname, localhost.std.local, localhost
relayhost = [smtp.office365.com]:587
mynetworks = 127.0.0.0/8
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = ipv4
#XOAUTH2
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options =
smtp_sasl_mechanism_filter = xoauth2
Note : sous Debian, Postfix s’exécute par défaut dans un environnement chroot. Cela signifie que tout chemin comme /etc/tokens/
doit être accessible sous /var/spool/postfix
.
- Créez le dossier où sera stocké le jeton OAuth :
root@host:~# mkdir /var/spool/postfix/etc/tokens
- Définissez les permissions pour que Postfix puisse lire le jeton :
root@host:~# chown -R postfix:postfix /var/spool/postfix/etc/tokens
- Redémarrez le service Postfix :
root@host:~# systemctl restart postfix
- Copiez les certificats CA dans l’environnement chroot (⚠️ ce fichier est effacé à chaque redémarrage de Postfix) :
root@host:~# cp /etc/ssl/certs/ca-certificates.crt /var/spool/postfix/etc/ssl/certs/ca-certificates.crt
- Créez le fichier
/etc/postfix/sasl_passwd
et définissez les permissions :
[smtp.office365.com]:587 postfix@std.rocks:/etc/tokens/postfix@std.rocks
root@host:~# chmod 600 /etc/postfix/sasl_passwd
- Générez la base de données de mots de passe SASL :
root@host:~# postmap /etc/postfix/sasl_passwd
Générer un jeton OAuth
- Modifiez le fichier
/etc/sasl-xoauth2.conf
avec les paramètres suivants :--client-id
: ID de l’application (Client ID)client_secret
: laissez ce champ vide--tenant
: ID du locataire (Tenant ID)log_full_trace_on_failure
: (optionnel) activer la journalisation complète en cas d’écheclog_to_syslog_on_failure
: (optionnel) journaliser les erreurs dans syslog
Voici un exemple de configuration pour /etc/sasl-xoauth2.conf
utilisant vos identifiants d’application et de locataire :
{
"client_id": "<CLIENT_ID>",
"client_secret": "",
"log_full_trace_on_failure": "no",
"log_to_syslog_on_failure": "no",
"token_endpoint": "https://login.microsoftonline.com/<TENANT_ID>/oauth2/v2.0/token"
}
- Générez le jeton OAuth avec la commande suivante :
postfix@std.rocks
: compte Outlook 365--client-id
: ID de l’application--tenant
: ID du locataire
root@host:~# sasl-xoauth2-tool get-token outlook /var/spool/postfix/etc/tokens/postfix@std.rocks --client-id="<CLIENT_ID>" --use-device-flow --tenant="<TENANT_ID>"
La commande vous demandera de vous authentifier via un navigateur. Vous verrez un message similaire à celui-ci :
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code XXXXXXXXX to authenticate.
- Suivez les instructions : ouvrez https://microsoft.com/devicelogin dans votre navigateur, entrez le code fourni, puis connectez-vous avec le compte Postfix. Un administrateur devra approuver la demande d’autorisation.

- Si tout fonctionne correctement, l’outil renverra :
Acquired token.
- Vous devriez alors voir un token créé dans le dossier configuré :
root@host:~# ls -lh /var/spool/postfix/etc/tokens/
total 4,0K
-rw-r--r-- 1 root root 3,5K 13 juil. 15:31 postfix@std.rocks
Tester et déboguer
Tester le relais d’e-mails avec sendmail
Votre relais devrait maintenant être opérationnel. Pour tester la configuration depuis l’hôte relais, vous pouvez utiliser la commande sendmail
directement dans le terminal.
- Créez un fichier de message de test :
From: postfix@std.rocks
To: administrator@std.rocks
Subject: Message de test
Est-ce que ça fonctionne ?
- Envoyez l’e-mail avec
sendmail
:
root@host:~# cat /tmp/test.txt | sendmail -F postfix@std.rocks administrator@std.rocks
Activer le débogage pour OAuth et Postfix
- Activez la journalisation détaillée dans
/etc/sasl-xoauth2.conf
:
{
"client_id": "<CLIENT_ID>",
"client_secret": "",
"log_full_trace_on_failure": "yes",
"log_to_syslog_on_failure": "yes",
"token_endpoint": "https://login.microsoftonline.com/<TENANT_ID>/oauth2/v2.0/token"
}
- Modifiez
/etc/postfix/master.cf
pour rendre le processus SMTP plus bavard en ajoutant-v
à la ligne de service smtp :
[…]
smtp unix - - y - - smtp -v
[…]
- Redémarrez Postfix et recopiez les certificats CA dans l’environnement chroot :
root@host:~# systemctl restart postfix; cp /etc/ssl/certs/ca-certificates.crt /var/spool/postfix/etc/ssl/certs/ca-certificates.crt
- Utilisez
journalctl
pour surveiller les journaux en temps réel :
root@host:~# journalctl -f
Ensuite, renvoyez votre e-mail de test et vérifiez les journaux pour identifier les erreurs ou confirmer la bonne livraison.