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 :

  1. envoi depuis une adresse quelconque vers une adresse quelconque : routage normal
  2. envoi depuis une adresse quelconque vers orange : routage normal ralenti
  3. envoi depuis example.org vers une adresse quelconque : routage alternatif
  4. 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.

À propos de l'auteur



Julien a rejoint l'équipe de Sysnove en juin 2016. Chef de projet technique dans l'infogérance depuis 2010, il a acquis une solide expérience auprès de grands comptes et de startups innovantes et exigeantes. Passionné par les impacts politiques et sociaux des technologies numériques, il participe à divers projets autour d'Internet, comme le fournisseur d'accès Internet corrézien Ilico ainsi que la Fédération FDN.

Chez Sysnove, son rôle consiste à assurer la prospection et le développement commercial, ainsi qu'à veiller à la qualité opérationnelle des services fournis aux clients.