Comment installer et configurer Postfix ?

Objectif

Dans ce chapitre je vous propose de passer à l’action. Vous allez apprendre à quoi sert postfix, ce qu’il peut faire et ne pas faire. Vous allez apprendre à l’installer de la façon la plus commune possible. Car nous ne verrons pas les autres options d’installation, car, trop spécifiques. Puis je vous expliquerai comment fonctionne la configuration postfix et je vous expliquerai chacune des lignes du fichier de configuration initial de postfix. Finalement nous utiliserons notre serveur SMTP fraichement installé pour envoyer un mail avec un compte local et nous analyserons les logs de cette communication SMTP réussie pour que vous puissiez comprendre un peu mieux ce qu’il s’y passe.

Ce chapitre est accompagné d’une vidéo qui reprend tous les points abordés dans le sommaire vous permettant de suivre en direct l’installation. Mais la vidéo sera plus avare en indication que le cours écrit ci-dessous! donc lisez-le!!

Ce chapitre est déjà très dense et comme vous avez pu le voir il reste encore plusieurs chapitres. Les deux prochains chapitres seront consacrés à l’amélioration de notre serveur SMTP en lui ajoutant une couche lui permettant de faire de l’authentification, un module lui permettant de gérer une boite mail et un module nous permettant de l’administrer simplement. Comme ajouter des utilisateurs, des alias ou des noms de domaines facilement. Alors accrochez-vous C’EST PARTI !!

Comment fonctionne SMTP - Comment fonctionne IMAP et POP3 ?

Sommaire

Postfix

Postfix: c'est quoi ?

Postfix est un agent de transfert de courriel (Mail Transfer Agent, MTA) open source qui joue un rôle essentiel dans l’envoi, la réception et le routage des e-mails. En tant que MTA, il est au cœur de la gestion des courriels sur un réseau, assurant la communication efficace entre les expéditeurs et les destinataires. Si vous avez bien suivit le chapitre précèdent Postfix va jouer le rôle de serveur SMTP dans notre installation.

L’une des principales caractéristiques de Postfix est son accent sur la sécurité et la performance. Il a été conçu pour offrir une alternative plus rapide et plus sécurisée aux MTA plus anciens, comme Sendmail. Cette focalisation sur la sécurité fait de Postfix un choix populaire pour les entreprises et les administrateurs système soucieux de protéger leurs réseaux contre les menaces et les abus.

Postfix offre également une bonne compatibilité avec Sendmail, permettant une transition facile pour les systèmes qui utilisent déjà Sendmail. Cette compatibilité facilite la migration vers Postfix sans nécessiter une refonte complète des systèmes de messagerie existants.

Bien que Postfix ne filtre pas directement les spams ou les virus, il peut être configuré pour travailler avec d’autres logiciels qui le font. Par exemple, il est souvent intégré avec des outils comme SpamAssassin pour le filtrage des spams et ClamAV pour la détection des virus, renforçant ainsi la sécurité de l’infrastructure de messagerie mais nous ne creuserons pas cette partie.

Enfin, Postfix est hautement personnalisable, offrant aux administrateurs une grande flexibilité dans la configuration des règles de routage des e-mails, les contrôles d’accès, les limites de taille des e-mails, et d’autres paramètres. Cette personnalisation fait de Postfix une solution robuste et adaptable pour divers besoins et environnements d’entreprise.

En résumé, Postfix est un MTA puissant et flexible largement utilisé pour gérer le flux de courriels dans les réseaux d’entreprise. Sa conception orientée vers la sécurité, sa compatibilité avec les systèmes existants, et sa capacité à intégrer des fonctionnalités supplémentaires en font un choix privilégié pour les administrateurs de systèmes et les organisations.
Maintenant que vous savez à quoi sert Postfix et de quoi il est capable voyons ensemble comment installer cette bête !!!! Et vous allez voir ce n’est pas si dure 🙂

Prérequis

Avant d’installer quoi que ce soit sur une machine linux il est toujours utile d’exécuter les deux commandes suivantes, afin de s’assurer que la machine est bien à jour.
				
					sudo apt-get update
sudo apt-get upgrade
				
			

Rappel sur la commande apt-get

sudo : Permet d’exécuter une commande en ayant des droits root. Avec sudo on peut disposer de tous les droits root ou une partie.

Installation

				
					#on exécute cette commande pour être sûr que exim4 n'est pas installé et si c'est le cas on le supprime
sudo apt-get purge 'exim4*
				
			

La commande sudo apt-get purge ‘exim4’ est utilisée pour désinstaller complètement Exim4, y compris tous ses fichiers de configuration, de votre système. exim4 est un agent de transfert de courriel (MTA) utilisé sur les systèmes Unix. Il est conçu pour transférer les courriels d’un hôte à un autre comme postfix. Afin d’eviter tous comflit avec postfix on le suprime.

Pour installer postfix il suffit d’exécuter la commande suivante:
				
					sudo apt-get install postfix
				
			

Lors de l’installation de postfix vous allez être amener à rencontrer cette écran dans lequel vous allez choisir « Internet Site » comme indiqué sur la capture d’écran.

Puis on va vous demander de rentrer votre nom de domaine, par défaut c’est le nom de la machine changez le par votre nom de domaine.

Après cette étape postfix finalise son installation tout seul. Afin de pouvoir utiliser postfix vous allez devoir vous intéresser au fichier de configuration /etc/postfix/main.cf qui est le fichier principal servant à la configuration de postfix. Le deuxième fichier de configuration que nous allons voir juste après c’est le fichier /etc/postfix/master.cf qui configure les processus postfix qui sont lancés, et c’est tout il n’y en a pas d’autre !!

Configuration

Avant de vous montrer précisément comment configurer ces deux fichiers voyons à quoi ils servent et voyons leurs différences :

/etc/postfix/main.cf

Le fichier main.cf est le fichier de configuration principal de Postfix. Il contient les réglages globaux qui affectent le fonctionnement général du serveur de messagerie. Cela inclut la configuration des domaines de messagerie, des restrictions de relais, des contrôles d’accès, des ajustements de performance, les politiques de sécurité, la gestion des files d’attente, les restrictions sur les clients et les destinataires, les configurations d’authentification, et les chemins vers d’autres fichiers de configuration ou bases de données nécessaires.

/etc/postfix/master.cf

Le fichier master.cf définit la configuration des services Postfix et comment ils sont démarrés. Chaque ligne dans ce fichier représente un service Postfix différent (par exemple, smtp, smtpd, cleanup, etc.) et décrit comment et quand ces services doivent être lancés, y compris leur environnement d’exécution (Autrement dit ce sont des instances du même programme postfix tournant sur un port différent avec des options différentes pour chacun d’eux). Chaque ligne de, master.cf, peut spécifier si le service doit fonctionner dans un environnement chroot, s’il doit être exécuté avec des privilèges élevés ou non ou le nombre de processus.

Configuration du fichier main.cf

Lorsque vous ouvrez le fichier /etc/postfix/main.cf pour la première fois, voici ce que vous y trouverez (j’y ai ajouté des commentaires explicatifs) :
				
					sudo nano /etc/postfix/main.cf

# See /usr/share/postfix/main.cf.dist for a commented, more complete version

# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

# Personnalise le message affiché aux clients qui se connectent au service SMTP. $myhostname ESMTP $mail_name 
# (Ubuntu) utilise le nom d'hôte du serveur, indique qu'il utilise ESMTP, et ajoute un commentaire (Ubuntu).
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)

# Désactive le service biff (no). Biff est un service de notification d'arrivée de courrier ancien et rarement utilisé.
biff = no

# Empêche Postfix d'ajouter automatiquement le domaine du serveur aux adresses qui n'en ont pas (no). Cela est     
# généralement géré par le client de messagerie (MUA).
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

# Désactive les indications vers le répertoire contenant les fichiers README de Postfix (no).
readme_directory = no

# See http://www.postfix.org/COMPATIBILITY_README.html -- default to 3.6 on
# fresh installs.
# Définit le niveau de compatibilité de Postfix à 3.6, influençant certaines fonctionnalités et comportements par        
# défaut pour s'aligner sur cette version spécifique.
compatibility_level = 3.6

# TLS parameters
# smtpd_tls_cert_file et smtpd_tls_key_file : Chemins vers les fichiers de certificat et de clé privée utilisés pour          
# sécuriser les connexions au service SMTP avec TLS. Les fichiers "snakeoil" sont des certificats génériques et ne        
# doivent pas être utilisés en production. Nous verrons ça plus tard
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
# Permet d'utiliser le TLS sur une base opportuniste (may) sans l'exiger pour les connexions.
smtpd_tls_security_level=may

# Chemin vers les certificats d'autorité de certification utilisés pour vérifier les certificats des serveurs SMTP distants.
smtp_tls_CApath=/etc/ssl/certs
# Identique à smtpd_tls_security_level, mais pour les connexions client sortantes.
smtp_tls_security_level=may
# Chemin vers la base de données utilisée pour stocker les sessions TLS, améliorant les performances des connexions 
# répétées.
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# Définit les politiques de relais, autorisant le relais pour les adresses IP locales (permit_mynetworks), les utilisateurs 
# authentifiés (permit_sasl_authenticated), et refusant par défaut les autres (defer_unauth_destination).
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
# Le nom d'hôte du serveur, utilisé dans divers contextes comme l'identification du serveur et les bannières SMTP.
myhostname = vps-f87a022d.vps.ovh.net
# Chemins vers les fichiers de base de données qui mappent les adresses et alias de messagerie.
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

# Définit le domaine ou l'adresse utilisée comme expéditeur par défaut pour les courriels envoyés par le système.
myorigin = /etc/mailname
# Liste des domaines pour lesquels ce serveur accepte de livrer le courrier localement.
mydestination = $myhostname, votredomaine.fr, vps-f8a.vps.ovh.net, localhost.vps.ovh.net, localhost
# Spécifie un serveur de relais optionnel pour tout le courrier sortant (vide ici, donc pas utilisé).
relayhost =
# Définit les réseaux IP considérés comme "locaux" et dignes de confiance pour le relais sans authentification.
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
# La limite de taille pour les boîtes aux lettres individuelles, 0 signifie aucune limite.
mailbox_size_limit = 0
# Définit un caractère utilisé pour séparer le nom d'utilisateur de l'extension dans les adresses email (ex.             
# user+tag@example.com).
recipient_delimiter = +
# Configure les interfaces réseau sur lesquelles Postfix accepte les connexions (ici, toutes).
inet_interfaces = all
# Détermine les protocoles réseau (IPv4, IPv6) que Postfix utilisera pour les connexions.
inet_protocols = all
				
			

Je vous invite reconfigurer votre postfix en exécutant les lignes ci-dessous. La commande « sudo postconf -e nom_de_variable_postfix=valeur_de_la_variable » qui se répète ci-dessous ajoute l’égalité qui se trouve après -e dans le fichier postfix si elle n’exitse pas, sinon elle la modifie. Vous pouvez aussi le faire directement en ouvrant le fichier et en ajoutant chacune de ces égalités au fichier. N’oubliez pas de changer votredomaine.fr par votre domaine.

				
					sudo postconf -e myhostname=votredomaine.fr
sudo postconf -e mydomain=votredomaine.fr
sudo postconf -e myorigin="\$mydomain"
sudo postconf -e inet_interfaces=all
sudo postconf -e mydestination="\$myhostname, localhost.\$mydomain, localhost, \$mydomain"
sudo postconf -e home_mailbox=Maildir/
sudo postconf -e smtpd_relay_restrictions="permit_mynetworks permit_sasl_authenticated defer_unauth_destination"
sudo postconf -e mynetworks=127.0.0.0/8
				
			

Configuration du fichier master.cf

Ensuite je vous invite à ouvrir le fichier /etc/postfix/master.cf avec la commande
sudo nano /etc/postfix/master.cf. Vous y trouverez un gros fichier de configuration avec beaucoup de lignes. Je vous ai mis ci-dessous le début de ce fichier car pour le moment c’est la seule partie qui nous intéresse. Il va falloir décommenter la ligne :

#submission inet n – y – – smtpd

En enleuvant le ‘#’ qui se trouve devant. comme sur l’exemple ci-dessou

Mais voyons comment ce fichier fonctionne.

				
					sudo nano /etc/postfix/master.cf

#
# Postfix master process configuration file.  For details on the format
# of the file, see the master(5) manual page (command: "man 5 master" or
# on-line: http://www.postfix.org/master.5.html).
#
# Do not forget to execute "postfix reload" after editing this file.
#
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (no)    (never) (100)
# ==========================================================================
smtp      inet  n       -       y       -       -       smtpd
#smtp      inet  n       -       y       -       1       postscreen
#smtpd     pass  -       -       y       -       -       smtpd
#dnsblog   unix  -       -       y       -       0       dnsblog
#tlsproxy  unix  -       -       y       -       0       tlsproxy
# Choose one: enable submission for loopback clients only, or for any client.
#127.0.0.1:submission inet n -   y       -       -       smtpd
submission inet n       -       y       -       -       smtpd
				
			

Chaque ligne du fichier master.cf qui ne commence pas par ‘#‘ représente un service différent ou une instance de service que Postfix gère. Les lignes commençant par ‘#‘ sont des lignes non prises en compte car interprétées comme des commentaires. Voici une explication détaillée de la ligne de configuration suivante :

smtp inet n – y – – smtpd

Cette ligne configure le service SMTP standard (c’est à dire le service qui écoute sur le port 25) pour écouter les connexions entrantes. Voici la signification de chaque champ :

Et donc la ligne:

submission inet n – y – – smtpd

Fait la même chose que la ligne précédente. Cette ligne va démarrer un démon postfix mais sur le port 587 qui est un port alternatif standard. Beaucoup de FAI bloquent le port 25 (SMTP) pour éviter les serveurs de spam. Du coup on utilise le port 587.

Postfix: test

Nous voilà donc à l’étape du test. Afin de pouvoir tester l’envoi d’un mail je vous invite à tester votre serveur mail avec l’outil telnet. En exécutant la commande :
« sudo telnet votrenomdedomaine.fr 25 » ou « sudo telnet votrenomdedomaine.fr 587 » l’une ou l’autre aura le même résultat. Remarquez que j’ai utilisé un nom de domaine pour faire cet appel SMTP je ne pourrais donc pas envoyer d’email sur une adresse mail en dehors de ma machine pour comprendre revoir les explications sur la configuration postfix (indice seul localhost est autoriser à envoyer des mail en dehors du reseau local). Chez OVH votre machine est créé avec deux utilisateurs : l’utilisateur root et l’utilisateur ubuntu. Avec la configuration actuelle de postfix vous avez donc 2 adresses mail utilisables localement: ubuntu@votrenomdedomaine.fr et root@votrenomdedomaine.fr. Vous pouvez donc envoyer un email de l’un à l’autre comme dans l’exemple ci-dessous. Si vous voulez envoyer en dehors de votre serveur donc en-dehors de votre réseau local il faudra taper la commande suivante : « sudo telnet 127.0.0.1 25 » car seul votre localhost est autorisé à envoyer des mails de façon non authentifier, vers l’extérieur, avec la configuration actuelle bien sûr (Pour plus de compréhension revoir l’explication de la configuration).
 
Ci-dessous les lignes blanches sont les réponses aux commandes en orange, les lignes blanches ne sont donc pas à copier-coller.
				
					sudo telnet votrenomdedomaine.fr 25

Trying 2001:41d0:404:200::7fbb...
Connected to affildirect.fr.
Escape character is '^]'.
220 affildirect.fr ESMTP Postfix (Ubuntu)
HELO votrenomdedomaine.fr
250 affildirect.fr
MAIL FROM: root@votrenomdedomaine.fr
250 2.1.0 Ok
RCPT TO: ubuntu@votrenomdedomaine.fr
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
Subject: test message
This is the body of the message!

.
250 2.0.0 Ok: queued as 9538986111
quit
221 2.0.0 Bye
Connection closed by foreign host.
				
			

Si comme dans l’exemple vous avez envoyé un mail à ubunt@votrenomdedomaine.fr alors le mail se trouve dans le dossier utilisateur de ubuntu, sous Maildir/new. La commande qui suit liste ce qui se trouve dans ce dossier (à condition de se trouver dans le dossier home de l’utilisateur ubuntu):

« ll Maildir/new/ »

Vous devriez voir un fichier avec un nom du type: 1707416538.V801I3e242M587964.vps-f87a022d
c’est votre mail. Vous pouvez le visualiser avec la commande cat 1707416538.V801I3e242M587964.vps-f87a022d en vous plaçant dans Maildir/new/

Il me semble important que vous sachiez lire les logs postfix c’est pour cette raison que la partie qui suit vous explique les logs d’un envoie de mail qui à fonctionné.

Postfix: on étudie ses logs

La commande linux tail -n 40 /var/log/mail.log va vous afficher les 40 dernières lignes du fichier mail.log qui est le fichier de log de postfix. Voici l’extrait des logs qui représente un échange SMTP réussi. Les logs sont des informations que notre serveur écrit à chaque instant pour nous donner des indications sur son fonctionnement. Nous y cherchons donc, souvent, des lignes indiquant un problème ou une alerte par expérience les deux doivent être traité sur postfix car leur apparition dans les logs indique presque tout le temps un dysfonctionnement majeur.

à la différence de l’exemple ci-dessus nous voyons ici un envoie réussi de l’adresse ubuntu@lasdunumeric.fr vers l’dresse root@lasdunumeric.fr

				
					2024-02-08T18:21:25.558478+00:00 vps-f87a022d postfix/smtpd[3894]: connect from lasdunumeric.fr[2001:41d0:304:200::7829]

2024-02-08T18:21:56.322365+00:00 vps-f87a022d postfix/smtpd[3894]: 4E7DC3E23E: client=lasdunumeric.fr[2001:41d0:304:200::7829]

2024-02-08T18:22:18.570752+00:00 vps-f87a022d postfix/cleanup[3900]: 4E7DC3E23E: message-id=<20240208182156.4E7DC3E23E@lasdunumeric.fr>
2024-02-08T18:22:18.574867+00:00 vps-f87a022d postfix/qmgr[3884]: 4E7DC3E23E: from=<ubuntu@lasdunumeric.fr>, size=397, nrcpt=1 (queue active)

2024-02-08T18:22:18.591671+00:00 vps-f87a022d postfix/local[3902]: 4E7DC3E23E: to=<root@lasdunumeric.fr>, relay=local, delay=30, delays=30/0.01/0/0, dsn=2.0.0, status=sent (delivered to maildir)

2024-02-08T18:22:18.592060+00:00 vps-f87a022d postfix/qmgr[3884]: 4E7DC3E23E: removed

2024-02-08T18:22:23.201117+00:00 vps-f87a022d postfix/smtpd[3894]: disconnect from lasdunumeric.fr[2001:41d0:304:200::7829] helo=1 mail=1 rcpt=1 data=1 quit=1 commands=5
				
			
Connexion entrante : 2024-02-08T18:21:25.558478+00:00 vps-f87a022d postfix/smtpd[3894]: connect from lasdunumeric.fr[2001:41d0:304:200::7829]
le client de messagerie de lasdunumeric.fr (adresse IPv6 2001:41d0:304:200::7829) établit une connexion avec votre serveur Postfix.
Réception d’un message : 2024-02-08T18:21:56.322365+00:00 vps-f87a022d postfix/smtpd[3894]: 4E7DC3E23E: client=lasdunumeric.fr[2001:41d0:304:200::7829]
Postfix reçoit un message du client mentionné donc lasdunumeric.fr. Le message est identifié par l’ID 4E7DC3E23E.
Traitement du message : 2024-02-08T18:22:18.570752+00:00 vps-f87a022d postfix/cleanup[3900]: 4E7DC3E23E: message-id=<20240208182156.4E7DC3E23E@lasdunumeric.fr>
Le message passe par le processus de nettoyage (cleanup), où il est préparé pour la livraison. Son ID de message est confirmé.
Mise en file d’attente : 2024-02-08T18:22:18.574867+00:00 vps-f87a022d postfix/qmgr[3884]: 4E7DC3E23E: from=<ubuntu@lasdunumeric.fr>, size=397, nrcpt=1 (queue active)
Le message est placé dans la file d’attente de Postfix pour être livré. Il est en provenance de ubuntu@lasdunumeric.fr, avec une taille de 397 octets et destiné à un seul destinataire.
Livraison du message : 2024-02-08T18:22:18.591671+00:00 vps-f87a022d postfix/local[3902]: 4E7DC3E23E: to=<root@lasdunumeric.fr>, relay=local, delay=30, delays=30/0.01/0/0, dsn=2.0.0, status=sent (delivered to maildir)
Le message est livré localement à l’adresse root@lasdunumeric.fr. Les détails de livraison indiquent un délai total de 30 secondes. Le message a été délivré avec succès dans un dossier Maildir.
Suppression de la file d’attente : 2024-02-08T18:22:18.592060+00:00 vps-f87a022d postfix/qmgr[3884]: 4E7DC3E23E: removed
Après la livraison, le message est retiré de la file d’attente.
Déconnexion : 2024-02-08T18:22:23.201117+00:00 vps-f87a022d postfix/smtpd[3894]: disconnect from lasdunumeric.fr[2001:41d0:304:200::7829] helo=1 mail=1 rcpt=1 data=1 quit=1 commands=5
Le client lasdunumeric.fr se déconnecte du serveur Postfix après avoir exécuté une séquence de commandes SMTP (HELO, MAIL FROM, RCPT TO, DATA, QUIT), indiquant une session SMTP complète et réussie.

Le chapitre touche à sa fin, vous avez maintenant toutes les clefs pour utiliser et installer postfix dans sa version dépouillée de tous module complémentaire. Vous savez comment lire les logs en cas de problème et comment envoyer un mail en utilisant postfix. Mais nous sommes d’accord que si vous suivez cette formation c’est pour en savoir plus sur comment faire mieux que ça. C’est justement ce que nous allons faire dans les chapitres suivants. Le prochain chapitre va nous permettre de mettre en place Postfixadmin qui est un outil facilitant l’administration de postfix. Après ce chapitre vous saurez comment ajouter autant d’adresse mail valide que vous le souhaiter et vous pourrez ajouter autant de domaine que vous le pouvez autrement dit qui vous appartiennent et même ajouter des alias et des quotas. Je vous attends là-bas !!!

Notes à retenir

Références recommandées pour ce cours

Laisser un commentaire

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

Retour en haut