Postfix
| 🏠 Accueil | 📚 Index | 🐧 Linux | 🌐 Réseau | 🔒 Cybersécurité | 🖥️ Virtualisation | ✅ Checklists d'intervention | 📚 Tutoriels | 🤝 Services |
|---|
Comprendre, administrer et dépanner le service de transport des courriers électroniques sous Linux.
📌 Présentation de Postfix
Postfix est un logiciel libre de messagerie utilisé sous Linux pour acheminer les courriers électroniques. Il joue le rôle de MTA (Mail Transfer Agent), c'est-à-dire d'agent de transfert de courrier.
Il permet notamment de :
- Recevoir des messages provenant d'autres serveurs de messagerie.
- Envoyer des messages vers des serveurs distants.
- Transmettre les messages aux mécanismes de distribution locaux.
- Gérer une file d'attente lorsque les messages ne peuvent pas être distribués immédiatement.
- Sécuriser les échanges SMTP avec TLS.
- Collaborer avec des outils d'authentification, de filtrage antispam et de distribution des messages.
💡 À retenir : Postfix transporte les messages. Il ne constitue pas à lui seul un webmail et ne fournit pas nécessairement l'accès aux boîtes de réception. Un serveur complet peut également utiliser Dovecot pour l'accès IMAP et POP3, ainsi que pour certaines fonctions d'authentification et de distribution.
🏗️ Architecture d'un serveur de messagerie
| Composant | Fonction |
|---|---|
| Postfix | Réception, transfert et acheminement des messages via SMTP. |
| Dovecot | Accès aux boîtes aux lettres via IMAP ou POP3 et, selon la configuration, authentification et distribution. |
| DNS | Publication des enregistrements MX, A/AAAA, PTR et autres enregistrements utiles à la messagerie. |
| TLS / certificat | Chiffrement des connexions lorsque TLS est activé et correctement configuré. |
| Antispam / antivirus | Analyse et filtrage des messages, si des outils adaptés sont installés. |
| Client de messagerie | Consultation et envoi des courriers depuis un ordinateur ou un smartphone. |
🔄 Schéma simplifié du fonctionnement
Expéditeur distant
|
| SMTP
v
+--------------------+
| POSTFIX |
| Réception / envoi |
+--------------------+
|
| Distribution selon la configuration
v
+--------------------+
| Dovecot / Maildir |
| Boîtes aux lettres |
+--------------------+
|
| IMAP ou POP3
v
Client de messagerie
Ce schéma est simplifié : la distribution peut utiliser d'autres mécanismes, et Dovecot n'est pas obligatoire dans toutes les installations.
📦 Installation sous Ubuntu
Pour installer Postfix sur un serveur Ubuntu :
sudo apt update sudo apt install postfix
Pendant l'installation, l'assistant demande le type de configuration à utiliser. Pour un serveur qui envoie et reçoit directement des messages pour son propre domaine, le choix courant est Site Internet. Les paramètres exacts dépendent cependant de l'architecture retenue.
Pour relancer l'assistant de configuration :
sudo dpkg-reconfigure postfix
Vérifier l'installation
postconf mail_version sudo systemctl status postfix
Pour démarrer le service :
sudo systemctl start postfix
Pour activer son démarrage automatique :
sudo systemctl enable postfix
Pour redémarrer Postfix après une modification de configuration :
sudo systemctl restart postfix
Pour recharger la configuration sans demander un redémarrage complet :
sudo postfix reload
⚙️ Fichiers de configuration
Les principaux fichiers de Postfix se trouvent dans `/etc/postfix/`.
| Fichier | Utilité |
|---|---|
/etc/postfix/main.cf
|
Configuration générale : identité du serveur, domaines, réseaux autorisés, TLS et règles de réception. |
/etc/postfix/master.cf
|
Définition des services et processus Postfix, notamment les services SMTP. |
/etc/aliases
|
Alias système, par exemple pour rediriger le courrier destiné à root. |
/etc/mailname
|
Nom de domaine utilisé par certains mécanismes de configuration et d'envoi. |
Afficher la configuration effective :
sudo postconf -n
Afficher une valeur particulière :
postconf myhostname postconf mydestination postconf mynetworks postconf relayhost
Vérifier la cohérence de la configuration :
sudo postfix check
⚠️ Précaution : avant de modifier un fichier de configuration, effectuer une copie de sauvegarde et conserver une session d'administration fonctionnelle.
sudo cp -a /etc/postfix/main.cf /etc/postfix/main.cf.bak sudo cp -a /etc/postfix/master.cf /etc/postfix/master.cf.bak
🌍 Paramètres essentiels
Le fichier `main.cf` contient plusieurs paramètres importants. Leur valeur doit correspondre à la configuration réelle du serveur.
| Paramètre | Description |
|---|---|
myhostname
|
Nom complet du serveur de messagerie, par exemple `mail.exemple.fr`. |
mydomain
|
Domaine principal du serveur. |
myorigin
|
Domaine utilisé pour compléter certaines adresses d'expéditeur locales. |
mydestination
|
Domaines que Postfix considère comme des destinations locales. |
mynetworks
|
Réseaux considérés comme de confiance pour certaines règles de traitement. |
inet_interfaces
|
Interfaces réseau sur lesquelles Postfix écoute. |
relayhost
|
Serveur relais utilisé pour l'envoi, si nécessaire. |
home_mailbox
|
Emplacement de livraison dans le répertoire personnel, lorsqu'une livraison locale compatible est utilisée. |
Exemple de consultation
sudo postconf myhostname mydomain myorigin mydestination sudo postconf mynetworks inet_interfaces relayhost
Les paramètres ci-dessus ne doivent pas être copiés aveuglément depuis un tutoriel : un serveur utilisant des domaines virtuels ou des boîtes gérées par Dovecot peut nécessiter une configuration différente.
📬 DNS et réception des courriers
Pour recevoir des messages depuis Internet, plusieurs éléments doivent être correctement configurés.
| Élément | Rôle |
|---|---|
| Enregistrement MX | Indique aux autres serveurs quel serveur doit recevoir les messages du domaine. |
| Enregistrement A ou AAAA | Associe le nom du serveur à une adresse IPv4 ou IPv6. |
| Enregistrement PTR | Associe une adresse IP à un nom d'hôte ; il est important pour la réputation et la délivrabilité des courriers sortants. |
| Port SMTP 25 | Utilisé principalement pour les échanges entre serveurs de messagerie. |
| Pare-feu et redirection NAT | Doivent autoriser les connexions entrantes nécessaires jusqu'au serveur. |
| Adresse IP publique | Doit être joignable et adaptée à l'hébergement d'un serveur de messagerie. |
Pour un domaine réel, le nom du serveur utilisé dans le MX doit être cohérent avec la résolution DNS et l'architecture du service.
Vérifier les enregistrements DNS
Remplacer `exemple.fr` et `mail.exemple.fr` par les noms réels du domaine.
dig MX exemple.fr dig A mail.exemple.fr dig AAAA mail.exemple.fr dig -x ADRESSE_IP_PUBLIQUE
La commande `dig -x` sert à vérifier la résolution inverse d'une adresse IP. Remplacer le texte `ADRESSE_IP_PUBLIQUE` par l'adresse IP réelle, sans conserver ce texte tel quel dans la commande.
🔐 Sécurité et chiffrement TLS
TLS permet de chiffrer les communications SMTP lorsqu'il est négocié entre les serveurs ou les clients et le serveur de messagerie.
Les bonnes pratiques comprennent :
- Utiliser un certificat valide pour le nom du serveur.
- Renouveler les certificats avant leur expiration.
- Vérifier la configuration TLS de Postfix et des services de soumission.
- Utiliser une authentification pour les clients qui envoient des messages via le serveur.
- Restreindre le relais aux destinations et clients autorisés.
- Éviter d'exposer des services inutiles sur Internet.
- Maintenir Ubuntu et Postfix à jour.
Vérifier la configuration TLS
sudo postconf smtp_tls_security_level sudo postconf smtpd_tls_security_level
Ces paramètres ne remplissent pas exactement le même rôle :
- `smtp_tls_security_level` concerne les connexions sortantes établies par Postfix.
- `smtpd_tls_security_level` concerne les connexions reçues par Postfix.
Le niveau de sécurité approprié dépend du service concerné. Imposer TLS à toutes les connexions SMTP entrantes peut empêcher la réception de messages provenant de serveurs distants qui ne proposent pas TLS.
Prévenir le relais ouvert
Un relais ouvert accepte de transférer des messages pour des expéditeurs non autorisés vers des destinations quelconques. Il peut être exploité pour envoyer du spam et faire inscrire l'adresse IP du serveur sur des listes de blocage.
Vérifier les restrictions de relais :
sudo postconf smtpd_relay_restrictions sudo postconf smtpd_recipient_restrictions
Ne pas supprimer ou assouplir les restrictions de relais sans comprendre leurs effets. Une configuration correcte doit notamment empêcher le relais non autorisé vers des domaines externes.
🔎 Diagnostic et dépannage
1. Vérifier l'état de Postfix
sudo systemctl status postfix
Si le service est arrêté, consulter les journaux avant de tenter une correction.
2. Consulter les journaux
Sous Ubuntu, les événements peuvent être disponibles dans le journal système ou dans les fichiers de journalisation de la messagerie, selon la configuration.
sudo journalctl -u postfix --since "1 hour ago"
Pour suivre les nouveaux événements :
sudo journalctl -u postfix -f
Si le système utilise un fichier de journalisation dédié :
sudo tail -f /var/log/mail.log
Une absence de fichier `mail.log` ne signifie pas nécessairement que Postfix ne fonctionne pas : la configuration de journalisation peut être différente.
3. Vérifier les ports
sudo ss -ltnp | grep -E ':(25|465|587)\b'
Ports couramment rencontrés :
| Port | Utilisation courante |
|---|---|
| 25/TCP | Échanges SMTP entre serveurs. |
| 587/TCP | Soumission de messages par les clients authentifiés, généralement avec STARTTLS. |
| 465/TCP | Soumission SMTP avec TLS implicite, si ce service est configuré. |
La présence d'un port dans cette liste ne garantit pas que le service soit accessible depuis Internet : le pare-feu, le routeur, le fournisseur d'accès et la configuration du service peuvent intervenir.
4. Examiner la file d'attente
Les messages en attente peuvent révéler un problème DNS, un refus du serveur distant, une erreur de configuration ou un problème réseau.
Afficher la file d'attente :
sudo postqueue -p
Afficher uniquement le nombre de messages :
sudo postqueue -p | tail -n 1
Demander une nouvelle tentative de livraison :
sudo postqueue -f
Cette commande relance les tentatives de livraison ; elle ne corrige pas la cause d'une erreur persistante.
Afficher les détails d'un message :
sudo postcat -q IDENTIFIANT_DU_MESSAGE
Remplacer `IDENTIFIANT_DU_MESSAGE` par l'identifiant réel affiché dans la file d'attente. Le contenu du message peut inclure des informations confidentielles.
5. Comprendre les erreurs fréquentes
| Message ou symptôme | Piste de diagnostic |
|---|---|
| Connection timed out | Vérifier le réseau, le pare-feu, la route et l'accessibilité du serveur distant. |
| Connection refused | Vérifier si le service distant écoute et si le port est accessible. |
| Host or domain not found | Vérifier les enregistrements DNS et la résolution des noms. |
| Relay access denied | Vérifier les domaines autorisés, l'authentification et les restrictions de relais. |
| Mail queue is growing | Identifier les messages en attente, les erreurs répétées et les destinations concernées. |
| Message accepté mais non visible dans la boîte | Vérifier la livraison, le répertoire de boîte, les filtres, les alias et l'accès IMAP. |
📥 Problème : les messages entrants restent sur le serveur
Lorsqu'un message arrive sur le serveur mais n'apparaît pas dans le logiciel de messagerie, il faut déterminer à quelle étape il est bloqué.
Point important : un message peut être accepté par Postfix sans avoir été livré dans la boîte attendue. Il peut aussi avoir été livré dans un autre emplacement ou être accessible par un service IMAP mal configuré.
Étape 1 — Rechercher le message dans les journaux
sudo journalctl -u postfix --since "2 hours ago"
Ou, si le journal de messagerie est disponible :
sudo grep -i "adresse@exemple.fr" /var/log/mail.log
Remplacer l'adresse par celle du destinataire concerné. Examiner notamment l'identifiant du message et le résultat de livraison.
Étape 2 — Examiner la file d'attente
sudo postqueue -p
Si le message apparaît dans la file, rechercher la raison indiquée dans les journaux. S'il n'y apparaît pas, cela ne prouve pas à lui seul que le message a été livré dans la bonne boîte.
Étape 3 — Vérifier le mécanisme de livraison
Afficher les paramètres de livraison courants :
sudo postconf home_mailbox sudo postconf mailbox_command sudo postconf virtual_transport sudo postconf virtual_mailbox_domains sudo postconf virtual_mailbox_maps
Tous ces paramètres ne sont pas utilisés dans chaque installation. Leur rôle dépend notamment de la différence entre les comptes système et les boîtes virtuelles.
Si Postfix livre directement dans un répertoire `Maildir`, vérifier que le chemin est bien celui utilisé par le service de consultation.
Si Dovecot assure la distribution, vérifier la configuration de livraison de Dovecot et les journaux correspondants.
Étape 4 — Vérifier Dovecot
sudo systemctl status dovecot sudo journalctl -u dovecot --since "2 hours ago"
Vérifier ensuite que :
- Le compte destinataire existe et est correctement configuré.
- Le chemin de la boîte aux lettres correspond au mécanisme de livraison.
- Les permissions permettent au service concerné d'accéder aux messages.
- Le client de messagerie utilise le bon compte et le bon serveur IMAP.
- Aucun filtre ou règle de messagerie ne déplace les messages ailleurs.
⚠️ Attention : ne pas modifier les chemins de boîtes aux lettres ou les permissions au hasard. Une mauvaise modification peut rendre des messages inaccessibles ou perturber la distribution.
🧪 Tests de fonctionnement
Après une intervention, vérifier séparément la réception, la livraison et la consultation des messages.
| Test | Résultat attendu |
|---|---|
| État du service | Postfix fonctionne sans erreur critique. |
| Configuration | La vérification ne signale pas de problème bloquant. |
| Réception SMTP | Le serveur accepte les messages destinés aux domaines autorisés. |
| Distribution | Le message est transmis au mécanisme de livraison prévu. |
| Consultation | Le message est visible dans la boîte via le client de messagerie. |
| Envoi sortant | Le message est remis au serveur distant ou une erreur exploitable est enregistrée. |
| Sécurité | Les connexions et les règles de relais correspondent à la politique attendue. |
Commandes utiles pour les vérifications :
sudo postfix check sudo systemctl is-active postfix sudo postqueue -p sudo postconf -n
🛠️ Bonnes pratiques d'administration
- Sauvegarder la configuration avant toute modification.
- Vérifier les changements avec `postfix check`.
- Consulter les journaux avant de redémarrer un service.
- Ne pas vider la file d'attente pour masquer une erreur de livraison.
- Ne pas exposer un relais SMTP sans restrictions adaptées.
- Contrôler les certificats et leur renouvellement.
- Surveiller l'espace disque et les volumes de messages en attente.
- Mettre en place des sauvegardes adaptées aux boîtes aux lettres.
- Tester régulièrement l'envoi, la réception et la consultation.
- Documenter les modifications et conserver les paramètres précédents.
📚 Ressources officielles
- Documentation officielle de Postfix
- Configuration de base de Postfix
- Configuration TLS
- Contrôle des accès et du relais SMTP
- Guide Postfix pour Ubuntu Server
🔗 Pages associées du Wiki Pat-Informatik
- Linux
- Apache
- Dovecot
- Messagerie électronique
- Réseau
- Cybersécurité
- Sauvegarde
- Checklists d'intervention