Postfix
| Fiche express | |
|---|---|
| Domaine | Agent de transport de courrier (MTA) |
| Fichier principal | /etc/postfix/main.cf
|
| Commandes clés | postconf, postqueue, postsuper, postmap
|
| Service | systemctl restart postfix
|
| Voir aussi | Configuration postfix · Postconf · Aliases |
Postfix est un agent de transport de courrier électronique (MTA — Mail Transfer
Agent) développé par Wietse Venema, conçu comme une alternative plus simple et plus sûre à
Sendmail tout en restant compatible avec lui en ligne de commande (sendmail,
mailq, newaliases). C'est le MTA par défaut de la plupart des
distributions Linux modernes (RHEL/CentOS depuis la version 5, Debian/Ubuntu).
Architecture
Postfix n'est pas un unique démon mais un ensemble de petits processus spécialisés,
orchestrés par master et communiquant par files d'attente sur disque :
smtpd— reçoit le courrier entrant (port 25)cleanup— normalise et met en file les messages reçusqmgr— gestionnaire de file d'attente, planifie la livraisonsmtp— envoie le courrier sortant vers d'autres MTAlocal/virtual— livraison locale
Cette séparation en petits processus, chacun avec un minimum de privilèges, est un des arguments de sécurité historiques de Postfix face à l'architecture monolithique de Sendmail.
Configuration
Le fichier de configuration principal est /etc/postfix/main.cf (voir
Configuration postfix pour le détail des directives usuelles, et Postconf pour la
commande d'inspection/édition à chaud). Un second fichier, master.cf, définit les
processus lancés et leurs paramètres.
Scripts utiles
Lister les identifiants de messages en file d'attente (utile pour scripter des actions en masse avec Postsuper) :
for QUEUE_ID in $(mailq | grep -E '^[0-9A-F].* ' | awk '{ print $1 }' | cut -d '*' -f1); do
echo "$QUEUE_ID"
done
Relayer via un serveur SMTP externe
Pour faire passer tout le courrier sortant par un relais SMTP intermédiaire (fournisseur d'accès, service anti-spam, passerelle interne) plutôt que de livrer en direct par MX :
relayhost = smtp.fournisseur.tld
Pour un relais différent selon le domaine destinataire (multi-relais), utiliser une table de
transport plutôt qu'un unique relayhost :
# main.cf
transport_maps = hash:/etc/postfix/transport
# /etc/postfix/transport
@domaine-a.tld [mail.prestataire-a.tld]
@domaine-b.tld [mail.prestataire-b.tld]
Compiler la table après chaque modification (l'étape est systématiquement oubliée, c'est la cause n°1 d'une table de transport qui « ne prend pas ») :
postmap /etc/postfix/transport
systemctl restart postfix
Une approche alternative, à base de sender_dependent_relayhost_maps (relais
choisi selon l'expéditeur plutôt que le destinataire), existe également mais est plus
rarement nécessaire — réservée aux cas où plusieurs domaines d'envoi doivent sortir par des
passerelles différentes (ex. délégation d'une partie du courrier vers un service tiers type
Amazon SES).
Voir aussi
- Configuration postfix — directives détaillées de
main.cf - Postconf — commande d'inspection et d'édition de la configuration
- Postqueue — gestion de la file d'attente
- Postsuper — administration/purge de la file d'attente
- Postfix auth TLS — chiffrement TLS côté serveur
- Configure Postfix to use SASL authentication with TLS security — authentification SASL des clients
- Postfix gmail — relais sortant via Gmail
- Speed config postfix — bascule rapide Sendmail → Postfix
- Aliases — redirection d'adresses locales
- Spf — durcissement anti-usurpation de domaine
- Telnet sasl — tester une session SMTP à la main
- Incomming mail — réception simple du courrier entrant