Authentification SMTP avec Postfix et Dovecot SASL

Un serveur SMTP a habituellement deux fonctions dans une infrastructure de messagerie :

  • Recevoir les messages de l’extérieur pour les stocker dans les boites internes
  • Envoyer les messages soumis depuis les boîtes internes vers le monde extérieur

Si pour l’action « Recevoir » il n’y a généralement pas d’authentification de l’expéditeur (tout inconnu peut envoyer un mail vers votre serveur SMTP), il n’en est pas de même pour l’action « Soumission des messages ». Imaginez si tout inconnu pouvait envoyer des mails depuis votre serveur SMTP ! Ce serait le paradis des spammeurs 🙂 Ces paradis existent encore, il s’agit des fameux « relais ouverts ». Heureusement, ces serveurs sont très vites mis sur des liste noires par la plupart de hébergeurs de boîtes mails. Cela signifie que si votre serveur SMTP est lui-même un relais ouvert, alors même vos messages légitimes seront mis à la poubelle par les filtres anti-spam des hébergeurs.

Par défaut, le serveur SMTP Postfix autorise la soumission des messages uniquement depuis des clients positionnés dans le même réseau que le serveur lui-même. Pas très pratique pour la mobilité ! Nous verrons donc dans cet article comment mettre en place un système d’authentification SMTP des clients avec Postfix et l’implémentation SASL Dovecot.

Article écrit avec les versions Dovecot 2.2.13 et Postfix 2.11.3.

L’authentification réussie d’un client va lui permettre d’obtenir les mêmes privilèges que s’il était dans le réseau auquel appartient le serveur SMTP, ce qui lui permettra donc notamment de soumettre des messages au serveur SMTP Postfix. Cela est très utile dans la mesure où le client de messagerie peut se trouver sur un équipement mobile, sur un poste client ou sur un site Internet qui ne sont pas hébergés dans le même réseau que le serveur SMTP.

Postfix n’implémente pas lui-même de mécanismes SASL pour l’authentification. Postfix s’appuie sur l’implémentation SASL déjà portée par d’autres composants d’une plateforme de messagerie comme les serveurs MDA Dovecot ou Cyrus. J’utiliserai ici l’implémentation SASL de Dovecot par souci de cohérence avec les articles que j’ai déjà publiés sur le sujet. La mise en place de l’authentification nécessite deux étapes :

  1. configurer le framework SASL côté Dovecot
  2. configurer et autoriser l’authentification via SASL sur Postfix

Configurer Dovecot pour l’authentification SASL

La configuration de l’authentification SASL pour Dovecot nécessite l’activation du service d’authentification par la création d’un socket réseau spécifique et la configuration des mécanismes autorisés.

SASL (pour Simple Authentication and Security Layer) est un framework pour l’authentification et la sécurité des données utilisé dans les protocoles Internet 1.

Activer le service d’authentification

Éditer le fichier 10-master.conf (pour Debian le fichier est /etc/dovecot/conf.d/10-master.conf) :

# cd /etc/dovecot/conf.d/
# vim 10-master.conf

Dans la section service auth, ajouter une sous-section inet_listener. La section service auth doit ressembler à ceci :

service auth {
  inet_listener {
    port = 4000
  }
}

Il n’y pas de numéro de port défini pour ce service. Libre à vous d’utiliser le numéro qui vous convient (ici, j’ai pris le port 4000).

Lister les mécanismes d’authentification autorisés

Les mécanismes d’authentification sont configurés dans le fichier 10-auth.conf (pour Debian le fichier est /etc/dovecot/conf.d/10-auth.conf). Editer ce fichier :

# cd /etc/dovecot/conf.d/
# vim 10-auth.conf

Le paramètre qui nous intéresse ici est auth_mechanisms. Il contient une liste de mécanismes d’authentifications autorisés. Les mécanismes disponibles sont les suivants : plain login digest-md5 cram-md5 ntlm rpa apop anonymous gssapi otp skey gss-spnego. Pour plus d’informations sur les mécanismes d’authentification implémentés par Dovecot, vous pouvez lire cet article : Dovecot : authentification IMAP
La ligne suivante autorise les mécanismes d’authentification plain (mot de passe en clair) et login (nécessaire pour certains clients de messagerie) :

auth_mechanisms = plain login

Attention, ce sont deux mécanismes « en clair », c’est à dire que le mot de passe est visible dans une trace réseau. Ils ne devraient être utilisés que dans des réseaux sécurisés ou en combinaison d’un protocole sécurisé comme TLS.

Recharger Dovecot pour prise en compte du paramétrage

Recharger le serveur Dovecot :

# doveadm reload

Pour vérifier la bonne prise en compte de la configuration, on peut regarder si on a bien un nouveau socket en écoute sur le port défini précédemment (dans mon cas, le port 4000) :

# ss -tlnp | grep 4000
LISTEN    0    128    *:4000    *:*    users:(("dovecot",pid=25,fd=49))

Configurer Postfix pour utiliser l’authentification SASL Dovecot

La configuration du serveur Postfix se réalise via le fichier main.cf (pour Debian sous /etc/postfix/main.cf). Le fichier sera édité ici directement avec les commandes postconf.

Il faut tout d’abord définir le type d’implémentation SASL. Dans notre cas, il s’agit de l’implémentation Dovecot :

# postconf -e smtpd_sasl_type=dovecot 

Puis, il faut définir le chemin d’accès au serveur d’authentification Dovecot SASL :

# postconf -e smtpd_sasl_path="inet:dovecot:4000"

Enfin, on active l’authentification SASL dans Postfix :

# postconf -e smtpd_sasl_auth_enable=yes 

Il ne reste plus qu’à recharger le serveur Postfix pour prendre en compte ce nouveau paramétrage :

# postfix reload

Tester l’authentification Postfix via Dovecot SASL

Pour tester l’authentification directement via les commandes SMTP, il nous faut un utilisateur et un mot de passe à encoder en base 64. Prenons l’exemple d’un utilisateur yaya et son mot de passe zouh.

Commençons par encoder une chaine de caractères sous la forme \000yaya\000zouh (remplacez yaya et zouh par votre utilisateur/mot de passe, les caractères \000 doivent rester) :

# echo -ne '\000yaya\000zouh' | openssl base64
AHlheWEAem91aA==

Utilisons maintenant cette chaine pour l’authentification au serveur SMTP Postfix via la commande AUTH PLAIN:

# telnet localhost 25
Connected to localhost.
220 localhost ESMTP Postfix (Debian/GNU)
AUTH PLAIN AHlheWEAem91aA==
235 2.7.0 Authentication successful
QUIT
221 2.0.0 Bye

Si le message Authentication successful s’affiche après avoir tapé la commande AUTH PLAIN xxx, ça marche ! Cela signifie que l’authentification SMTP Postfix via l’implémentation SASL Dovecot fonctionne. L’authentification SMTP peut désormais être configurée dans n’importe quel client de messagerie.

Dans le journal de Postfix (fichier /var/log/mail.log), l’authentification SASL apparait via les paramètres sasl_method et sasl_username :

Jan 1 14:48:20 8cefgtd6e070 postfix/smtpd[283]: 5F90556478525: client=toto.fr[1.2.3.4], sasl_method=PLAIN, sasl_username=yaya

Laisser un commentaire