Installer Postfix

Débutant • serveur de messagerie sous Linux

Installer et configurer postfix

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

Chapitre
2
3

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.

Vous tapez les commandes suivante pour les inserer dans le dosier /etc/postfix/mysql/

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

LMTP est un agent de livraison local distribuera les courriels entrants dans les boîtes aux lettres des utilisateurs.
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__restrictions here,
# specify "smtpd_
_restrictions=$mua__restrictions"
# here, and specify mua_
_restrictions in main.cf (where
# "
" is "client", "helo", "sender", "relay", or "recipient").
# -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__restrictions here,
# specify "smtpd_
_restrictions=$mua__restrictions"
# here, and specify mua_
_restrictions in main.cf (where
# "
" is "client", "helo", "sender", "relay", or "recipient").
# -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.