Configuration de Postfix
La première partie de la configuration se concentre sur le logiciel Postfix. Il s'agit d'un serveur SMTP, c'est-à-dire un logiciel qui se charge d'envoyer les mails et de les stocker dans les boîtes de chaque utilisateur. Il s'occupe également de stocker la liste des utilisateurs et de gérer leur connexion. C'est donc lui qui va communiquer avec Dovecot pour permettre aux personnes de se connecter à leur boîte mail.
Bien qu'il existe d'autres logiciels qui font la même chose que lui, Postfix reste l'un des plus simples à configurer et il est largement utilisé sur les serveurs qui gérent des courriels, ce qui explique mon choix pour la plateforme.
Avant de continuer, nous allons changer de dossier pour être sûr de travailler dans le répertoire de Postfix :
cd /etc/postfix
Modification des fichiers principaux (main.cf et master.cf)
Pour son fonctionnement, Postfix utilise deux fichiers : main.cf
et master.cf
.
Le fichier main.cf
contient l'ensemble des paramètres et des options de Postfix (chiffrement, connexion aux bases de données, message d'accueil), alors que master.cf
se charge de gérer les protocoles de connexion (le fameux port SMTP).
Main.cf
Pour commencer, on va d'abord déplacer le fichier qui est fourni par défaut et créer un fichier vierge et propre pour notre configuration. Pour cela, il suffit de changer son extension actuelle par un .old
de cette façon :
sudo mv main.cf main.old && sudo nano main.cf
Ensuite, on va ajouter les différentes options qui vont nous permettre d'avoir une configuration fonctionnelle. Ici, on va utiliser une base de données SQL pour stocker nos utilisateurs et le chemin vers leurs boîtes mail, pour pouvoir gérer le tout via notre navigateur Web (grâce à PostfixAdmin).
D'abord, on indique à Postfix d'utiliser toutes les interfaces (IPv4 et IPv6) et protocoles disponibles et on modifie aussi son message d'accueil pour cacher sa version :
smtpd_banner = $myhostname ESMTP
biff = no
append_dot_mydomain = no
readme_directory = no
inet_interfaces = all
inet_protocols = all
On renseigne aussi les différentes limitations pour ne pas surcharger le serveur (taille des boîtes de mail, durée maximale pour garder les mails non envoyés en cas d'échec) :
mailbox_size_limit = 0
recipient_delimiter = +
maximal_queue_lifetime = 1h
bounce_queue_lifetime = 1h
maximal_backoff_time = 15m
minimal_backoff_time = 5m
queue_run_delay = 5m
L'étape suivante de la configuration vise la connexion sécurisée à notre serveur mail.
On va donc demander à Postfix de n'accepter que les protocoles et les options les plus sécurisées pour communiquer avec l'extérieur, d'utiliser un certificat Let's Encrypt pour confirmer notre identité sur l'ensemble des ordinateurs des utilisateurs (cette autorité étant reconnues partout ou presque) et d'utiliser le système interne de Dovecot pour assurer la connexion de l'utilisateur qui viendra récupérer son courrier :
smtpd_use_tls=yes
smtpd_tls_auth_only = yes
## Chemin vers le certificat produit par Let's Encrypt
smtpd_tls_cert_file=/etc/letsencrypt/live/votredomaine.xyz/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/votredomaine.xyz/privkey.pem
## Protocoles et méthodes de communication à activer
smtp_tls_security_level = may
smtpd_tls_security_level = may
smtpd_tls_eecdh_grade = strong
smtpd_tls_mandatory_protocols = !SSLv2,!SSLv3,TLSv1,TLSv1.1, TLSv1.2
smtpd_tls_protocols = TLSv1.2, TLSv1.1, TLSv1, !SSLv2, !SSLv3
smtpd_tls_ciphers = high
## Ici on définit ce que contient la liste nommée HIGH comme algorithmes de chiffrement
tls_high_cipherlist = ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
## Activation de Dovecot comme intermédiaire
smtpd_sasl_type=dovecot
smtpd_sasl_path=private/auth
smtpd_sasl_auth_enable = yes
## Option qui permet à certains clients mail de fonctionner correctement
broken_sasl_auth_clients = yes
## D'autres options pour TLS
tls_random_source = dev:/dev/urandom
smtpd_tls_loglevel = 1
smtpd_sasl_security_options = noanonymous, noplaintext
smtpd_sasl_tls_security_options = noanonymous
On renseigne par la suite quelques informations concernant le nom de domaine que nous allons gérer par la suite, les interfaces et adresses sur lesquelles Postfix va écouter les connexions des clients, ainsi que les différents fichiers qui vont nous permettre de retrouver la liste des utilisateurs et des domaines que notre serveur va traiter par la suite grâce à PostfixAdmin.
Dans la liste des adresses IP, on note ainsi les adresses locales (c'est-à-dire les adresses que l'ordinateur utilise pour se connecter à lui-même) et l'adresse IP publique du serveur mail. Cela permet ainsi d'accepter l'envoi du courrier depuis lui-même (pratique pour le logiciel de webmail) et depuis l'adresse IP du serveur (qui sera alors utilisée par les clients mail externes).
myhostname = mail.votredomaine.xyz
mydomain = votredomaine.xyz
myorigin = $myhostname
mydestination = all
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 localhost 176.185.168.51
relay_domains = mysql:/etc/postfix/webmail/mysql_relay_domains_maps.cf, mysql:/etc/postfix/webmail/mysql_relay_alias_domains_maps.cf
relay_recipient_maps = mysql:/etc/postfix/webmail/mysql_virtual_alias_maps.cf, mysql:/etc/postfix/webmail/mysql_virtual_alias_domain_maps.cf, mysql:/etc/postfix/webmail/mysql_virtual_alias_domain_catchall_maps.cf
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
virtual_transport = lmtp:unix:private/dovecot-lmtp
virtual_mailbox_domains = mysql:/etc/postfix/webmail/mysql_virtual_domains_maps.cf
virtual_alias_maps = mysql:/etc/postfix/webmail/mysql_virtual_alias_maps.cf, mysql:/etc/postfix/webmail/mysql_virtual_alias_domain_maps.cf, mysql:/etc/postfix/webmail/mysql_virtual_alias_domain_catchall_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/webmail/mysql_virtual_mailbox_maps.cf, mysql:/etc/postfix/webmail/mysql_virtual_alias_domain_mailbox_maps.cf
Comme nous allons utiliser RSpamd pour vérifier les messages et arrêter ceux qui sont considérés comme des messages indésirables, nous avons besoin d'indiquer à Postfix qu'il doit passer par un service relais avant de délivrer les mails aux utilisateurs. Pour cela, il suffit d'ajouter une section contenant son adresse et les filtres à appliquer aux mails, comme ceci :
# RSpamd
smtpd_milters = inet:127.0.0.1:11332
non_smtpd_milters = inet:127.0.0.1:11332
milter_protocol = 6
milter_mail_macros = i {mail_addr} {client_addr} {client_name} {auth_authen}
milter_default_action = accept
À la fin de notre fichier, on rajoute quelques options pour restreindre les connexions à notre serveur SMTP. Le but principal est d'empêcher d'avoir ce qu'on appelle un relais ouvert (open relay), c'est-à-dire un serveur mail capable d'accepter toutes les connexions et d'envoyer des mails sans aucune restrictions. Sans cela, notre serveur deviendrait rapidement une machine génératrice de spams et il serait rapidement surchargé voire banni par les fournisseurs de mails.
Ici, on n'autorise seulement les comptes locaux, les mails que l'ordinateur s'envoie à lui-même (pour faire des rapports par exemple) et les utilisateurs qui peuvent être authentifiés sur notre machine, à savoir ceux que l'on va créer.
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination
smtpd_data_restrictions = reject_unauth_pipelining
Master.cf
Le fichier master.cf
sert à dire à Postfix quels sont les services qui tournent en arrière-plan. Il fonctionne de manière complémentaire avec `main.cf
et c'est lui qui a le dernier mot sur qui exécute quoi.
Ici, nous allons avant tout décommenter des options pour autoriser l'exécution des processus nécessaires au bon fonctionnement de Postfix et ajouter un peu de sécurité pour éviter les spammeurs et autres petits malins qui essayeraient d'envoyer des mails à travers notre système.
La première étape est de décommenter les lignes concernant smtp
et smtpd
.
Il faut faire attention à un détail : on va décommenter la deuxième ligne commençant par smtpd
. Si jamais elle n'existe pas dans votre fichier, il suffira alors de la recopier dans votre configuration :
#smtp inet n - y - - smtpd
smtp inet n - y - 1 postscreen
-o smtpd_sasl_auth_enable=no
smtpd pass - - y - - smtpd
dnsblog unix - - y - 0 dnsblog
tlsproxy unix - - y - 0 tlsproxy
La deuxième étape consiste à décommenter les lignes de submission
et de smtps
pour activer la couche sécurisée et les échanges chiffrés. On en profite également pour décommenter des options qui forceront la connexion avec TLS ou STARTTLS en fonction de port défini plus haut et qui ajouteront des restrictions pour que seuls les utilisateurs correctement authentifiés puissent envoyer des mails à travers notre serveur :
submission inet n - y - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
# -o smtpd_reject_unlisted_recipient=no
-o smtpd_client_restrictions=permit_sasl_authenticated,reject,permit_mynetworks
# -o smtpd_relay_restrictions=$mua_relay_restrictions
# -o smtpd_sender_restrictions=$mua_sender_restrictions
# -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
# -o smtpd_sender_login_maps=mysql:/etc/postfix/sql/sender-login-maps.cf
# -o smtpd_helo_required=no
# -o smtpd_helo_restrictions=
-o cleanup_service_name=submission-header-cleanup
smtps inet n - n - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_reject_unlisted_recipient=no
-o smtpd_client_restrictions=permit_sasl_authenticated,reject,permit_mynetworks
# -o smtpd_helo_restrictions=$mua_helo_restrictions
# -o smtpd_sender_restrictions=$mua_sender_restrictions
# -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
Démarrer et activer Postfix au démarrage
Une fois notre configuration terminée, on peut alors démarrer Postfix et l'activer au prochain démarrage en lançant les commandes suivantes : sudo systemctl enable postfix && sudo systemctl start postfix
Postfix devrait alors démarrer sans problème et être prêt à envoyer nos mails. La suite va consister à configurer le logiciel en charge de la réception des mails et de leur traitement.