serveurs:installation:postfix

Installer et configurer Postfix

L'installation d'un serveur SMTP sur un hôte permet de créer un tampon entre cet hôte et un serveur SMTP distant. Si le serveur SMTP distant n'est pas joignable, le serveur local pourra stocker les emails avant de tenter à nouveau un envoi.

  • En test, si vous ne pouvez pas créer directement le compte email mailer sur le domaine du SINP, configurer le service de relai SMTP de Google comme indiqué ici : https://support.google.com/a/answer/2956491
    • Sélectionner :
      • Expéditeurs autorisés : Uniquement les adresses de mes domaines
      • Authentification : Accepter uniquement les messages provenant des adresses IP spécifiées
      • Adresses/plages IP : mettre celles des 2 instances en IPv4
      • Authentification SMTP requise : cocher la case
      • Exiger le chiffrement TLS : cocher la case
    • Cela permet ensuite d'utiliser les infos suivantes pour les tests :
      • l'adresse SMTP : smtp-relay.gmail.com
      • le port : 587
      • Un utilisateur et son mot de passe : mailer@cbn-alpin.fr / <mot-de-passe-de-mailer>
  • En prod, utiliser le SMTP d'OVH :
    • Hôte : ssl0.ovh.net
    • Port : 587
    • Username : mailer@<domaine-sinp> (si possible, sinon admin@<domaine-sinp>) [mettre l'adresse du compte email et pas un alias]
    • Password : le mot de passe du compte email ci-dessus
    • TLS : true
  • Reprise de l'installation de Postfix, la modification majeure est la réécriture du Sender, ce changement permet d envoyer un mail sans la réécriture -r dans la commande d'envoie.
  • Installation de Postfix :
    apt install libsasl2-modules postfix bsd-mailx
    • Choisir : site internet
    • Indique le domaine du serveur comme nom de courrier. Ex. : silene.eu
  • Ajout des informations du mail permettant l'envoie du message. Dans notre cas l'adresse mail est hébergée sur OVH :
    vi /etc/postfix/sasl/sasl_passwd
    • Ajouter le contenu (remplacer <mot-de-passe> par le mot de passe du compte email mailer@<domaine-sinp> d'OVH et <domaine-sinp> par le domaine du SINP, ex. silene.eu):
      [ssl0.ovh.net]:587 mailer@<domaine-sinp>:<mot-de-passe>
  • Créer le fichier de base de données sasl_passwd.db qui contiendra le mot de passe & vérifier qu'elle est bien présente :
    postmap /etc/postfix/sasl/sasl_passwd
    ll /etc/postfix/sasl/
    • Puis leurs attribuer les droits nécessaire :
      chown root:root /etc/postfix/sasl/sasl_passwd*
      chmod 0600 /etc/postfix/sasl/sasl_passwd*
  • Éditer le fichier de configuration de Postfix :
    vi /etc/postfix/main.cf
    • Remplacer le contenu suivant, <server-name> peut valoir web-paca-sinp par exemple :
      smtpd_banner = $myhostname ESMTP
      relayhost = [ssl0.ovh.net]:587
      myhostname = <server-name>
      mydestination = $myhostname, localhost.$mydomain, localhost
    • Commenter le contenu suivant :
      smtp_tls_security_level=may
      smtpd_tls_security_level=may
    • Ajouter le contenu suivant :
      # Enable SASL authentication
      smtp_sasl_auth_enable = yes
      # Disallow methods that allow anonymous authentication
      smtp_sasl_security_options = noanonymous
      # Location of sasl_passwd
      smtp_sasl_password_maps = hash:/etc/postfix/sasl/sasl_passwd
      # Enable STARTTLS encryption
      smtp_tls_security_level = encrypt
      # Location of CA certificates
      smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
      # Add Header rewrite (solution 1 🗑️)
      # smtp_header_checks = pcre:/etc/postfix/smtp_header_checks
      # Add Sender rewrite (solution 2)
      sender_canonical_classes = envelope_sender, header_sender
      sender_canonical_maps = regexp:/etc/postfix/sender_canonical_maps
  • Il en existe plusieurs visible avec la commande : systemctl status postfix*
  • C'est le service nommé postfix@-.service qui correspond au daemon lancé par le service postfix.service
  • Pour l'affichage dans Grafana, utiliser celui nommé : postfix@-.service

Si l'on souhaite contrôler l'adresse email qui envoie les emails du serveur (le FROM:), deux solutions :

  1. réécrire l'entête des emails envoyés à l'aide du paramètre smtp_header_check et mettre en place un fichier de remplacement à l'aide du paramètre smtp_generic_maps. Cette solution semble poser problème si l'on souhaite installer OpenDkim.
  2. réecrire avec le from à l'aide de sender_canonical_maps

🗑️ Pour la solution 1 (voir aussi : https://superuser.com/a/695191):

  • Installer le paquet supplémentaire suivant :
     apt install postfix-pcre 
  • Vérifier la présence du paramètre suivant dans le fichier /etc/postfix/main.cf : vi /etc/postfix/main.cf
    # Add Header rewrite
    smtp_header_checks = pcre:/etc/postfix/smtp_header_checks
  • Crééer le fichier /etc/postfix/smtp_header_checks avec le contenu suivant : vi /etc/postfix/smtp_header_checks
    /^From:\s+.*/ REPLACE From: "<nom-sinp>" <mailer@<domaine-sinp>>
    • Exemple :
      /^From:\s+.*/ REPLACE From: "Silene web" <mailer@silene.eu>
  • Redémarrer Postfix :
     systemctl restart postfix 

Pour la solution 2, sender_canonical_maps :

  • Créer le fichier suivant :
    vi /etc/postfix/sender_canonical_maps
  • Ajouter le contenu :
    /.+/  mailer@<domaine-sinp>
  • Éditer le fichier de conf de Postfix :
    vi /etc/postfix/main.cf
  • Ajouter le contenu :
    # Add Sender rewrite
    sender_canonical_classes = envelope_sender, header_sender
    sender_canonical_maps = regexp:/etc/postfix/sender_canonical_maps
  • Redémarrer Postfix :
     systemctl restart postfix 
  • Commande d'envoi d'email :
    echo "THIS IS A TEST EMAIL sended at $(date "+%F %H:%M")" | mail -s "[${HOSTNAME}] Test email" adminsys@<domaine-sinp> 
  • Vérifier en parallèle les logs :
    tail -f /var/log/syslog 
  • serveurs/installation/postfix.txt
  • Dernière modification : 2025/11/30 09:01
  • de jpmilcent