Aller au contenu

Postfix

De Wiki Pat-Informatik
🏠 Accueil 📚 Index 🐧 Linux 🌐 Réseau 🔒 Cybersécurité 🖥️ Virtualisation ✅ Checklists d'intervention 📚 Tutoriels 🤝 Services
📧 Postfix — Serveur de messagerie SMTP
Installation • Configuration • Sécurité • Diagnostic

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

🔗 Pages associées du Wiki Pat-Informatik

🏷️ Catégories