Installer Postfix
Débutant • serveur de messagerie sous Linux

Vue d’ensemble
Découvrez comment configurer Postfix sur un debian pour une messagerie sécurisée avec TLS, installer des certificats SSL et gérer les paramètres SMTP. Partie 4 du guide.
Postfix est un serveur de messagerie très puissant. il vous permet de gérer différents domaines via une base de données MySql et Postfix Admin.
Ce que vous apprendrez
- Installer Postfix
- Comprendre les fichiers Postfix
- Sauvegarder les fichiers d’origine
- Configurer Postfix
- Rappel pour installer Dovecot
- Compréhension des différents fichiers
- Personnalisation du fichier de configuration générale
- Personnaliser le fichier pour MySQL
Chapitre
Postfix Support
Dans ce tutoriel, vous allez apprend à installer Postfix et le configurer.
Grâce à mon expérience, vous éviterez toutes les problématiques rencontrés dans ce tutoriel/
Détails
Débutant
03 hrs 00min
Mise à jour: 04/10/2023
Pré-requis
Mise à jour de la Debian
Récupérer informations base de données
Sauvegarder le fichier origine
Installer Postfix Debian
Pour installer Postfix, vous devez utiliser les paquets de Debian.
Ligne de Commande
root@mail:/#apt install postfix postfix-mysql
Comprendre les fichiers Postfix
Postfix est un agent de transport de message MTA.
Le serveur Postfix peux gérer plusieurs domaines en même temps SMTP. Mais ce n’ai pas que ça, c’est lui le manager du tranqport des messages MTA.
Une fois installé, vous pouvez alle dans le dossier /etc/postfix.
Dans le répertoire, vous avev plusieurs fichiers que je vais vous expliquer.
- main.cf
- master.cf
Ligne de Commande
root@mail:/#cd /etc/postfix
Main.cf
Main.cf vous permet d’établir toute votre configuration de Postfix.
Voici les principales variables dans le fichier.
- smtpd_banner : c’est la bannière
- myhostname : Le nom de machine Internet de ce système de messagerie.
- mydestination : Liste des domaines livrés par le transporteur de messages
- myorigine : Le domaine par défaut utilisé pour les messages postés localement.
- mynetworks : C’est la liste des réseaux internes autorisés à relayer le courrier.
- inet_interfaces : Les adresses réseau par lesquelles le système de messagerie reçoit les messages
- inet_protocols : La forme “all” est equivalente à “ipv4, ipv6” ou “ipv4”, suivant que le système supporte IPv6 ou non.
- virtual_transport : Transporteur de messages par défaut pour les domaines qui correspondant à la valeur du paramètre $virtual_mailbox_domains. Cette information peut être surchargée par la table transport(5).
- maillog_file : Où se trouve le fichier log pour vous aidez à trouvez les erreurs du /etc/postfix/main.fr
- debug_peer_list : Liste optionelle de clients ou serveurs distants qui déclenche l’élévation du niveau de déboguage de la valeur indiquée par $debug_peer_level.
- compatibility_level :
- message_size_limite : la taille des pièces jointes
- mailbox_size_limite : la boîte mail n’a pas de limite de taille si vous avez mis 0.
- mail_spool_directory : c’est le journal des e-mail de Postfix qui est stocké dans /var/log/postfix.log
Master.cf
Ce fichier permet de gérer les ports :
- 25
- 587
- 465
Le port 25 est non sécurisé. Par contre les port 587 et 465 sont des port en SSL donc sécurisé. C’est précaunisé dans la documentation de postfix.org.
Le port 25 est identifie dans le fichier smtp.
le port 587 est marqué “Soumission”.
Puis e port 465 est marqué “Soumissions”
Pré-requis de configuration
Avant de configurer Postfix vous devez copier les fichiers principaux en un autre nom.
Ligne de Commande
root@mail:/etc/postfix/#cp main.cd main.cf.origine
root@mail:/etc/postfix/# cp master.cf master.cf.origine
Vous avez besoin de créer un dossier MySql. Ce répertoire vous servira à mettre les fichiers virtuels qui interrogera la base de données.
Ligne de Commande
root@mail:/etc/postfix/# mkdir-p /etc/postfix/mysql
Créer un utilisateur et un groupe pour Postfix
vous devez créer un utilistaeur et un groupe avec un identifiant commun qui est plus simple à gérer.
L’identifant ce que j’appelle un ID, vous choisissez un ID de 5000.
L’utilistaeur n’au pas de dossier home et ne pourra pas se connecter comme utilisateur sysstème.
Ligne de Commande
root@mail:/etc/postfix/# adduser vmail --system --group --uid 5000 --disabled-login --no-create-home
Définir le propriétaire du dossier mail
Vous avec créer un dossier mail où seront stockés les mails des diffrénts domaines et utilisateur.
Je vous invite à mettre les droits pour le dossier /var/mail en tant qu’utilisateur vmail et le groupe vmail.
Ligne de Commande
root@mail:/etc/postfix/# chown -R vmail:vmail /var/mail/
Organiser le fichier /etc/postfix/main.cf
Dans ce fichier, j’ai séparé les bloc pour mieux comprendre.
Les blocs sont les suivant :
- Générale
- Logs
- TLS parameters ( SMTP Sortie vers client et Entrée vers serveur)
- côté serveur SMTPD Entrée vers serveur
- côté clients SMTP Sortie vers client
- SASL
- configuration virtuelle
- Restrictions
- OpenDKIM
Vous pouvez ouvrir le fichier /etc/postfix/main.cf.
Pour organiser ce fichier nous allez commenter par un # chaque partie.
Si vous voulez commenter chaque ligne, c’est un conseil pour mieux vous y retrouvez.
# Générale
# Logs
# TLS parameters ( SMTP Sortie vers client et Entrée vers serveur)
# côté serveur SMTPD Entrée vers serveur
# côté clients SMTP Sortie vers client
# SASL
# configuration virtuelle
# Restrictions
# OpenDKIM
Configurer Postfix Debian
Vous allez indique sur quel réseau vous êtes. Si vous voulez utiliser tout les protocol IPv4 et IPv6. Par défaut c’est mis “All”.
Vous devez bien mettre le répertoire où se trouvera le domaine avec lorganisation de de la boîte mail.
Je vous conseille de séparer la partie Générale et les logs pour recevoir les information de postfix.
configurer la partie générale
Fichier /etc/postfix/main.conf
# Voir /usr/share/postfix/main.cf.dist pour une version commentée et plus complète.
# Générale #
smtpd_banner = $myhostname ESMTP $mail_name
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
readme_directory = /usr/share/doc/postfix
# See http://www.postfix.org/COMPATIBILITY_README.html -- default to 3.6 on
# fresh installs.
compatibility_level = 3.6
# Obtenir une alerte si les emails ne partent pas
# Par défaut cette option est réglée à 4 heures, j'ai réduit cette durée:
delay_warning_time = 1h
myhostname = domain.uk
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
#myorigin = /etc/mailname
myorigin = $myhostname
mydestination = localhost
#home_mailbox = /var/mail/
relayhost = $mydomain
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
# Indiquer à Postfix de livrer à un destinataire à la fois
# la réception d'un mail en provenance d'un expéditeur unique avec plusieurs destinataire ne fonctionnerais pas sans cette option
dovecot_destination_recipient_limit = 1
message_size_limit = 20480000
html_directory = /usr/share/doc/postfix/html
La partie logs
# Voir /usr/share/postfix/main.cf.dist pour une version commentée et plus complète.
# Le fichier Log
maillog_file = /var/log/postfix.log
debug_peer_list = 127.0.0.1
SSL /TLS
Vous avez créé votre certificat de domaine et vous souhaitez indiquer le chemin du certificat à Postfix, tout en signalant l’utilisation d’une connexion sécurisée en SSL.
La version 1.0 de TLS est souvent considérée comme non sécurisée, c'est pourquoi il est recommandé de la désactiver.
Pour rendre Postfix conforme, j’ai pris les mesures suivantes à mon extrémité : j’ai empêché l’utilisation de SSL v2/3 et TLS v1. Voici les éléments que j’ai ajoutés à main.cf :
smtpd_tls_mandatory_protocols = !SSLv2,!SSLv3,!TLSv1
smtpd_tls_protocols = !SSLv2,!SSLv3,!TLSv1
smtp_tls_mandatory_protocols = !SSLv2,!SSLv3,!TLSv1
smtp_tls_protocols = !SSLv2,!SSLv3,!TLSv1
Ainsi, votre configuration Postfix sera compatible avec les normes de sécurité SSL.
# TLS parameters SMTPD
# côté serveur
smtpd_tls_cert_file=/etc/letsencrypt/live/domain.uk/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/domain.uk/privkey.pem
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls=yes
smtpd_tls_security_level=may
smtpd_tls_loglevel = 1
smtpd_helo_required = yes
smtpd_tls_mandatory_protocols = !SSLv2,!SSLv3,!TLSv1,!TLSv1.1
smtpd_tls_protocols = !SSLv2,!SSLv3,!TLSv1,!TLSv1.1
#
#côté clients SMTP
#
smtp_tls_security_level = may
smtp_tls_loglevel = 1
smtp_use_tls = yes
smtp_tls_cert_file=/etc/letsencrypt/live/domain.uk/fullchain.pem
smtp_tls_key_file=/etc/letsencrypt/live/domain.uk/privkey.pem
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtp_tls_note_starttls_offer = yes
smtp_tls_mandatory_protocols = !SSLv2,!SSLv3,!TLSv1,!TLSv1.1
smtp_tls_protocols = !SSLv2,!SSLv3,!TLSv1,!TLSv1.1
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
#smtp_tls_CApath=/etc/ssl/certs
Préparer les fichiers virtuels Postfix MySql
Maintenant vous allez créer 5 fichiers de configuration qui vont permettre d’interagir avec MySQL.
vous les plaçez dans le dossier que nous avons créé /etc/postfix/mysql/
Attention : Vérifier que les fichiers ont tous un - ou _ car ça peut engendrer des erreurs
- mysql_virtual_domains_maps.cf
- mysql_virtual_mailbox_maps.cf
- mysql_virtual_alias_domain_mailbox_maps.cf
- mysql_virtual_alias_maps.cf
- mysql_virtual_alias_domain_maps.cf
- mysql_virtual_alias_domain_catchall_maps
mysql_virtual_domains_maps.cf
Ligne de commande
#/etc/postfix/sql/mysql_virtual_domains_maps.cf
user = postfix
password = password
hosts = localhost ou IPFailOver du serveur mysql
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s' AND active = '1
mysql_virtual_alias_domain_mailbox_maps.cf
Ligne de commande
#/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
user = postfix
password = password
hosts = localhost ou IPFailOver du serveur mysql
dbname = postfix
query = SELECT maildir FROM mailbox,alias_domain WHERE alias_domain.alias_domain = '%d' and mailbox.username = CONCAT('%u', '@', alias_domain.target_domain) AND mailbox.active = 1 AND alias_domain.active='1'
mysql_virtual_mailbox_maps.cf
Ligne de commande
#/etc/postfix/sql/mysql_virtual_mailbox_maps.cf
user = postfix
password = password
hosts = localhost ou IPFailOver du serveur mysql
dbname = postfix
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'
mysql_virtual_alias_maps.cf
Ligne de commande
#/etc/postfix/sql/mysql_virtual_alias_maps.cf
user = postfix
password = password
hosts = localhost ou IPFailOver du serveur mysql
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
mysql_virtual_alias_domain_maps.cf
Ligne de commande
#/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf
user = postfix
password = password
hosts = localhost ou IPFailOver du serveur mysql
dbname = postfix
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'
mysql_virtual_alias_domain_catchall_maps.cf
Ligne de commande
#/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf
user = postfix
password = password
hosts = localhost ou IPFailOver du serveur mysql
dbname = postfix
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'
Droit sur le dossier MySql et les fichiers du dossier /etc/postfix/mysql
Vous avez pu constater que les mot de passe sont en claire de la base de données.
Je vous invite à donner les droit juste pour l’utilisateur root et postfix.
Ligne de Commande
root@mail:/etc/postfix/# chmod 0640 /etc/postfix/mysql*
Ajouter les ACL /etc/postfix/mysql/
Vous devez définir les droits pour l’utilisateur Postfix.
Vous allez utiliser la commande setfact -R -m u:
Vous autorisez à “utilisateur” la lecture et l’exécution sur les “fichiers” du dossier /etc/postfix/mysql en mode récursif.
Ligne de Commande
root@mail:/etc/postfix/# setfacl -R -m u:postfix:rx /etc/postfix/mysql/
Ajouter les fichiers virtual dans /etc/postfix/main.cf
Une fois que vous avez créé les fichiers de configuration SQL, vous ajouter dans le fichier de configuration postfix pour y inclure les informations relatives aux domaines virtuels, aux utilisateurs et aux alias stockés dans la base de données MySQL.
virtual_mailbox_domains : Ce fichier qui se trouve dans /etc/postfix/mysql/, Postfix demande à mysql de rechercher les informations relatives aux domaines dans la base de données.
virtual_mailbox_maps : Ce fichier qui se trouve dans /etc/postfix/mysql/, Postfix demande de rechercher les adresses mail dans la base de données.
virtual_alias_maps : Ce fichier qui se trouve dans /etc/postfix/mysql/, Postfix demande de rechercher les alias dans la base de données.
Pour que Postfix ait accès aux données relatives aux comptes stockées dans la
base de données, nous devons ajouter ces lignes :
# configuration virtuelle
# Emplacement où seront stockés les courrie
virtual_mailbox_base = /var/mail
virtual_minimum_uid = 5000
virtual_uid_maps = static:5000
virtual_gid_maps = static:8
# Noms de domaine des boites de courriel
virtual_mailbox_domains = mysql:/etc/postfix/mysql/mysql_virtual_domains_maps.cf
# Adresses des courriels (adresses réelles et alias)
virtual_mailbox_maps =
mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf,
mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
# Redirection des courriels à destination d'une adresse vers une autre adresse
virtual_alias_maps =
mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf,
mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf,
mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf
Exécutez la commande suivante pour définir le service LMTP de Dovecot comme transport de livraison de courrier par défaut :
virtual_transport = lmtp:unix:private/dovecot-lmtp
Alias dans Postfix
Êtes-vous curieux des alias_maps et alias_database ?
Vous vous demandez ce que sont les alias ?
Lorsque vous envoyez un e-mail à un administrateur ou à Postmaster@DOMAINE.FR, vous souhaiterez peut-être qu’il ne soit pas livré à une boîte aux lettres inexistante appelée Postmaster.
Mais à la boîte aux lettres d’une autre personne qui s’en chargera.
C’est là que les alias interviennent. Cela signifie qu’une adresse sera en fait envoyée à une autre adresse.
Alors pourquoi est-ce marqué comme “hashe”?
Il s’agit d’un préfixe de hachage qui indique le type de base de données ou de source de données que Postfix va lire.
Postfix peut lire à travers différentes sources, telles qu’un fichier texte pour générer une table de hachage.
Il peut également s’agir de MySQL, PostgreSQL ou de toute autre source de données possible.
“Hashe” signifie que nous les modifierons manuellement dans le fichier /etc/aliases, puis utiliserons une commande pour que Postfix génère sa table de hachage.
Pour finir avec les alias, normalement vous en n’avez pas besoin car c’est postfix Admin qui gère les alais.
# Les Alias
#alias_maps = hash:/etc/aliases
#alias_database = hash:/etc/aliases
Configurer pour ouvrir les ports de soumission 587 et 465
Vous avez ouvert le fichier /etc/postfix/master.cf. Dans ce fichie, vous pouvez ouvrir les port 25, 587 et 465.
Ci-dessous vous pouvez voir que le port 25 est ouvert car le smtp est décommennté.
Pour fermer un port vous devez utilier un dièse (#) au début de la ligne.
# 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
Mainbtenant vous allez configurer le port 587 que nous appelons le port de soumission.
Je vous ai remis le tableau mais vous n’avez pas besoin de le mettre plusieurs fois.
C’est pour bien comprendre le fichier.
# 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)
# ==============================================================================================
#587
submission inet n - y - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_tls_wrappermode=no
-o smtpd_sasl_auth_enable=yes
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
-o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=private/auth
# -o smtpd_tls_auth_only=yes
# -o smtpd_enforce_tls=yes
# -o smtpd_reject_unlisted_recipient=no
# Instead of specifying complex smtpd_
# specify "smtpd_
# here, and specify mua_
# "
# -o smtpd_client_restrictions=
# -o smtpd_helo_restrictions=
# -o smtpd_sender_restrictions=
# -o smtpd_relay_restrictions=
# -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
Enfin vous ouvrez le port 465 qui s’appelle le port de soumissions mais la différence entre le 587 celui là à un (s) à la fin.
# 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)
# ==============================================================================================
# Port 465
submission inet n - y - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_wrappermode=no
-o smtpd_sasl_auth_enable=yes
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
-o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=private/auth
# -o smtpd_enforce_tls=yes
# -o smtpd_reject_unlisted_recipient=no
# Instead of specifying complex smtpd_
# specify "smtpd_
# here, and specify mua_
# "
# -o smtpd_client_restrictions=
# -o smtpd_helo_restrictions=
# -o smtpd_sender_restrictions=
# -o smtpd_relay_restrictions=
# -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
Redémarrer le service de Postfix
.Pour activer tous les changements de Postfix, vous devez utiliser la commande :
systemctl reload postfix ou systemctl resart postfix.
Je vous ai mis les commandes pour charger le service, redémarrer le service, démarrer le service et l’arrêter.
Ligne de commande
root@mail:/etc/postfix#systemctl reload postix
root@mail:/etc/postfix#systemctl reload postfix
root@mail:/etc/postfix#systemctl start postfix
root@mail:/etc/postfix#systemctl stop postfix
Dovecot
Découvrez comment installer et configurer un serveur Dovecot grâce à notre présentation. Dans ce chapitre, vous trouverez toutes les informations nécessaires pour comprendre et mettre en place Dovecot, afin de garantir un serveur de messagerie fiable et performant. De la section de texte en-tête à l’image, suivez nos conseils détaillés et pratiques pour configurer Dovecot selon vos besoins spécifiques. Ne manquez pas cette opportunité d’optimiser votre serveur de messagerie avec Dovecot. Informations, résumés et guides étape par étape vous attendent dans cette page. Explorez dès maintenant notre contenu complet sur l’installation et la configuration de Dovecot pour améliorer votre expérience de messagerie.
Rappel pour installer Dovecot
Pour installer Dovecot nous avons besoin des paquets de Debian.
Ces paquets sont composé de plusieurs modules.
-
dovecot-core
-
dovecot-imapd
-
dovecot-lmtpd
-
dovecot-managesieved
-
dovecot-mysql
-
dovecot-pop3d
-
dovecot-sieve
-
dovecot-submissiond
Vos questions
Faq
FAQ
FAQ
Ici vous retrouvez toutes les questions générale en cas de problème rencontré
Comment installer Postfix
Pour installer postfix, vous devez utiliser la commande :
apt get install postfix
Comment redemarer le service Postfix
systemctl restart postfix
Erreur de version SSL
Si vous avez une erreur de version ssl, vous devez ajouter les verson que vous ne voulez pas :
smtpd_tls_mandatory_protocols = !SSLv2,!SSLv3,!TLSv1,!TLSv1.1
smtpd_tls_protocols = !SSLv2,!SSLv3,!TLSv1,!TLSv1.1
smtp_tls_mandatory_protocols = !SSLv2,!SSLv3,!TLSv1,!TLSv1.1
smtp_tls_protocols = !SSLv2,!SSLv3,!TLSv1,!TLSv1.1
Activer le port 587
Pour activer le port 587 vous devez ouvrir le fichier /etc/postfix/master.cf,
et décommenter la ligne de soumission.
Ouvrir le port 465
Pour activer le port 465 vous devez ouvrir le fichier /etc/postfix/master.cf,
et décommenter la ligne de soumissions.