Affiner la livraison locale

Postfix, une fois qu'un message entrant a été reconnu comme acceptable “localement” (autrement-dit que l'adresse du destinataire se trouve dans un domaine défini dans “mydestination”) va utiliser un “Local Delivery Agent”. Postfix dispose de son propre agent de livraison locale, celui qui a été utilisé jusqu'ici.

Cependant, suivant le degré de finesse de livraison souhaité, il est possible d'utiliser d'autres agents. Dovecot propose deux méthodes de prise en charge des messages “locaux”. Ces agents permettent d'exploiter au mieux les possibilité de Dovecot sur le filtrage des messages, leur tri, et même la gestion de quotas.

Le LDA

Dovecot propose un Local Delivery Agent que l'on peut utiliser dans Postfix en renseignant la paramètre mail_box_command comme suit dans main.cf:

mailbox_command = /usr/lib/dovecot/dovecot-lda -f "$SENDER" -a "$RECIPIENT"

Cette méthode tout à fait efficace si le débit des messages entrants reste relativement faible montre ses limites en cas de montée en charge puisque Postfix va devoir lancer cet agent à chaque message local. Nous nous intéresserons donc à une fonctionnalité plus récente dans Dovecot qui est un démon de livraison locale.

dovecot-lmtpd

Local Mail Transport est un protocole proche de SMTP, spécialisé dans la livraison locale. Postfix supporte son emploi et pourra communiquer avec soit par l'intermédiaire d'un socket UNIX, soit par un port INET.

Dans ce cas, le paquet dovecot-lmtpd doit être installé sur le système.

Socket UNIX

Il faut que Dovecot crée ce socket UNIX. Dans /etc/dovecot/conf.d/10-master.conf, configurer ainsi le service lmtp:

service lmtp {
 unix_listener /var/spool/postfix/private/dovecot-lmtp {
   group = postfix
   mode = 0600
   user = postfix
  }
}

(Voir HowToPostfixDovecotLMTP)

Si l'on utilise pour l'authentification des utilisateurs locaux la base du système, il faudra demander à éliminer le nom de domaine, autrement dit à extraire la partie gauche de l'adresse destinataire, avant d'effectuer l'authentification. Dans /etc/dovecot/conf.d/10-auth.conf:

auth_username_format = %Ln

(voir Dovecot Variables)

Et relancer Dovecot.

Il faut, dans Postfix, renseigner le paramètre mailbox_transport de la façon suivante:

mailbox_transport = lmtp:unix:private/dovecot-lmtp

et demander à Postfix de relire sa configuration.

Socket INET

Cette méthode permet de placer Postfix et Dovecot sur des hôtes différents. Dans ce cas il faudra prendre l'expression “livraison locale” au sens “livraison dans le domaine”.

Cette possibilité assouplit considérablement la gestion de la messagerie sur des systèmes complexes ou soumis à une très forte charge. Il ne faut pas confondre cette méthode avec la création d'un MX secondaire, bien que fonctionnellement, elle apporte le même niveau de tolérance de panne.

Pour mettre en œuvre cette méthode, il faut:

1- Dans /etc/dovecot/conf.d/10-master.conf, configurer ainsi le service lmtp:

service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    group = postfix
    mode = 0600
    user = postfix
  }
  executable = lmtp -L
  inet_listener lmtp {
    address = {adresse INET du serveur dovecot}
    port = 26
  }
}

Le port 26 n'est pas une obligation ni même un usage.

De cette manière, lmtp propose les deux accès ce qui permettra de disposer d'un Postfix local et d'un Postfix distant simultanément.

De la même manière, il faudra que le service SASL de Dovecot soit également rendu disponible via INET. Toujours dans 10-master.cf:

service auth {
  unix_listener auth-userdb {
  }
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }
  inet_listener {
    port = 27
  }
}

Ici également, le port 27 n'est ni une obligation ni même un usage.

2- Dans le Postfix distant, renseigner le paramètre mailbox_transport de la façon suivante:

mailbox_transport = lmtp:imap.mondomaine.tld:26

imap.mondomaine.tld représente l'hôte de dovecot, ainsi que:

smtpd_sasl_path = inet:<nom/du/serveur/dovecot>:27

Pour le reste, la configuration reste identique au cas précédent.

Il faut bien entendu assurer un minimum de sécurité sur le serveur Dovecot, par exemple avec iptables (ou en créant un VPN), pour limiter l'accès aux ports ainsi ouverts (ici 26 et 27) au(x) seul(s) serveur(s) Postfix autorisé(s).

Pour en savoir plus

Le wiki de Dovecot reste la meilleure source d'informations: