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 !!
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
sudo apt-get update
sudo apt-get upgrade
Rappel sur la commande apt-get
- apt-get : C'est un outil en ligne de commande pour gérer les paquets sur les systèmes Debian et les systèmes basés sur Debian comme Unbuntu. Il permet d'installer, de mettre à jour, d'améliorer et de supprimer des logiciels. voici toutes les possibilité ou tout du mois les principal
- apt-get install : Installe ou met à jour des paquets. Exemple : sudo apt-get install [nom_du_paquet].
- apt-get remove : Supprime des paquets sans supprimer les fichiers de configuration. Exemple : sudo apt-get remove [nom_du_paquet].
- apt-get purge : Supprime des paquets et leurs fichiers de configuration. Exemple : sudo apt-get purge [nom_du_paquet].
- apt-get update : Met à jour la liste des paquets disponibles et leurs versions, mais ne les installe ni ne les met à jour. Il est généralement utilisé avant upgrade ou dist-upgrade. Exemple : sudo apt-get update.
- apt-get upgrade : Met à jour tous les paquets installés vers les dernières versions disponibles. Elle ne supprime pas de paquets ni n'installe de nouveaux paquets. Exemple : sudo apt-get upgrade.
- apt-get dist-upgrade : Effectue une fonction similaire à upgrade mais peut aussi installer de nouveaux paquets ou supprimer des paquets existants si nécessaire pour compléter la mise à niveau. Exemple : sudo apt-get dist-upgrade.
- apt-get autoremove : Supprime les paquets qui ont été automatiquement installés pour satisfaire les dépendances d'autres paquets et qui ne sont plus nécessaires. Exemple : sudo apt-get autoremove.
- apt-get clean : Supprime les fichiers d'archive (.deb) des paquets téléchargés, libérant de l'espace sur le disque. Exemple : sudo apt-get clean.
- apt-get autoclean : Semblable à clean, mais ne supprime que les fichiers d'archive des paquets qui ne peuvent plus être téléchargés (paquets obsolètes). Exemple : sudo apt-get autoclean.
- apt-get check : Vérifie s'il y a des dépendances non satisfaites sur le système. Exemple : sudo apt-get check.
- apt-get source : Télécharge les fichiers source d'un paquet. Exemple : sudo apt-get source [nom_du_paquet].
- apt-get build-dep : Installe les dépendances de compilation pour un paquet. Exemple : sudo apt-get build-dep [nom_du_paquet].
- apt-get download : Télécharge le paquet spécifié mais ne l'installe pas. Exemple : sudo apt-get download [nom_du_paquet].
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.
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.
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
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 :
- smtp : Le nom du service, ici smtp, indique qu'il s'agit du service SMTP standard pour recevoir les emails en provenance d'autres serveurs de messagerie sur Internet.
- inet : Ce champ spécifie le type de socket utilisé. inet indique une socket Internet qui peut écouter les connexions TCP/IP. Cela peut être soit IPv4, soit IPv6, selon la configuration du système et de Postfix.
- n : Ce champ concerne le mode d'exécution du service en ce qui concerne les privilèges root. La lettre n signifie que le service ne nécessite pas, et ne devrait pas avoir, des privilèges root pour s'exécuter.
- - : Indique si le service doit ou non s'exécuter dans un contexte non privilégié (- signifie que cela dépend du service lui-même) autres posibilités y ou n.
- y : Ce champ indique si le service doit fonctionner en mode chroot (y signifie oui). En mode chroot, le service est limité à un sous-répertoire spécifique, ce qui augmente la sécurité en limitant l'accès du service au reste du système de fichiers. Autres posibilités - ou n.
- - (wakeup) : Définit la fréquence à laquelle le service doit être réveillé automatiquement par le système. Un tiret (-) dans ce champ signifie que le service ne doit pas être réveillé automatiquement. Autres posibilités y ou n.
- - (maxproc) : Spécifie le nombre maximum de processus simultanés que le service peut lancer. Un tiret (-) signifie qu'il n'y a pas de limite spécifique, et la limite par défaut de Postfix ou du système sera utilisée. Autres posibilités y ou n.
- smtpd : Ce champ définit le programme à exécuter pour ce service, ici smtpd, qui est le daemon SMTP de Postfix responsable de la réception des emails.
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
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 .
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=, size=397, nrcpt=1 (queue active)
2024-02-08T18:22:18.591671+00:00 vps-f87a022d postfix/local[3902]: 4E7DC3E23E: to=, 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
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
- 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.
- Postfix ce configure avec deux fichiers main.cf et master.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
- 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.
-
Commandes utiles :
sudo service postfix restart
tail -n 40 /var/log/mail.log
sudo nano /etc/postfix/main.cf
sudo nano /etc/postfix/master.cf
sudo telnet 127.0.0.1 25
sudo postconf -e nom_de_variable_postfix=valeur_de_la_variable - Si vous avez un warning dans les logs vous pouvez être sur que postfix ne fonctionnera pas bien il faudra donc le régler au plus vite. N'hésitez pas à poser des questions dans la communauté
- À ce stade vous ne pouvez pas connecter postfix sur une boite mail car seul le réseau local est autorisé à avoyer des mails de façon non authentifier. De plus postfix ne gère pas nativement IMAP et POP3 qui sont les protocoles permettant la gestion d'une boite mail. C'est aussi pour cette raison que seul la commande "sudo telnet 127.0.0.1 25" vous permettra d'envoyer des massages vers l'extérieur. Utiliser votre nom de domaine reviendrait à passer par un réseau non local.
- Votre postfix n'est pas encore câblé avec un certificat valide donc le ssh/TLS ne protège pas encore vos envois de mails, nous verrons ça par la suite!!
- A ce stade les email valides sont sous la forme nom_utilisateur_linux@votrenomededomaine.fr donc pour avoir un nouveau mail il vous suffit d'ajouter un nouvel utilisateur sur linux. Ce n'est pas pratique c'est pour cette raison que Postfixadmin va gérer des utilisateurs virtuels !!