Installer et configurer un serveur mail sécurisé sous Debian avec Postfix et Dovecot
- Mise à jour le 11 nov. 2025
Dans ce guide, je vais vous montrer comment mettre en place une architecture complète de serveur de messagerie sous GNU/Linux. L’objectif est de pouvoir envoyer et recevoir des e-mails de manière fluide depuis différents appareils — comme Thunderbird sur PC ou Mac, ou encore des clients de messagerie sur smartphone.
Pour ce tutoriel, nous utiliserons Debian installée sur un serveur privé virtuel (VPS) hébergé chez OVHcloud 🇫🇷 (aucun partenariat ici — mais je ne dirais pas non à un t-shirt 😄).
Cela dit, même si certaines étapes sont spécifiques à OVHcloud, vous pouvez suivre ce guide avec n’importe quel autre fournisseur de VPS. Il suffit simplement d’adapter la configuration à votre environnement d’hébergement.
Avant de commencer, prenons un instant pour évaluer les avantages et les inconvénients d’héberger votre propre serveur mail. Parmi les points positifs : vous pouvez créer un nombre illimité d’adresses, gérer votre espace de stockage, et rester totalement indépendant des prestataires externes et de leurs évolutions tarifaires. En revanche, l’hébergement d’un tel service implique une responsabilité en matière de sécurité et de maintenance. Il est vivement conseillé d’activer les mises à jour automatiques et de planifier des sauvegardes régulières (la plupart des hébergeurs VPS proposent cette option à faible coût), par exemple à l’aide de rsync. Vous aurez également besoin d’un nom de domaine et d’un VPS ou d’un serveur auto-hébergé à maintenir.
Maintenant que vous connaissez les principaux avantages et contraintes, passons à la phase d’installation.
Voici à quoi ressemblera notre architecture finale :
Comprendre Postfix et Dovecot : comment ils fonctionnent ensemble sur un serveur mail
Pour que notre configuration fonctionne correctement, nous devons installer deux applications essentielles sur notre serveur Debian : Postfix pour le SMTP/SMTPS et Dovecot pour le IMAP/IMAPS.
En résumé, le protocole SMTP (Simple Mail Transfer Protocol) gère l’envoi et le routage des e-mails entre serveurs, tandis que le protocole IMAP (Internet Message Access Protocol) permet aux clients de messagerie d’accéder à leurs boîtes mail et de les synchroniser sur plusieurs appareils.
En plus de gérer la réception des messages, Dovecot assure l’authentification des utilisateurs et peut organiser automatiquement les courriels dans des dossiers. Par exemple, vous pouvez définir une règle pour déplacer tous les messages envoyés à john@std.rocks dans le dossier John.
Postfix et SMTP : envoi d’e-mails depuis votre serveur mail Linux
Lorsque vous envoyez un message depuis votre client SMTP — par exemple Mozilla Thunderbird — celui-ci est d’abord transmis au service Postfix de votre serveur, qui se charge ensuite de l’acheminer jusqu’à sa destination finale.
Dovecot et IMAP : accès et synchronisation sécurisés des boîtes mail
Comme mentionné précédemment, le protocole IMAP est utilisé pour synchroniser les e-mails et les dossiers entre le serveur Dovecot et le client de messagerie. Il permet aux utilisateurs d’accéder à leurs boîtes aux lettres depuis plusieurs appareils tout en conservant la synchronisation en temps réel de tous les messages et dossiers — tels que Boîte de réception, Envoyés ou Brouillons.
Choisir et configurer votre VPS pour un serveur mail Debian
Maintenant que les concepts de SMTP et IMAP sont clairs, concentrons-nous sur l’hébergement de notre serveur de messagerie. Il est possible de le faire tourner depuis votre domicile, mais sachez que de nombreux fournisseurs d’accès à Internet bloquent le port 25 (SMTP), que certaines plages d’adresses IP domestiques sont souvent blacklistées ou mal réputées, et que la gestion du reverse DNS (rDNS) peut s’avérer complexe. En résumé, l’auto-hébergement à la maison est faisable, mais sa mise en place et sa maintenance peuvent être délicates.
Une meilleure option — et celle que nous utiliserons dans ce tutoriel — consiste à héberger votre serveur mail sur un serveur privé virtuel (VPS). Vous pouvez choisir le fournisseur de votre choix et adapter la configuration à vos besoins. Par exemple, chez OVHcloud, un VPS disposant de 4 vCores, 8 Go de RAM et d’un SSD de 75 Go est largement suffisant pour une architecture mail petite à moyenne.
Bien entendu, si vous n’en possédez pas encore, il vous faudra acheter un nom de domaine. Celui-ci servira à configurer les enregistrements DNS de votre serveur mail et à créer des adresses professionnelles telles que utilisateur@votredomaine.com.
À ce stade, vous n’aurez pas besoin de dépenser beaucoup plus — seulement un peu de votre temps. 😉
Configurer les enregistrements DNS : SPF, DKIM, DMARC et rDNS
Aujourd’hui, pour lutter contre le spam (même si certains expéditeurs indésirables y parviennent encore 😅), les principaux fournisseurs de messagerie comme Gmail, Microsoft et d’autres effectuent plusieurs vérifications avant d’accepter les e-mails provenant de serveurs externes. Ces contrôles permettent de confirmer que le serveur expéditeur est bien légitime. Les principaux mécanismes de protection impliqués sont SPF, DKIM et le reverse DNS (rDNS). Dans cette section, je vais vous expliquer le fonctionnement de chacun afin que vous puissiez les configurer correctement sur votre propre serveur mail.
Pré-requis DNS et configuration initiale
Pour commencer, nous devons ajouter quelques entrées DNS afin que les autres serveurs de messagerie sachent vers quelle adresse IP envoyer les e-mails destinés à notre domaine. Cela implique de créer un enregistrement A pour l’adresse IPv4, un enregistrement AAAA pour l’adresse IPv6 (si disponible) et un enregistrement MX pointant vers notre serveur de messagerie — dans cet exemple, mail.std.rocks.
mail IN A 203.0.113.1: associemail.std.rocksà l’adresse IPv4203.0.113.1.mail IN AAAA 2001:0db8::dead:bee5: associemail.std.rocksà l’adresse IPv62001:0db8::dead:bee5.IN MX 1 mail.std.rocks.: définitmail.std.rockscomme serveur d’échange de courrier (MX) pour le domainestd.rocks.
mail IN A 203.0.113.1
mail IN AAAA 2001:0db8::dead:bee5
IN MX 1 mail.std.rocks.
Depuis votre interface DNS, la configuration devrait apparaître comme suit :
mail.std.rocks.- Sur votre serveur, définissez le nom d’hôte sur
mail:
root@debian:~# hostnamectl set-hostname mail
- Modifiez ensuite le fichier
/etc/hostsafin d’associer le nom d’hôte à votre domaine :
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.1.1 mail.std.rocks mail
- Vérifiez que le fichier
/etc/hostnamecontient bien le nouveau nom d’hôte :
mail
- Enfin, redémarrez votre serveur pour appliquer les changements :
root@debian:~# hostnamectl set-hostname mail
Configurer l’enregistrement SPF pour autoriser votre serveur mail
L’enregistrement SPF (Sender Policy Framework) permet à l’administrateur d’un domaine d’indiquer publiquement quels serveurs de messagerie sont autorisés à envoyer des e-mails en son nom. Ce mécanisme aide les serveurs de réception à vérifier la légitimité des messages entrants et à réduire les risques de spam.
- Ajoutez les entrées suivantes à votre configuration DNS pour autoriser votre serveur de messagerie :
mx: (optionnel) inclut tous les serveurs listés comme MX pour le domaine std.rocks, ici mail.std.rocks.include:mail.std.rocks: (optionnel) autorise explicitement le serveur mail.std.rocks.ip4:203.0.113.1etip6:2001:0db8::dead:bee5: spécifient les adresses IPv4 et IPv6 autorisées à envoyer des e-mails.-all: indique que toutes les autres adresses IP non listées sont interdites et doivent être considérées comme sources de spam.
"v=spf1 mx include:mail.std.rocks ip4:203.0.113.1 ip6:2001:0db8::dead:bee5 -all"
std.rocks.Une fois l’enregistrement SPF créé, votre tableau de bord DNS devrait afficher une entrée similaire à celle-ci :
std.rocks.- Pour vérifier votre configuration SPF (remplacez
std.rockspar votre propre nom de domaine), exécutez la commande suivante :
john@debian:~$ host -t txt std.rocks
std.rocks descriptive text "v=spf1 mx include:mail.std.rocks ip4:203.0.113.1 ip6:2001:0db8::dead:bee5 -all"
Configurer DKIM pour signer et authentifier vos e-mails
Présentation
DKIM (DomainKeys Identified Mail) peut sembler un peu complexe au premier abord, mais son principe est en réalité très simple.
Il permet au serveur d’envoi de signer numériquement chaque message sortant en ajoutant un champ DKIM-Signature dans l’en-tête du courriel, à l’aide d’une clé privée (nous verrons plus loin comment la générer).
Le serveur de réception peut ensuite vérifier l’authenticité du message grâce à la clé publique correspondante, publiée dans les enregistrements DNS du domaine.
Ce couple de clés publique/privée garantit que le message provient bien du domaine autorisé et qu’il n’a pas été altéré pendant sa transmission.
Configuration
- Sur votre serveur, installez OpenDKIM et ses outils :
root@debian:~# apt update && apt install opendkim opendkim-tools
- Générez ensuite votre paire de clés (clé privée et clé publique) :
root@debian:~# sudo -u opendkim opendkim-genkey -D /etc/dkimkeys -d std.rocks -s selector
- Créez le répertoire
/var/spool/postfix/opendkim/avec les bonnes permissions pour l’utilisateuropendkim:
root@debian:~# install -d -m 770 -o opendkim -g opendkim /var/spool/postfix/opendkim/
- Ajoutez l’utilisateur postfix au groupe
opendkim:
root@debian:~# usermod -aG opendkim postfix
- Modifiez le fichier de configuration
/etc/opendkim.confpour définir votre domaine, le sélecteur et les chemins des clés :
Syslog yes
SyslogSuccess yes
Canonicalization relaxed/simple
OversignHeaders From
Domain std.rocks
Selector selector
KeyFile /etc/dkimkeys/selector.private
Socket local:/var/spool/postfix/opendkim/opendkim.sock
UserID opendkim
UMask 007
PidFile /run/opendkim/opendkim.pid
TrustAnchorFile /usr/share/dns/root.key
- Redémarrez le service OpenDKIM afin d’appliquer les modifications de configuration :
root@debian:~# systemctl restart opendkim
- Affichez ensuite le contenu du fichier
/etc/dkimkeys/selector.txtpour consulter votre clé publique. Cette clé sera nécessaire pour créer votre enregistrement DNS DKIM :
root@debian:~# cat /etc/dkimkeys/selector.txt
selector._domainkey IN TXT ( "v=DKIM1; h=sha256; k=rsa; "
"p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlBBJYPEMqBqhBhap27waAwkW4ldwhhzxZErIeOagJSstm1gzExVvVuvRStv+hBk+IIwsNCr5OulWf7nZDThKWzUQs4fo2IBOcijbMcET48hgpnRiApKQvyRnxssuAjl9180u13pA3M5D35FYhGT0tNzEZLgI7YMN/nV00rvGT/RlzP7oa/XjcP73Zk+8R9YQhBviqPpHBjPyPK"
"369MP0zgYiVppjVedFive6kR3xciZ1BGbmSyM7tMFqZA3xVgcLtKQNMULdlzO+xz5h7e0u8zQBTPejjuC8fNiEhndbm9kmKIXV3G0PgsFKMd8S0ooH/L6ROM6+3MCrygKBLOcmxwIDAQAB" ) ; ----- DKIM key selector for std.rocks
- Ajoutez l’entrée suivante à votre configuration DNS. Chaque paramètre définit un élément spécifique de l’enregistrement DKIM :
v=DKIM1: indique la version de DKIM utilisée.h=sha256: précise l’algorithme de hachage (SHA-256) employé pour la signature.k=rsa: spécifie le type de clé de chiffrement (RSA).p=: contient votre clé publique générée précédemment.
selector._domainkey IN TXT "v=DKIM1; h=sha256; k=rsa; " "p=PUBLIC_KEY"
- Selon votre fournisseur DNS, la configuration de l’enregistrement DKIM peut légèrement varier. Voici un exemple provenant d’OVHcloud illustrant l’ajout de la clé publique dans la zone DNS :
selector._domainkey, la version v=DKIM1, l’algorithme h=sha256 et la clé publique.- Une fois l’enregistrement enregistré, vous devriez voir la nouvelle entrée DKIM apparaître dans votre tableau de bord DNS, comme illustré ci-dessous :
std.rocks.- Vous pouvez vérifier votre configuration DKIM en interrogeant votre enregistrement DNS (remplacez
std.rockspar votre propre nom de domaine) :
john@debian:~$ host -t host -t TXT selector._domainkey.std.rocks
selector._domainkey.std.rocks descriptive text "v=DKIM1;h=sha256;k=rsa;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlBBJYPEMqBqhBhap27waAwkW4ldwhhzxZErIeOagJSstm1gzExVvVuvRStv+hBk+IIwsNCr5OulWf7nZDThKWzUQs4fo2IBOcijbMcET48hgpnRiApKQvyRnxssuAjl9180u13pA3M5D35FYhGT0tNzEZLgI7YMN/nV00rvGT/RlzP7oa/Xjc" "P73Zk+8R9YQhBviqPpHBjPyPK369MP0zgYiVppjVedFive6kR3xciZ1BGbmSyM7tMFqZA3xVgcLtKQNMULdlzO+xz5h7e0u8zQBTPejjuC8fNiEhndbm9kmKIXV3G0PgsFKMd8S0ooH/L6ROM6+3MCrygKBLOcmxwIDAQAB;t=s;"
Mettre en place DMARC pour protéger votre domaine contre l’usurpation d’e-mails
Présentation
DMARC (Domain-based Message Authentication, Reporting, and Conformance) définit une politique indiquant aux serveurs de messagerie destinataires comment traiter les messages prétendant provenir de votre domaine lorsqu’ils échouent aux vérifications SPF ou DKIM. Même si ces serveurs ne sont pas obligés d’appliquer votre politique, la plupart des grands fournisseurs la respectent. DMARC permet également de spécifier des adresses e-mail de contact pour recevoir des rapports sur les échecs d’authentification ou les tentatives d’usurpation de votre domaine.
std.rocks.Configuration
- Depuis le tableau de bord OVHcloud, vous pouvez ajouter votre enregistrement DMARC. L’interface présente certaines limites — par exemple, elle ne permet pas toujours de personnaliser complètement des paramètres comme l’alignement DKIM. Dans ce cas, passez en mode éditeur de texte pour modifier manuellement l’enregistrement
_dmarcet utilisez la configuration suivante :
_dmarc IN TXT "v=DMARC1;p=quarantine;rua=mailto:dmarc-reports@std.rocks;ruf=mailto:dmarc-fails@std.rocks;sp=reject;aspf=s;adkim=s;"
p=quarantine), les adresses de rapports et l’alignement strict pour SPF et DKIM.- Vous devriez alors voir apparaître cette nouvelle entrée :
std.rocks.- Vous pouvez vérifier votre configuration DMARC en interrogeant votre enregistrement DNS (remplacez
std.rockspar votre propre nom de domaine) :
john@debian:~$ host -t TXT _dmarc.std.rocks
_dmarc.std.rocks descriptive text "v=DMARC1;p=quarantine;rua=mailto:dmarc-reports@std.rocks;ruf=mailto:dmarc-fails@std.rocks;sp=reject;aspf=s;adkim=s;"
Configurer le reverse DNS (rDNS) pour votre serveur mail
Le reverse DNS (rDNS) est un type particulier d’enregistrement DNS qui associe une adresse IP à un nom de domaine. Lorsqu’un serveur de messagerie reçoit un e-mail, il peut effectuer une requête rDNS pour vérifier que l’adresse IP de l’expéditeur correspond bien au nom d’hôte du serveur — dans notre exemple, mail.std.rocks. Cette vérification permet de confirmer la légitimité du serveur et d’éviter que les messages soient considérés comme suspects ou marqués comme spam.
mail.std.rocks).Dans la plupart des cas, la configuration du rDNS (reverse DNS) doit être demandée auprès de votre fournisseur d’adresses IP. Cependant, si vous utilisez un VPS, il est généralement possible de la définir directement depuis le tableau de bord de votre hébergeur. Par exemple, sur OVHcloud, vous pouvez configurer l’entrée reverse DNS depuis l’interface d’administration, comme illustré ci-dessous :
mail.std.rocks.- Vous pouvez vérifier votre configuration rDNS pour vous assurer qu’elle est correcte (remplacez l’adresse IP par la vôtre) :
john@debian:~$ host -t PTR 203.0.113.1
1.113.0.203.in-addr.arpa domain name pointer mail.std.rocks.
Installer et configurer Postfix sur Debian
Maintenant que nos paramètres DNS sont correctement configurés, nous pouvons passer à l’installation de notre serveur SMTP, Postfix ! Pour mieux comprendre son fonctionnement, Postfix écoute sur trois ports différents, chacun ayant un rôle spécifique. Le premier, le port 25/tcp, est utilisé pour la communication entre serveurs de messagerie — par exemple pour recevoir des messages provenant de serveurs externes ou pour délivrer des e-mails vers d’autres domaines. Les deux autres, 465/tcp (TLS implicite) et 587/tcp (STARTTLS), sont réservés aux clients authentifiés, tels que les applications de messagerie ou les appareils mobiles, afin d’envoyer des e-mails de manière sécurisée via notre serveur.
25, 465 et 587 servent respectivement aux serveurs externes et aux clients authentifiés avec chiffrement TLS.Installer Postfix
- Installez le paquet Postfix :
root@debian:~# apt update && apt install postfix
- Lors de l’installation, lorsque le programme vous demande de choisir le type de configuration, sélectionnez l’option Aucune configuration. Cela vous permettra de configurer manuellement Postfix par la suite selon la structure personnalisée de votre serveur de messagerie.
Aucune configuration pour effectuer ensuite une configuration manuelle adaptée à votre serveur mail.Configurer le fichier main.cf de Postfix
- Créez le fichier
/etc/postfix/main.cfet adaptez la configuration avec votre propre nom d’hôte et nom de domaine :
# 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
myhostname = mail.std.rocks
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# See http://www.postfix.org/COMPATIBILITY_README.html -- default to 3.6 on
# fresh installs.
compatibility_level = 3.6
# ---- TLS (server side, SMTP port 25) ----
# Opportunistic TLS on SMTP (port 25). This is the right default for MX traffic.
smtpd_tls_security_level=may
# Self-signed certs for now; swap to Let's Encrypt later.
smtpd_tls_cert_file= /etc/ssl/certs/mail-selfsigned.crt
smtpd_tls_key_file= /etc/ssl/private/mail-selfsigned.key
# Disable legacy protocols; allow TLSv1.2/1.3.
smtpd_tls_protocols = !SSLv2,!SSLv3,!TLSv1,!TLSv1.1
smtpd_tls_mandatory_protocols = !SSLv2,!SSLv3,!TLSv1,!TLSv1.1
# Small, safe TLS hardening and visibility.
smtpd_tls_loglevel = 1
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
# ---- TLS (client side, outbound) -----
smtp_tls_security_level=may
smtp_tls_CApath=/etc/ssl/certs
smtp_tls_loglevel = 1
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# ---- Relay policy ----
# Allow SASL-authenticated users to relay; reject others (prevents open relay).
smtpd_relay_restrictions = permit_sasl_authenticated, reject_unauth_destination
# ---- Local delivery & networking -----
mydestination = $myhostname, localhost.localdomain, localhost
relayhost =
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
# ---- Virtual domains & Dovecot LMTP ----
alias_maps =
alias_database =
virtual_mailbox_domains = std.rocks
virtual_alias_maps = hash:/etc/postfix/virtual
virtual_mailbox_base = /mails/
# IMPORTANT: verify recipients; use a map (hash/sql/ldap) or you'll accept unknown users.
# might be worth activating in the future:
# virtual_mailbox_maps = hash:/etc/postfix/virtual_mailbox
virtual_uid_maps = static:7200
virtual_gid_maps = static:7200
virtual_minimum_uid = 7200
# Hand off mail to Dovecot via LMTP (fast and robust).
virtual_transport = lmtp:unix:private/dovecot-lmtp
# ---- Authentication (SASL via Dovecot) ----
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
# Only allow AUTH over TLS (good hygiene).
smtpd_tls_auth_only = yes
# ---- SMTP hygiene (early rejections reduce spam and load) ----
# Require a proper HELO and do basic sender/recipient sanity checks.
smtpd_helo_required = yes
smtpd_recipient_restrictions =
reject_unauth_pipelining,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination
# Hide user enumeration via SMTP VRFY.
disable_vrfy_command = yes
# ---- DKIM via milter ----
milter_default_action = accept
smtpd_milters = unix:opendkim/opendkim.sock
non_smtpd_milters = $smtpd_milters
# ---- Misc ----
# ~25 MB per message (reasonable default).
message_size_limit = 25480000
Configurer le fichier master.cf de Postfix
Le démon Postscreen agit comme première couche de sécurité pour les connexions de messagerie entrantes. Il écoute sur le port 25/tcp et effectue plusieurs vérifications préliminaires, telles que le contrôle de la réputation de l’adresse IP de l’expéditeur ou la détection d’adresses présentes sur des listes noires. Si toutes les vérifications sont réussies, Postscreen transmet la connexion au démon smtpd pour le traitement SMTP standard.
smtpd.- Modifiez le fichier
/etc/postfix/master.cfpour configurer les services actifs de Postfix :
# ========== Public SMTP (port 25) ==========
smtp inet n - y - 1 postscreen
smtpd pass - - y - - smtpd
#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 (port 587) ==========
submission inet n - y - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_tls_protocols=!SSLv2,!SSLv3,!TLSv1,!TLSv1.1
-o smtpd_sasl_auth_enable=yes
-o smtpd_helo_required=yes
-o milter_macro_daemon_name=ORIGINATING
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
-o smtpd_client_restrictions=
# ========== SMTPS (port 465) ==========
smtps inet n - y - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_tls_protocols=!SSLv2,!SSLv3,!TLSv1,!TLSv1.1
-o smtpd_sasl_auth_enable=yes
-o smtpd_helo_required=yes
-o milter_macro_daemon_name=ORIGINATING
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
-o smtpd_client_restrictions=
- Créez l’utilisateur virtuel
vmailqui sera propriétaire de tous les répertoires et fichiers de messagerie :
root@debian:~# groupadd -g 7200 vmail
root@debian:~# useradd -r -u 7200 -g 7200 -d /mails -m -s /usr/sbin/nologin vmail
- Ajoutez votre nom de domaine dans le fichier
/etc/mailname:
root@debian:~# echo "std.rocks" > /etc/mailname
- Générez un certificat SSL/TLS auto-signé pour sécuriser la transmission des e-mails :
root@debian:~# openssl req -new -x509 -days 365 -nodes \
-out /etc/ssl/certs/mail-selfsigned.crt \
-keyout /etc/ssl/private/mail-selfsigned.key \
-subj "/C=US/ST=Washington/L=Seattle/O=std.rocks/OU=Mail/CN=mail.std.rocks"
root@debian:~# chmod 600 /etc/ssl/private/mail-selfsigned.key
root@debian:~# chown root:root /etc/ssl/private/mail-selfsigned.key
- Créez le répertoire principal
/mails/std.rocksdestiné à stocker toutes les boîtes aux lettres virtuelles, puis appliquez les bons droits d’accès :
root@debian:~# mkdir -p /mails/std.rocks
root@debian:~# chown -R vmail:vmail /mails/std.rocks
Installer et configurer Dovecot sur Debian
Il est maintenant temps d’installer et de configurer Dovecot, qui assurera à la fois les services IMAP et l’authentification des utilisateurs sur notre serveur de messagerie.
Installer Dovecot
- Installez les paquets nécessaires à Dovecot :
root@debian:~# apt update && apt install dovecot-imapd dovecot-lmtpd dovecot-core dovecot-sieve
Configurer Dovecot
- Lors de l’installation de Dovecot, plusieurs fichiers de configuration sont créés par défaut. Pour rendre la configuration plus claire et plus facile à maintenir, vous pouvez supprimer ces fichiers par défaut et créer un seul fichier de configuration centralisant tous les paramètres nécessaires.
root@debian:~# ls /etc/dovecot/conf.d/
10-auth.conf 10-master.conf 15-lda.conf 20-lmtp.conf 90-fts.conf 90-sieve.conf auth-oauth2.conf.ext auth-static.conf.ext
10-logging.conf 10-metrics.conf 15-mailboxes.conf 30-dict-server.conf 90-quota.conf auth-deny.conf.ext auth-passwdfile.conf.ext auth-system.conf.ext
10-mail.conf 10-ssl.conf 20-imap.conf 90-acl.conf 90-sieve-extprograms.conf auth-master.conf.ext auth-sql.conf.ext
root@debian:~# rm /etc/dovecot/conf.d/*
- Créez ensuite le fichier principal de configuration à l’emplacement
/etc/dovecot/conf.d/dovecot.conf:
#/etc/dovecot/conf.d/10-ssl.conf
ssl = yes
# Preferred permissions: root:root 0444
ssl_server_cert_file = /etc/dovecot/private/dovecot.pem
# Preferred permissions: root:root 0400
ssl_server_key_file = /etc/dovecot/private/dovecot.key
ssl_server_dh_file = /usr/share/dovecot/dh.pem
ssl_min_protocol = TLSv1.2
ssl_server_prefer_ciphers = client
#/etc/dovecot/conf.d/10-master.conf
protocols = lmtp imap
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
mode = 0600
user = postfix
group = postfix
}
}
listen = 0.0.0.0
service imap-login {
inet_listener imaps {
port = 993
}
inet_listener imaps-v6 {
port = 64993
ssl = yes
}
}
#Authentification postfix :
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
}
#/etc/dovecot/conf.d/auth-passwdfile.conf.ext
passdb passwd-file {
driver = passwd-file
passwd_file_path = /etc/dovecot/passwd
auth_username_format = %{user | username}
}
userdb passwd-file {
driver = passwd-file
auth_username_format = %{user | username}
passwd_file_path = /etc/dovecot/passwd
}
#sieve
protocol lmtp {
mail_plugins = sieve
}
sieve_script personal {
path = ~/.dovecot.sieve
}
#/etc/dovecot/conf.d/10-mail.conf
mail_driver = maildir
mail_home = /mails/%{user | domain}/%{user | username}
mail_path = %{home}/Maildir
mail_uid = vmail
mail_gid = vmail
# To further reduce iops on the metacache volume when using zlib or mail_crypt; point the dovecot temp directory to a tmpfs volume. Source : https://doc.dovecot.org/configuration_manual/os/
mail_temp_dir = /dev/shm/
- Créez le fichier
/etc/dovecot/passwd, qui contiendra les informations d’authentification des utilisateurs :
root@debian:~# touch /etc/dovecot/passwd
- Appliquez ensuite les bonnes permissions afin de sécuriser ce fichier :
root@debian:~# chown root:dovecot /etc/dovecot/passwd
root@debian:~# chmod 640 /etc/dovecot/passwd
Créer un utilisateur de messagerie
Nous devons d’abord générer un mot de passe chiffré pour notre utilisateur de messagerie. Pour cela, nous allons utiliser la commande doveadm, qui intègre un utilitaire de hachage. Le mot de passe chiffré obtenu sera ensuite ajouté au fichier /etc/dovecot/passwd afin de définir les identifiants de l’utilisateur.
- Utilisez la commande
doveadm pwpour générer le hachage de votre mot de passe (évitez d’utiliser un exemple aussi faible que le mien 😉), puis copiez le hachage obtenu :
root@debian:~# doveadm pw -s ARGON2ID
Enter new password:youWon'tfindMyPassWD
Retype new password:youWon'tfindMyPassWD
{ARGON2ID}$argon2id$v=19$m=65536,t=3,p=1$4IPe7Nj3kTZJ54f5sKnc0Q$1rIsKMMkz5wOeuIWZmHmk+aUBBvtiBAZTFtckKKsnfg
- Modifiez le fichier
/etc/dovecot/passwdet ajoutez la ligne suivante pour créer l’utilisateurjohn@std.rocks:
john:{ARGON2ID}$argon2id$v=19$m=65536,t=3,p=1$4IPe7Nj3kTZJ54f5sKnc0Q$1rIsKMMkz5wOeuIWZmHmk+aUBBvtiBAZTFtckKKsnfg::::::
- Vous remarquerez les
::::::après le mot de passe chiffré. Ces champs sont optionnels, mais voici ce que chacun représente et comment les utiliser :
- username : le nom d’utilisateur — dans cet exemple,
john. - {ARGON2ID}$argon2id : le hachage du mot de passe généré avec la commande
doveadm pw. - UID:GID : (optionnel) les identifiants utilisateur et groupe Unix. Comme nous utilisons un système de messagerie virtuelle, nous pouvons définir
7200:7200. - home : (optionnel) le chemin vers la boîte mail de l’utilisateur, par exemple
/mails/std.rocks/john. - shell : (optionnel) définit le shell de l’utilisateur, si nécessaire.
- extra_fields : (optionnel) permet d’ajouter des paramètres supplémentaires, tels que des quotas. Exemple :
userdb_mail=maildir:/mails/%d/%n, userdb_quota_rule=*:storage=5G.
- Créez le fichier
/etc/postfix/virtualpour définir les alias de messagerie :
root: john@std.rocks
letsencrypt@std.rocks john@std.rocks
root@debian:~# postmap /etc/postfix/virtual
Avant de créer les dossiers IMAP, il est utile de visualiser la correspondance entre les dossiers du client de messagerie — tel que Thunderbird — et la structure des répertoires sur notre serveur mail.
/mails/std.rocks/john correspondent aux boîtes de messagerie dans un client comme Thunderbird.- Une fois la structure des dossiers visualisée, créez le répertoire principal pour l’utilisateur john :
root@debian:~# install -d -m 700 -o vmail -g vmail /mails/std.rocks/john
- Utilisez ensuite la commande
maildirmake.dovecotpour créer la structure Maildir et ses sous-dossiers (Drafts,Sent,TrashetJunk) :
root@debian:~# sudo -u vmail maildirmake.dovecot /mails/std.rocks/john/Maildir
root@debian:~# sudo -u vmail maildirmake.dovecot /mails/std.rocks/john/Maildir/.Drafts
root@debian:~# sudo -u vmail maildirmake.dovecot /mails/std.rocks/john/Maildir/.Sent
root@debian:~# sudo -u vmail maildirmake.dovecot /mails/std.rocks/john/Maildir/.Trash
root@debian:~# sudo -u vmail maildirmake.dovecot /mails/std.rocks/john/Maildir/.Junk
- Redémarrez enfin les deux services afin d’appliquer la configuration :
root@debian:~# systemctl restart postfix.service
root@debian:~# systemctl restart dovecot.service
Sécuriser votre serveur mail avec un certificat SSL Let’s Encrypt
À ce stade, votre serveur de messagerie devrait être pleinement fonctionnel. Nous allons maintenant installer des certificats SSL Let’s Encrypt afin de sécuriser les services SMTPS et IMAPS. Cette méthode est à la fois pratique et permet d’éviter les messages d’avertissement lors des connexions depuis les clients de messagerie.
Générer les certificats SSL Let’s Encrypt
- Installez le paquet
certbot:
root@debian:~# apt update && sudo apt install certbot
- Utilisez ensuite
certbotpour demander vos certificats SSL. Remplacezmail.std.rockspar votre propre domaine de messagerie etletsencrypt@std.rockspar votre adresse e-mail d’administration :
root@debian:~# certbot certonly --standalone -d mail.std.rocks --email letsencrypt@std.rocks --agree-tos --noninteractive
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Requesting a certificate for mail.std.rocks
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/mail.std.rocks/fullchain.pem
Key is saved at: /etc/letsencrypt/live/mail.std.rocks/privkey.pem
This certificate expires on 2026-02-09.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
* Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
* Donating to EFF: https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Intégrer les certificats Let’s Encrypt dans Dovecot et Postfix
- Modifiez le fichier
/etc/postfix/main.cfet mettez à jour les chemins afin d’utiliser les certificats Let’s Encrypt à la place des certificats auto-signés :
# Self-signed certificates (previous configuration)
#smtpd_tls_cert_file = /etc/ssl/certs/mail-selfsigned.crt
#smtpd_tls_key_file = /etc/ssl/private/mail-selfsigned.key
# Let’s Encrypt certificates (active configuration)
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.std.rocks/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.std.rocks/privkey.pem
- Redémarrez ensuite le service Postfix afin d’appliquer la nouvelle configuration SSL :
root@debian:~# systemctl restart postfix.service
- Modifiez également le fichier
/etc/dovecot/conf.d/dovecot.confpour indiquer les chemins vers les fichiers de certificats et de clés Let’s Encrypt :
# Preferred permissions: root:root 0444
#ssl_server_cert_file = /etc/ssl/certs/fullchain.pem
ssl_server_cert_file = /etc/letsencrypt/live/mail.std.rocks/fullchain.pem
# Preferred permissions: root:root 0400
#ssl_server_key_file = /etc/ssl/private/privkey.pem
ssl_server_key_file = /etc/letsencrypt/live/mail.std.rocks/privkey.pem
- Redémarrez enfin le service Dovecot pour charger les certificats mis à jour :
root@debian:~# systemctl restart dovecot.service
Configuration des clients de messagerie
Notre serveur mail est maintenant entièrement opérationnel ! Nous pouvons à présent configurer nos clients de messagerie — tels que Thunderbird sur ordinateur et K-9 Mail sur smartphone — pour se connecter en toute sécurité via IMAP et SMTP.
Thunderbird
Dans la fenêtre de configuration du compte, cliquez sur Configurer manuellement afin de saisir les paramètres du serveur vous-même.
Configurez ensuite le compte avec votre nom d’utilisateur, votre mot de passe et le nom du serveur. Pour IMAP, vous pouvez également utiliser STARTTLS sur le port 143 si vous le souhaitez.
993 avec SSL/TLS et SMTP sur le port 587 avec STARTTLS, en utilisant john@std.rocks comme identifiant.K-9 Mail
Sur Android, vous pouvez utiliser l’application K-9 Mail pour vous connecter à votre serveur de messagerie. Comme pour Thunderbird, remplacez les valeurs d’exemple par vos propres identifiants et paramètres de serveur. Lors de la dernière étape de configuration, associez manuellement les dossiers spéciaux — Envoyés, Brouillons, Indésirables et Corbeille — afin de garantir une synchronisation correcte.
993 avec SSL/TLS, SMTP sur le port 587 avec STARTTLS, et mappage manuel des dossiers spéciaux pour une synchronisation optimale.Félicitations ! 🎉 Vous disposez désormais d’un serveur de messagerie entièrement fonctionnel. Vous pouvez poursuivre votre chemin vers une véritable indépendance numérique en installant un calendrier partagé avec Baïkal sur le même serveur.