Utiliser LMTP avec Postfix et Dovecot

Habituellement, Postfix livre les messages reçus dans les boites mails des utilisateurs grâce à ses agents de livraison appelés local (pour les utilisateurs locaux) et virtual (pour les utilisateurs virtuels). Cependant, ces techniques de livraison nécessitent que les boites mails soient physiquement accessibles par Postfix. Dans le cas présent, nous allons vouloir livrer les messages reçus par Postfix dans les boites des utilisateurs à travers le réseau. Nous allons pour cela utiliser le protocole LMTP entre l’agent de transfert (ou MTA pour Mail Transfer Agent) Postfix et l’agent de livraison (ou MDA pour Mail Delivery Agent) Dovecot.

LMTP (Local Mail Transfer Protocol) est un protocole similaire à SMTP (Simple Mail Tranfer Protocol) défini par la RFC 2033. A la différence du protocole SMTP, LMTP est destiné aux échanges vers un serveur destinataire qui ne gère pas de file d’attente des messages, ce qui est le cas par exemple d’un serveur de livraison des mails comme Dovecot.

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

Comme indiqué dans la RFC, le protocole LMTP n’est pas destiné à être utilisé sur des réseaux larges ! Son utilisation devrait être restreinte aux réseaux de type LAN.

Configurer LMTP pour Dovecot

L’utilisation du protocole LMTP avec Dovecot nécessite l’installation d’un service Dovecot LMTP et sa configuration. La communication LMTP entre Postfix et Dovecot peut se faire à travers le réseau IP ou via l’ouverture d’une socket Unix. Dans le cas présent, le service lmtp sera utilisée à travers un réseau IP.

Installation du service Dovecot LMTP

Sous Redhat, le service est directement instalér avec le paquetage dovecot.

Sous Debian, le paquetage à installer s’appelle dovecot-lmtpd. Il peut s’installer de la manière suivante :

# apt-get update && apt-get install dovecot-lmtpd

Configuration du service Dovecot LMTP

Le service lmtp doit tout d’abord être activé dans le fichier de configuration principal de Dovecot avec le paramètre protocols (il faut ajouter lmtp à la liste des protocole déjà présent). Sous Debian, cette configuration n’est pas à faire car réalisée lors de l’installation du paquetage dovecot-lmtpd.

La configuration spécifique du service lmtp est à réaliser dans le fichier contenant la liste des sections service. Sous Debian, cette configuration se trouve dans le fichier /etc/dovecot/conf.d/10-master.conf. La section suivante permet d’activer le service lmtp qui écoute sur le port 24 de toutes les interfaces du serveur Dovecot :

service lmtp {
  unix_listener lmtp {
    #mode = 0666
  }

  # Create inet listener only if you can't use the above UNIX socket
  inet_listener lmtp {
    # Avoid making LMTP visible for the entire internet
    address = 0.0.0.0
    port = 24
  }
}

Deux sections sont présentes par défaut : unix_listener (écoute sur socket Unix) et inet_listener (écoute sur réseau IP). Dé-commentez simplement les paramètres de la section qui vous intéresse (ici, ce sera inet_listener). L’écoute sur la socket Unix est préférable si le serveur Postfix se trouve sur la même machine que le serveur Dovecot et elle est activée par défaut.

Comme l’indique le commentaire du fichier de configuration, évitez de rendre visible ce port à tout l’Internet ! Pensez à mettre des règles de pare-feu en place pour n’autoriser l’accès que depuis le serveur Postfix.

C’est tout pour Dovecot ! Il ne reste qu’à recharger la configuration :

# doveadm reload

Si on regarde les ports ouverts sur le serveur Dovecot, on doit maintenant trouver un port TCP/24 en écoute :

# ss -tln | grep 24
LISTEN     0      100    *:24    *:*

On peut aussi y trouver une socket Unix le cas échéant :

# ss -xln | grep lmtp
u_str  LISTEN     0      100    /var/run/dovecot/lmtp 13862829    * 0

Configurer LMTP pour Postfix

Maintenant que le service LMTP est activé et configuré côté Dovecot, il ne nous reste plus qu’à indiquer le chemin à Postfix. Cette configuration se réalise dans le fichier main.cf situé généralement dans /etc/postfix/main.cf.

Plutôt que d’éditer le fichier de configuration Postfix, je préfère passer par la commande de configuration postconf suivie de l’option -e (edit)

Nous allons ici dire à Postfix de ne plus utiliser son agent local pour livrer les mails, mais le protocole LMTP :

# postconf -e local_transport=lmtp:<Dovecot server>:24

Le paramètre local_transport prend une valeur composée ici de trois parties séparées par : :

  • le protocole, ici lmtp
  • le nom ou l’adresse IP du serveur Dovecot
  • le port sur lequel écoute le service dovecot-lmtpd, généralement le port 24

Il ne reste qu’à recharger la configuration du serveur Postfix :

# postfix reload

C’est bon, votre serveur Postfix devrait (normalement) livrer les mails locaux à Dovecot en utilisant le protocole LMTP !

Vérifier que tout fonctionne

Pour vérifier que l’ensemble fonctionne correctement, il nous suffit de vérifier les logs des deux services.

Pour le serveur Postfix, on regarde le journal /var/log/mail.log en cherchant un motif postfix/lmtp :

# grep "postfix/lmtp" /var/log/mail.log

Oct 15 15:19:54 e6c036b18a1b postfix/lmtp[122]: 1A14618005525: to=<xxx@xxx.fr>, relay=dovecot[x.x.x.x]:24, delay=0.31, delays=0.13/0.02/0.03/0.13, dsn=2.0.0, status=sent (250 2.0.0 <xxx@xxx.fr> iY/LDxpJAlgnAwAAmXV6Hg Saved)

On voit ici que Postfix a bien réussi a livré un message au serveur Dovecot en utilisant LMTP.

Côté Dovecot, nous allons également vérifier le journal /var/log/mail.log en recherchant le même message grâce à l’identifiant fourni dans le journal du serveur Postfix (avant le mot clé Saved):

# grep "iY/LDxpJAlgnAwAAmXV6Hg" /var/log/mail.log

Oct 15 15:19:54 04f5e056f1c1 dovecot: lmtp(807, xxx@xxx.fr): iY/LDxpJAlgnAwAAmXV6Hg: msgid=unspecified: saved mail to INBOX

C’est tout bon, Dovecot a bien reçu le message et l’a enregistré dans le dossier INBOX !

Sources :
https://tools.ietf.org/html/rfc2033
http://wiki.dovecot.org/LMTP
http://www.postfix.org/postconf.5.html

Laisser un commentaire