PostfixPostfix est un serveur mail, et plus exactement un MTA (Mail Transfer Agent). Il gère l’envoi et la réception de mails par Internet en utilisant le protocole SMTP. Le monde de l’Open Source offre toute une panoplie de MTA, parmi lesquels on trouve Postfix, Exim, Qmail et Sendmail.

Dans ce premier article sur les serveurs de messagerie, nous allons configurer Postfix sur une machine publique tournant sous Rocky Linux 8. Notre premier objectif, ce sera l’envoi des messages du système comme par exemple les notifications de DNF Automatic pour les mises à jour automatiques. Cette configuration pourra également être utilisée par les applications locales comme OwnCloud ou WordPress.

Prérequis

Avant de mettre la main à la pâte, je vérifie si le serveur n’est pas blacklisté quelque part :

MX Toolbox Blacklist Check

Installation

Postfix est fourni par les dépôts officiels de la distribution :

# dnf install -y postfix

On installera également la commande mail (paquet mailx) pour pouvoir tester et gérer les mails en ligne de commande directement sur le serveur :

# dnf install -y mailx

Configuration initiale

Les fichiers de configuration utilisés par Postfix se situent dans /etc/postfix :

  • Le fichier master.cf gère la configuration du démon master de Postfix. Dans la plupart des configurations de base, on n’aura pas à intervenir sur ce fichier.
  • Le fichier main.cf contient les paramètres de contrôle des démons de Postfix. C’est celui que l’on modifiera le plus souvent.

Le fichier main.cf fourni par défaut fait près de 740 lignes, la plupart étant des commentaires. On peut commencer par aérer ce fichier pour ne garder que les directives :

# cd /etc/postfix
# mv main.cf main.cf.orig
# grep -h -v '^[[:space:]]*\#' main.cf.orig | grep -v '^[[:space:]]*$' > main.cf

On obtient un fichier beaucoup plus lisible :

compatibility_level = 2
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
inet_interfaces = localhost
inet_protocols = ipv4
mydestination = $myhostname, localhost.$mydomain, localhost
unknown_local_recipient_reject_code = 550
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
debug_peer_level = 2
debugger_command =
         PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
         ddd $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix/samples
readme_directory = /usr/share/doc/postfix/README_FILES
smtpd_tls_cert_file = /etc/pki/tls/certs/postfix.pem
smtpd_tls_key_file = /etc/pki/tls/private/postfix.key
smtpd_tls_security_level = may
smtp_tls_CApath = /etc/pki/tls/certs
smtp_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt
smtp_tls_security_level = may
meta_directory = /etc/postfix
shlib_directory = /usr/lib64/postfix

Si un paramètre n’est pas présent dans main.cf, Postfix utilisera sa valeur par défaut. Pour la plupart, ces valeurs sont définies « en dur » dans le code source de Postfix, tandis que certaines sont initialisées à la compilation et quelques-unes au moment du lancement du programme.

Le programme postconf est très utile pour examiner les valeurs courantes et par défaut du fichier main.cf. Pour afficher la valeurs de certains paramètres de configuration, il suffit de les fournir en argument :

# postconf inet_interfaces
inet_interfaces = localhost

L’option -d affichera la valeur par défaut des paramètres demandés :

# postconf -d inet_interfaces
inet_interfaces = all

Configuration sur un serveur dédié

Nous allons supprimer la plupart des paramètres redondants ou autrement inutiles pour commencer avec quelques directives de base :

# /etc/postfix/main.cf
# 
# Minimal Postfix configuration for Internet-facing servers

# Disable backwards compatibility
compatibility_level = 2

# Disable IPv6
inet_protocols = ipv4

# Outbound mail only
inet_interfaces = localhost
mailbox_size_limit = 0

# Host
myhostname = sd-155842.dedibox.fr

# Domain
mydomain = dedibox.fr

# Authorize local machine only
mynetworks = 127.0.0.0/8

# Local aliasing
alias_maps = hash:/etc/aliases

# Debugging
debugger_command =
  PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
  ddd $daemon_directory/$process_name $process_id & sleep 5

# Command paths
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix

# Documentation
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix/samples
readme_directory = /usr/share/doc/postfix/README_FILES

Quelques remarques :

  • Si l’IPv6 est désactivé au niveau du système, il faudra également le faire ici grâce à la directive inet_protocols.
  • inet_interfaces = localhost limite l’utilisation de Postfix aux applications locales.
  • myhostname est censé contenir le nom d’hôte pleinement qualifié du serveur, c’est-à-dire le résultat de la commande hostname --fqdn.
  • mynetworks définit les adresses depuis lesquelles Postfix accepte les mails sans authentification via SMTP.
  • alias_maps définit l’emplacement de la table de correspondance. Certaines informations ne peuvent pas être facilement représentées dans main.cf. Les tables de correspondance permettent de les stocker dans des fichiers externes. Postfix n’utilise pas directement les fichiers texte, ce serait trop lent. Au lieu de cela, les tables de correspondance de type hash (ou « tables de hachage ») servent pour construire des fichiers indexés, grâce à la bibliothèque Berkeley DB. Le programme postmap est utilisé pour construire les fichiers indexés. Pour mettre à jour les alias, on utilisera la commande newaliases.

Éditer la table de correspondance /etc/aliases :

# Person who should get root's mail
root: info@microlinux.fr

ImportantJe vous encourage fortement à utiliser votre adresse e-mail plutôt que la mienne. Ceci étant dit, la quantité de notifications que je reçois quotidiennement par e-mail me donne une vague idée de la popularité de mes articles sur l’administration des serveurs Linux.

Construire le fichier indexé :

# newaliases

Mise en service

Activer et démarrer Postfix :

# systemctl enable postfix --now

Vérifier si Postfix tourne correctement :

# systemctl status postfix
 postfix.service - Postfix Mail Transport Agent
   Loaded: loaded (/usr/lib/systemd/system/postfix.service; 
           enabled; vendor preset: disabled)
   Active: active (running) since Sun 2022-12-04 11:19:04 CET; 35s ago
...
# cat /var/log/maillog
... starting the Postfix mail system
... daemon started -- version 3.5.8, configuration /etc/postfix

J’envoie un mail de test vers un compte auquel j’ai accès, en l’occurrence mon adresse principale. Un point . sur une ligne à part marque la fin du message :

$ mail info@microlinux.fr
Subject: Test Postfix
Ceci est un test.
.
EOT

Je me connecte au compte mail externe et je vérifie si le message a bien été envoyé.

À partir de là, Postfix pourra être utilisé par les applications locales comme DNF Automatic, Rsnapshot, OwnCloud, WordPress, etc.


La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.

 


6 commentaires

pascal · 1 janvier 2024 à 19 h 28 min

Bonsoir,
Je viens de relire cet article qui précise ‘installation minimale’.
Question : La configuration de base proposée ne protége pas contre le fait de faire du relais ouvert,
avec le risque de voir des spammeurs l’utiliser, et de se retrouver blacklisté.

    kikinovak · 1 janvier 2024 à 19 h 51 min

    C’est expliqué dans l’article. L’option inet_interfaces = localhost limite Postfix aux applications locales.

      pascal · 1 janvier 2024 à 20 h 03 min

      Merci pour cette réponse. C’est un point important et je voulais obtenir une précision.

        kikinovak · 1 janvier 2024 à 20 h 05 min

        C’est également explicité – de manière un peu laconique certes – dans le commentaire du fichier de configuration Outbound mail only.

yoann · 20 janvier 2024 à 15 h 36 min

pour alleger le fichier voici la commande : grep -v -P ‘(^#|^\s+#|^\s+$|^\s?$)’ TONFICHIER

    kikinovak · 20 janvier 2024 à 17 h 27 min

    À tes souhaits. :o)

Laisser un commentaire

Emplacement de l’avatar

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *