Dans un précédent article, nous décrivions comment router ses emails en fonction de la source avec Postfix. Cette technique a cependant une limitation. En effet, Postfix ne permet pas de cumuler des règles sur la source et sur la destination.
Il existe en fait une solution simple : le mode multi-instances de Postfix.
Cas concret
Prenons un exemple, le cas d'un serveur traitant un volume de mails important avec des envois de newsletter. Lors d'un envoi massif, il est très fréquent que certains fournisseurs bloquent temporairement l'IP d'expédition. C'est le cas de Microsoft (live.com, hotmail.com, hotmail.fr, etc), de Yahoo, d'Orange, de Free, et de bien d'autres. Pour mieux expédier ces envois, sans se faire bloquer, il est courant d'ajuster certains paramètres de Postfix en définissant des « transports ».
Quand on veut associer ce mécanisme avec du routage en fonction de l'expéditeur (disons example.org), voilà ce qu'il se produit :
- envoi depuis une adresse quelconque vers une adresse quelconque : routage normal
- envoi depuis une adresse quelconque vers orange : routage normal ralenti
- envoi depuis example.org vers une adresse quelconque : routage alternatif
- envoi depuis example.org vers orange : routage normal ralenti (au lieu du routage alternatif)
Dans les trois premiers cas, on a le comportement souhaité, et dans le quatrième le routage ne fonctionne pas parce que Postfix priorise le transport défini en fonction de la destination.
La solution : un autre Postfix via le mode multi-instances
En cherchant une solution à ce problème, nous avons découvert que Postfix proposait un mode multi-instances. Concrètement, cela permet d'avoir plusieurs Postfix indépendants sur un même serveur, chacun ayant sa propre configuration.
Bascule en mode multi-instances
Pour activer le mode multi-instances, une commande simple :
postmulti -e init
Création d'une nouvelle instance
Pour créer une instance nommée « newsletter », la commande est la suivante :
postmulti -I postfix-newsletter -e create
Cela va créer une arborescence dans /etc/postfix-newsletter
contenant :
main.cf
master.cf
À vous de configurer cette instance en fonction de vos besoins. Par défaut, elle est cependant désactivée. Pour l'activer :
postmulti -i postfix-newsletter -e enable
Liste des instances et gestion
Pour lister les instances :
postmulti -l
Pour démarrer/arrêter/… une instance, le mieux est de passer par Systemd. Les personnes maintenant le paquet Postfix dans Debian ont prévu un template pour cela. Ainsi, on peut gérer ces instances très simplement :
# Activation du service
systemctl enable postfix@postfix-newsletter
# Démarrage
systemctl start postfix@postfix-newsletter
# État
systemctl status postfix@postfix-newsletter
# Logs
journalctl -feu postfix@postfix-newsletter
# Si votre instance s'appelle toto
systemctl status postfix@postfix-toto
# Consulter la queue
postmulti -i postfix-newsletter -x mailq
# Supprimer tous les mails en queue
postmulti -i postfix-newsletter -x postsuper -d ALL
Bonus
Vous aurez peut-être déjà remarqué que la sortie de la commande systemctl status postfix
n'était pas très intéressante.
C'est parce que l'instance par défaut se nomme en fait -
.
Ainsi, on aura beaucoup plus d'informations en faisant :
systemctl status postfix@-
Conclusion
Postfix est un outil incroyable avec ses avantages, ses inconvénients mais qui regorge de fonctionnalités utiles et souvent méconnues. Le mode multi-instances en est un parfait exemple. Nous espérons que cet article vous facilitera la vie tout autant que le mode multi-instances Postfix a facilité la nôtre.