*Serveur de messagerie maison avec les normes de sécurité SPF, DKIM, DMARC.
Difficulté : Moyenne
Public cible : Personnes souhaitant auto-héberger leur propre serveur de messagerie à domicile de manière ultra-sécurisée.
Prérequis :
- [ACHAT D’UN SECOND SERVEUR VPS OBLIGATOIRE !] Vous aurez besoin d’un VPS supportant l’envoi d’e-mails. La plupart des services VPS bloquent par défaut le protocole SMTP, c’est pourquoi je vais vous indiquer un fournisseur VPS autorisant le SMTP.
- [VYOS] Il sera nécessaire de configurer un second VPN spécifique pour l’envoi d’e-mail.
- [BlackBox recommandé] Cet article est fortement recommandé dans le cas d’une mise en production via une BlackBox, nous vous recommandons de suivre l’article suivant.
Vous pouvez néanmoins vous passer de la BlackBox mais vous devrez adapter une grande partie de cet article. - [Nom de domaine] Si vous possédez plusieurs noms de domaine, cela ne pose aucun problème. Toutefois, un nom de domaine principal sera utilisé pour la création du serveur de messagerie. Il est donc essentiel de choisir un nom de domaine fiable, régulièrement renouvelé et dédié spécifiquement à vos e-mails. Une fois configuré, il est difficile de changer de nom de domaine, car cela impliquera de modifier l’intégralité de la configuration. Pour les adresses e-mail que vous comptez partager dans la vie réelle, privilégiez un nom de domaine facilement prononçable, simple à écrire et professionnel. Imaginez-vous en train de communiquer votre adresse à un professionnel. Par exemple, « facile.fr » serait un choix idéal, tant par sa simplicité que par sa praticité. De plus, il ne divulgue aucune information personnelle directe vous concernant, en cas de fuite rien ne pointe vers vous.
Les technologies utilisées sont ultra-résilientes. Vous bénéficierez de mises à jour automatiques : à chaque redémarrage de la stack Docker, le système vérifiera que vous disposez bien de la dernière version. Une fois la configuration terminée, vous n’aurez plus rien à faire (hormis des sauvegardes si vous souhaitez conserver vos e-mails).
Technologies utilisées :
Sécurité de la messagerie :
- SPF : Pour Sender Policy Framework, est une norme de vérification du nom de domaine de l’expéditeur d’un courrier électronique, normalisée. L’adoption de cette norme est de nature à réduire le spam
- DKIM : Pour DomainKeys Identified Mail, est une norme d’authentification fiable du nom de domaine de l’expéditeur d’un courrier électronique. Elle constitue une protection efficace contre le spam et le phishing. En effet, DKIM fonctionne par signature cryptographique du corps du message ou d’une partie de celui-ci et d’une partie de ses en-têtes.
- DMARC : Pour Domain-based Message Authentication, Reporting, and Conformance est une spécification technique créée par un groupe d’organisations qui souhaite aider à réduire l’usage abusif des courriels, tels que le spam, l’hameçonnage, en proposant une solution de déploiement et de surveillance des problèmes liés à leur authentification.
Technologie de la messagerie :
- IMAP : Pour Internet Message Access Protocol, est un protocole(avec POP3) qui permet d’accéder à ses courriers électroniques directement sur les serveurs de messagerie, il permet donc la consultation de vos messages (POP3 ne sera pas utilisé dans cet article, car considéré comme obsolète.).
- SMTP : Simple Mail Transfer Protocol est un protocole de communication utilisé pour transférer le courrier électronique vers les serveurs de messagerie électronique. SMTP est un protocole assez simple
Stack logicielle :
- POSTFIX : Postfix est un serveur de messagerie électronique(MTA). Il se charge de la livraison de courriers électroniques(SMTP) et a été conçu comme une alternative plus rapide, plus facile à administrer et plus sécurisée que d’autres serveurs de messagerie.
- DOVECOT : Dovecot est un serveur IMAP et POP3, conçu avec comme premier but la sécurité.
- RSPAMD : rspamd est un logiciel libre d’antispam, qui remplace Amavis et Spamassassin. Il est également capable de signer les e-mails sortants avec des clés DKIM. L’état de Rspamd peut être surveillé via une interface Web simple.
- Snappymail : Client de messagerie web simple, moderne, léger et rapide basé sur rainloop. Supporte les méthodes d’authentification fortes comme l’OTP.
- Fail2ban : Il s’agit de la protection contre les attaques par force brute. Outil de prévention d’intrusion qui analyse les logs en temps réel et bannit automatiquement les IP suspectes en modifiant les règles du pare-feu (iptables/nftables).
Acronymes (pour comprendre de quoi on parle) :
- MTA : Pour Mail Transfer Agent, également Message Transfer Agent (« agent de transfert de message »), est un logiciel pour serveur de transmission de courriers électroniques.
- FQDN.TLD : Pour Fully Qualified Domain Name, en français « nom de domaine complètement qualifié » (où : « nom de domaine complet »). Le FQDN est l’adresse absolue d’un site Internet, c’est le nom de domaine. « Entièrement qualifié » fait référence à une identification unique garantie par le fait que tous les niveaux de domaine sont indiqués. Le TLD est le « TOP level domain », il s’agit simplement de l’extension du domaine sélectionné (.fr, .com, etc.).
- MX : MX pour Mail eXchanger est un type d’enregistrements du DNS qui associe un nom de domaine à un serveur de messagerie électronique associé à son numéro de préférence.
Certaines technologies de sécurité ne sont pas nécessairement incluses dans cet article :
Création du VPS
Pour mettre en place la plateforme de messagerie, nous devons acheter un VPS qui supporte l’envoi via le protocole SMTP.
Par défaut, la plupart des serveurs bloquent le SMTP pour éviter le spam. Si vous souhaitez vérifier si votre serveur bloque le SMTP, voici une méthode infaillible : connectez-vous à votre serveur et tapez la commande suivante :
telnet gmail-smtp-in.l.google.com 25Voici comment interpréter le résultat :

✓ Dans ce cas, pas de blocage : le serveur vous répond, ce qui indique que vous êtes autorisé à sortir et que vous n’êtes pas bloqué. Vous pouvez envoyer des e-mails avec ce réseau. (Attention : certains réseaux limitent le nombre d’e-mails par minute, veuillez vous renseigner auprès de votre fournisseur.)

❌ Ici, pas de réponse : impossible d’envoyer des e-mails.
Pour trouver un VPS qui autorise l’utilisation du SMTP, rendez-vous sur https://www.hostinger.com/vps ou https://www.hostinger.com/vps-hosting puis choisissez le VPS le moins cher. Pour information, Hostinger possède certaines limitations dans l’envoi d’e-mails, cependant vous ne devriez jamais les atteindre dans le cas d’un home lab (voir les limitations).

Lors de la sélection du VPS, Hostinger vous demandera de choisir un pays et une localisation. Désactivez les options inutiles et choisissez la dernière version de Debian.
Vous ne pouvez pas payer en Bitcoin lors du premier paiement, mais uniquement après qu’un premier paiement ait été effectué par carte de crédit. Pour contourner cela, je vous recommande d’acheter une carte de crédit virtuelle en cryptomonnaie via le service https://coingate.com/gift-cards/rewarble-mastercard (n’hésitez pas à ajouter 5 ou 6 € de plus que le montant final pour disposer d’une marge sur les frais).
Lors de la sélection de la localisation du VPS, choisissez les États-Unis. Ensuite, sélectionnez le serveur qui a la latence la plus faible et démarrez l’installation conformément à la procédure d’installation d’un serveur Debian décrite ici.
Une fois le serveur déployé et surtout votre adresse IP obtenue, passez votre IP au scanner de réputation afin de vérifier si celle-ci se trouve dans des listes noires : https://mxtoolbox.com/blacklists.aspx
Configuration ESXI
Connectez-vous sur VMware ESXi puis, comme indiqué dans l’article initial sur VyOS, créez un nouveau commutateur virtuel et un nouveau groupe de ports qui y sera associé.
Accédez à la section « Mise en réseau », puis « Commutateurs virtuels », et ajoutez un commutateur nommé MX.

Enfin, créez un nouveau groupe de ports « MX » que vous associerez au commutateur virtuel « MX ».

Configuration VPN MX <>VyOS
Connectez-vous à votre VyOS, récupérez la configuration ci-dessous et adaptez-la à votre VPN comme nous l’avons fait dans cet article.
######################################################################## VPN-MX
sudo su
echo "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" > /config/auth/wireguard/wg1/public.key #fichier SERVEUR (wghub.conf)
echo "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" > /config/auth/wireguard/wg1/private.key #fichier client (wgclient_bb.conf)
exit
del interfaces wireguard wg1
set interfaces wireguard wg1 private-key wg1
set interfaces wireguard wg1 peer MX address 'XXX.XXX.XXX.XXX' # IP PUBLIQUE DE VOTRE SERVEUR VPN
set interfaces wireguard wg1 address '172.17.254.10/32'
set interfaces wireguard wg1 peer MX port '42222'
set interfaces wireguard wg1 mtu '1280'
set interfaces wireguard wg1 peer MX allowed-ips '0.0.0.0/0'
set interfaces wireguard wg1 peer MX persistent-keepalive '25'
set interfaces wireguard wg1 peer MX preshared-key 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' #fichier SERVEUR (wghub.conf ou wgclient_bb.conf)
set interfaces wireguard wg1 peer MX pubkey 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' #fichier CLIENT (wgclient_bb.conf)
set protocols static interface-route '172.17.254.0/24' next-hop-interface wg1
commitPremière configuration Cloudflare mail.FQDN.TLD
Sur le panneau d’administration de votre DNS, créez un champ de type « A » nommé « mail » qui pointe vers l’adresse IP de votre serveur Hostinger :

Sur votre VPS Hostinger, tapez la commande suivante en remplaçant FQDN.TLD par votre domaine :
hostnamectl set-hostname mail.FQDN.TLDVérifiez que le domaine est bien enregistré en tapant la commande suivante. Seule la première ligne nous intéresse :
hostnamectlMise en place du serveur de mail sur la Blackbox
Sur votre BlackBox/serveur, créez le serveur MX en suivant l’article ici pensez à bien fixer l’adresse IP du serveur afin qu’elle ne change pas (voir).
Téléchargement du projet
Installez les outils nécessaires :
apt update && apt install -y tcpdump wget curl git chronyClonez le projet docker :
git clone https://github.com/s4dic/mailserver-dockerRendez-vous dans le projet et éditez le :
cd mailserver-dockernano docker-compose.ymlÉditez le fichier docker-compose.yml pour remplacer tous les « # CHANGE ME » par votre domaine ou sous-domaine en fonction (attention à ne pas vous tromper).
Mettre les certificats de votre nom de domaine déjà générés au préalable (via la méthode de votre choix) dans :
docker-data/dms/ssl/
- fullchain.pem et privkey.pem
Démarrage de la stack
Donnez les droits d’exécution aux scripts que nous utiliserons plus tard et démarrez la stack :
cd ~/mailserver-docker
chmod +x generate_dkim_clean.sh mx.sh
docker compose up -dAttendez entre une et deux minutes que le conteneur démarre et passe en « Healthy » :

Il se peut qu’après 3 ou 4 minutes, il ne passe pas en « Healthy ». Vous pouvez toutefois continuer la mise en place des actions. »
Configuration RSPAMD
Pour configurer rspamd, nous allons devoir nous connecter au conteneur puis générer le hash avec une commande spécifique :
docker exec -it mailserver bashGénérez le mot de passe rspamd en remplaçant XXXX par votre mot de passe (évitez les guillemets simples ou doubles).
rspamadm pw -p 'XXXXXXXXXX'Copiez le hash obtenu (ex: $2$…). Éditez ensuite le fichier suivant et renseignez le hash obtenu dans les deux champs spécifiques :
nano docker-data/dms/config/rspamd/worker-controller.incCréation de la première adresse e-mail
La création de la première adresse e-mail va permettre de définir le domaine principal du serveur de messagerie. Il faut donc créer une adresse e-mail qui comporte le domaine renseigné dans le docker-compose. Pour la première adresse e-mail, nous allons créer l’adresse postmaster@, qui pourra être utilisée pour d’autres besoins (par exemple dans le retour des e-mails refusés par votre système de sécurité). Pensez à remplacer FQDN.TLD par votre domaine et CHANGE-ME-PASSWORD par le mot de passe qui sera utilisé pour cette boîte mail.
docker exec -ti mailserver setup email add postmaster@FQDN.TLD 'CHANGE-ME-PASSWORD'Mise en place des DNS
DKIM – Le cœur de la délivrabilité
DKIM (DomainKeys Identified Mail)
La signature cryptographique
– Il ajoute une signature numérique dans les en-têtes de chaque e-mail. Clé publique publiée en DNS, clé privée sur le serveur d’envoi.
Rôle : Empêche l’usurpation d’identité en vérifiant que l’e-mail provient d’un serveur légitime.
Maintenant que le domaine existe, générez la paire de clés DKIM pour tous les domaines (il faut au préalable avoir renseigné tous les domaines).
Exécutez le script suivant qui permet de générer le DKIM avec la commande (celle-ci exécute : docker exec -ti mailserver setup config dkim) :
./generate_dkim_clean.sh
Récupérez le résultat obtenu dans un fichier TXT à part pour ne pas le perdre, nous allons utiliser ces informations.
Juste pour information : le script récupère toutes les clés publiques à mettre dans le DNS de chaque domaine depuis le chemin suivant : cat docker-data/dms/config/opendkim/keys/FQDN.TLD/mail.txt
Configuration de la Zone DNS :
Rendez-vous sur votre hébergeur de domaine, puis créez un nouveau champ TXT avec le nom « mail._domainkey » et collez la valeur obtenue dans la partie « Valeur » du champ « Content » comme ceci :

Explication : Seuls les serveurs listés dans le MX et l’IP de mail.FQDN.TLD peuvent envoyer des e-mails.
Le -all signifie « rejeter tout le reste » (strict).
DKIM signe les e-mails (signature cryptographique).
DMARC – Le coeur de la politique de sécurité
DMARC (Domain-based Message Authentication)
La politique de sécurité :
– S’appuie sur SPF et DKIM pour définir les actions en cas d’échec et fournit des rapports d’analyse.
Rôle : Orchestre SPF/DKIM, dicte la conduite (none/quarantine/reject) et offre une visibilité complète via les rapports.
Ajoutez un champ DNS. Celui-ci indique aux autres serveurs ce qu’ils doivent faire si l’e-mail échoue au SPF ou au DKIM.
Ajoutez un nouveau champ TXT avec le nom suivant :
_dmarcPour la valeur à indiquer, deux choix sont possibles : vous devrez choisir soit la première stratégie, soit la seconde.
Choix 1 : Protection totale sans visibilité
v=DMARC1; p=reject;C’est quoi ?
Configuration ultra-stricte : tous les e-mails non conformes (domaine principal ET sous-domaines) sont systématiquement rejetés.
Avantages :
- Protection maximale immédiate
- Simple à mettre en place
Inconvénients :
- Aucun retour : tu ne sais pas ce qui est bloqué
- Risque de bloquer tes propres e-mails légitimes (si SPF/DKIM mal configurés)
- Impossible de diagnostiquer les problèmes
Quand l’utiliser ?
Uniquement si vous êtes absolument certains que le SPF et DKIM sont parfaitement configurés et testés ce qui sera notre cas ici.
Choix 2 : Protection intelligente avec surveillance
v=DMARC1; p=reject; sp=none; rua=mailto:postmaster@FQDN.TLDC’est quoi ?
- Domaine principal protégé (
p=reject) - Sous-domaines en observation (
sp=none) - Rapports quotidiens pour analyser le trafic
Avantages :
- Visibilité complète : Vous recevrez des rapports XML avec toutes les tentatives d’envoi
- Vous pouvez tester les sous-domaines sans risque
- Détection des usurpations d’identité
- Identification des sources légitimes oubliées (newsletters, CRM, etc.)
Inconvénients :
- Nécessite de traiter/analyser les rapports (utilise des outils comme parsedmarc, dmarcian)
Quand l’utiliser ?
Toujours recommandé pour :
- Nouvelle mise en place de DMARC
- Domaines avec plusieurs sources d’envoi
- Besoin de conformité/traçabilité
Conseil d’expert : Commence avec p=none (monitoring seul). Une fois que vous êtes sûr que tout fonctionne bien après 1 semaine, passe à p=quarantine puis p=reject.
Pour ma part, je suis en « reject ». À vous de choisir la politique à appliquer selon votre préférence :

SPF – Le cœur de l’autorisation d’envoi
Le contrôle d’accès
– Enregistrement DNS (type TXT) listant les serveurs autorisés à envoyer des e-mails pour votre domaine. Rôle : Empêche l’usurpation d’identité en vérifiant que l’e-mail provient d’un serveur légitime.
Créez un nouveau champ de type TXT. Dans le champ « Nom », inscrivez votre domaine sans le sous-domaine :
FQDN.TLDPuis dans le champ « Valeur », inscrivez les paramètres suivants avec l’adresse IP V4 publique de votre VPS :
"v=spf1 mx ip4:XX.XX.XX.XX -all"Résultat :

PTR – Le cœur de la crédibilité du serveur
Contrairement aux autres enregistrements DNS (gérés dans Cloudflare), le PTR se configure directement dans l’interface du VPS, car seul le propriétaire de l’adresse IP peut définir sa résolution inverse.
Importance : Sans PTR correct, les e-mails seront systématiquement classés en spam, même avec des enregistrements SPF/DKIM/DMARC parfaits.
Principe : Seul le propriétaire légitime de l’IP peut définir son PTR (sinon, n’importe qui pourrait usurper l’identité d’une adresse IP).
Rendez-vous sur Hostinger dans les paramètres, puis dans « Adresse IP ». Enfin, inscrivez votre nom de domaine complet : mail.FQDN.TLD dans le PTR de l’IP V4 et V6. Attention : Après avoir renseigné le PTR, Hostinger met du temps à actualiser les modifications.

Vous pouvez néanmoins vérifier que votre PTR est fonctionnel avec la commande suivante (remplacez les XX par l’adresse IP publique de votre VPS) :
dig -x XX.XX.XX.XX +short
Renseignement du champ MX
Ajoutez un enregistrement MX pour que votre domaine soit reconnu.
Créez un champ de type MX, puis dans « Name » renseignez les informations suivantes :
- Name: FQDL.TLD
- Mail serveur renseignez : mail.FQDN.TLD
- Dans TTL laissez auto
- Priorité à : 10

Redirection des flux au travers du VPN
Connectez-vous sur le serveur VPS de mail et créez un script de restauration (à l’emplacement de votre choix).
nano /root/restoreCollez le code suivant et adaptez les lignes 6 et 7 :
wg-quick down wghub
sleep 0.5
wg-quick up wghub
#VPS IP PUBLIQUE
VPS=XX.XX.XX.XX
#IP VYOS CLIENTE VPN WG1
TUNNEL=XX.XX.XX.XX
# === SMTP (25) ===
iptables -t nat -A PREROUTING -p tcp -d $VPS --dport 25 -j DNAT --to-destination $TUNNEL:25
iptables -A FORWARD -p tcp -d $TUNNEL --dport 25 -j ACCEPT
# === SUBMISSION (587) ===
iptables -t nat -A PREROUTING -p tcp -d $VPS --dport 587 -j DNAT --to-destination $TUNNEL:587
iptables -A FORWARD -p tcp -d $TUNNEL --dport 587 -j ACCEPT
# === SMTPS (465) (Nouveau protocole peu utilisé et pas encore pleinement autorisé par les FAI et VPS) ===
iptables -t nat -A PREROUTING -p tcp -d $VPS --dport 465 -j DNAT --to-destination $TUNNEL:465
iptables -A FORWARD -p tcp -d $TUNNEL --dport 465 -j ACCEPT
# === IMAP (143) ===
iptables -t nat -A PREROUTING -p tcp -d $VPS --dport 143 -j DNAT --to-destination $TUNNEL:143
iptables -A FORWARD -p tcp -d $TUNNEL --dport 143 -j ACCEPT
# === IMAPS (993) ===
iptables -t nat -A PREROUTING -p tcp -d $VPS --dport 993 -j DNAT --to-destination $TUNNEL:993
iptables -A FORWARD -p tcp -d $TUNNEL --dport 993 -j ACCEPT
#restore docker
sleep 10
docker-compose -f /root/reverseproxy/docker-compose.yml up -d #nous ne l'avons pas encore à ce stade de l'article mais il sera utilisé plus loinsRendez le script exécutable :
chmod +x restoreExécutez le script :
./restoreIl faut maintenant ajouter ce script au crontab (planificateur de tâches Linux).
Si crontab vous demande quel éditeur choisir, sélectionnez « nano » avec l’option n° 1.
crontab -eAjoutez tout en bas du crontab l’option permettant d’exécuter le script à chaque redémarrage :
@reboot /root/restore
Thunderbird – Vérification du fonctionnement des e-mails
À partir de maintenant, nous devons tester le bon fonctionnement du serveur de mail.
Téléchargez et installez le client de messagerie Thunderbird.
Ajoutez un nouveau compte de messagerie avec les informations suivantes :
Récapitulatif des ports :
IMAP : 993 - SSL/TLS
SMTP : 587 - STARTTLS

Cliquez sur « Re-test » puis sur « Done » lorsque cela passe au vert.
Une fois la boite mail configuré cliquez sur le bouton de Thunderbird pour écrire un nouveau mail.
Afin d’évaluer la conformité de votre messagerie écrivez exactement les informations que je vais vous fournir :
- Sujet du mail: RE : Facture décembre 2025
- Message : Rendez vous sur cette URL afin de générer du texte latin aléatoire ou Copiez/Collez directement celui-ci :
| Lorem ipsum dolor sit amet. Ut fugit placeat aut expedita quas cum laboriosam omnis in temporibus omnis est consequatur dolor ut veniam deserunt. Qui dolor suscipit et laborum quis sit doloremque quasi aut perferendis nisi ut ipsa nemo cum voluptatum distinctio sit perspiciatis facilis. Et aliquid aliquid est quod Quis rem aliquam laboriosam. Ut commodi autem At quos obcaecati aut debitis omnis et doloremque iure est nisi voluptatum. Et dolorem eligendi qui praesentium provident ut autem magnam! Id unde quaerat in quaerat galisum et voluptate fugit id voluptate ipsum id tempore reiciendis. Aut nihil accusamus At nisi quia eum corporis soluta sit pariatur vitae eos illum dicta nam veritatis error? Eos consequuntur explicabo ad modi aliquid aut quibusdam consequatur sit voluptatem consequatur. Et dolor unde et tempore nemo id consectetur corrupti. Ab omnis Quis in facilis distinctio est consequatur sunt non explicabo similique et deleniti velit a officiis itaque. Sit laboriosam culpa et delectus galisum sit quae quia eum itaque velit eos nisi unde et dicta commodi est nulla corrupti. |
Rendez-vous sur mail-tester ou mailgenius, copiez l’adresse e-mail fournie par le site web et collez-la dans le champ destinataire, puis envoyez l’e-mail. Attendez 3 à 4 secondes et cliquez sur le bouton « Vérifier » pour obtenir votre score de conformité. Cela vous montrera si vous avez tout correctement configuré.
Snappymail – Le Webmail par excellence
Snappymail est le client de webmail. Vous n’êtes pas obligé d’utiliser un client webmail en passant par Thunderbird ou tout autre client lourd de messagerie. Néanmoins, pour ceux que cela intéresserait, voici comment le mettre en place.
Mise en place du reverse proxy
Afin d’accéder à notre interface Snappymail faisant tourner le serveur web, nous allons devoir monter un reverse proxy. Connectez-vous sur votre VPS aux États-Unis et tapez les commandes suivantes :
mkdir reverseproxy && cd reverseproxy/Créons maintenant la structure. Remplacez « FQDN.TLD » par votre domaine :
mkdir -p cert/FQDN.TLDDéposez maintenant vos certificats « fullchain.pem » et « privkey.pem »dans votre dossier cert/FQDN.TLD. (To do: j’écrirai prochainement un article détaillé qui comprendra de nombreux sujets, dont la mise en place du renouvellement automatique des certificats sans aucune prise de tête.)
Nous allons maintenant créer la configuration du reverse proxy :
nano all.confEnfin, collez le code suivant et adaptez tous les « FQDN.TLD » à votre configuration, ainsi que « IP:45621« à l’adresse IP de votre client VPN de messagerie. Ne touchez pas au port : il correspond au port du conteneur Docker de SnappyMail, sauf si vous souhaitez en spécifier un autre.
server {
server_name mail.FQDN.TLD;
location / {
client_max_body_size 50M;
rewrite ^/(.*)$ https://mail.FQDN.TLD/$1 redirect;
}
}
server {
listen 443 ssl;
client_max_body_size 50M;
server_name mail.FQDN.TLD;
ssl_certificate /etc/letsencrypt/live/FQDN.TLD/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/FQDN.TLD/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://IP:45621/;
}
}Attention, ici le panel admin sera exposé. Si vous souhaitez restreindre l’interface uniquement au réseau local, appliquez la modification suivante :
Bashserver { server_name mail.FQDN.TLD; location / { client_max_body_size 50M; rewrite ^/(.*)$ https://mail.FQDN.TLD/$1 redirect; } } server { listen 443 ssl; client_max_body_size 50M; server_name mail.FQDN.TLD; ssl_certificate /etc/letsencrypt/live/FQDN.TLD/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/FQDN.TLD/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; # Bloquer ?admin sur le web if ($args ~* "admin") { return 404; } location / { proxy_pass http://IP:45621/; } }
Nous allons maintenant créer le docker compose :
services:
web:
image: nginx:latest
ports:
- "80:80"
- "443:443"
- "8080:8080"
volumes:
- ./all.conf:/etc/nginx/conf.d/all.conf:ro
- ./cert/FQDN.TLD/fullchain.pem:/etc/letsencrypt/live/FQDN.TLD/fullchain.pem:ro
- ./cert/FQDN.TLD/privkey.pem:/etc/letsencrypt/live/FQDN.TLD/privkey.pem:ro
networks:
- web-network
networks:
web-network:
driver: bridgeDémarrage du reverse proxy :
docker compose up -dÀ partir de maintenant et si tout est bien configurer le reverse proxy devrait devrait renvoyer le flux du reverse proxy dans le VyOS, cependant ci vous essayer de vous connecter sur l’URL vous aurez une erreur, car il faut dire à VyOS de rediriger le port vers le serveur contenant le docker avec snappymail.
Pour faire cela rien de très compliqué, connectez vous à votre blackbox sur le VyOS et passez en mode « conf » :
confAffichez les règles existantes et notez le dernier numéro de règle :
show nat destination ruleNous allons maintenant créer une règle, mais attention : elle ne doit pas écraser une règle précédente. Pour cela, nous allons simplement incrémenter le dernier numéro de règle.
Si votre dernière règle est la règle 15, alors nous allons créer une nouvelle règle 16.
Collez simplement la configuration suivante en prenant soin de changer le numéro 16 de la règle par le vôtre et l’adresse IP par l’adresse IP locale de votre serveur de messagerie :
set nat destination rule 16 destination port '45621'
set nat destination rule 16 inbound-interface 'wg1'
set nat destination rule 16 protocol 'tcp'
set nat destination rule 16 translation address '172.16.XX.XX'
commitOn applique les modifications :
commitTestez maintenant l’accès à votre site en vous rendant sur https://FQDN.TLD/ Si tout fonctionne correctement, vous pouvez sauvegarder la configuration VyOS :
saveExemple de mon résultat (ici, l’interface est déjà configurée) :

Configuration snappymail
Première connexion
Pour commencer à configurer Snappymail, nous devons récupérer le mot de passe par défaut. Pour ce faire, tapez la commande suivante sur votre serveur de mail (Docker) :
cat /root/mailserver-docker/docker-data/snappymail_data/_data_/_default_/admin_password.txtConnectez-vous maintenant à SnappyMail sur la page web. Attention : pour accéder à l’interface d’administration, il faut ajouter /?admin à la fin de l’URL.
Sur le web :
https://FQDN.TLD/?adminSe rendre sur :
http://IP:45621/?adminConnectez-vous avec le nom du compte est admin
Changez immédiatement le mot de passe.

Configuration du TOTP du compte admin
Nous devons activer immédiatement le TOTP. Attention : votre serveur doit avoir une horloge correcte, sinon vous ne pourrez pas vous connecter.
Rendez-vous dans Security, puis cliquez sur « Generate » pour récupérer votre code TOTP de double authentification.
Vous pouvez ensuite l’utiliser dans votre gestionnaire de mots de passe (vous pouvez consulter notre partie consacrée au TOTP ICI)

Si vous avez des problèmes avec les codes OTP, cela peut venir de l’heure de votre Debian qui est mal synchronisée.
Dans l’interface d’administration, rendez-vous dans Domains > Add Domain. Ne touchez pas aux fichiers de configuration manuellement, tout se fait depuis cette interface.
Enregistrement d’un domaine
Nous allons devoir enregistrer un nouveau domaine. il faudra faire opération sur chaque domaine que vous avez.
Rendez-vous dans « Domains » puis « Add domain ».
Adaptez les paramètres IMAP à votre domaine avec les informations de sécurité suivantes :
- Nom: FQDN.TLD
- Serveur : mail.FQDN.TLD
- Sécurité : SSL/TLS
- Port : 993
- Timeout : 300
- S’assurer que le certificat est utilisé : « OUI »

Les paramètres SMTP :
- Sécurité : SSL/TLS
- Port : 465
- Timeout : 60
- S’assurer que le certificat est utilisé : « OUI »
Cliquez ensuite sur « Test ». La configuration doit passer au vert dans chacun des cercles ci-dessous :

[OPTIONNEL] Si vous souhaitez configurer le tri automatique dans certains dossiers, vous pouvez activer les fonctions SIEVE.

Taille des pièces jointes
Dans Docker, la taille des pièces jointes est déjà définie. Il nous faut définir la même taille dans Snappymail.
Rendez-vous dans « Général » et changez la taille des pièces jointes de 2 Mo à 20 Mo :

Double authentification
Nous allons maintenant activer la double authentification. Elle est configurée par défaut pour le compte admin, mais pas pour les adresses e-mail. Nous allons changer cela.
Rendez-vous dans Extensions, puis téléchargez et activez le plugin « Two Factor Authentication » :

Maintenant que la double authentification est activée, déconnectez-vous de l’interface admin et rendez-vous sur votre URL de connexion normale (sans le /?admin à la fin de votre URL).
Connectez-vous avec une adresse e-mail fonctionnelle, comme la postmaster.
Rendez-vous ensuite dans les paramètres du compte (en haut à droite), puis cliquez sur la dernière option du volet de gauche : « Authentification en deux étapes ».
Cliquez sur « Activer », puis copiez le « Secret » dans votre gestionnaire de mots de passe ou votre application TOTP (Voir).

Cliquez ensuite sur « Test ».
Renseignez le code généré par votre application ou gestionnaire de mots de passe :

Une fois validé, votre TOTP est activé, comme l’indique la coche verte.

Vous pouvez maintenant vous déconnecter puis vous reconnecter à la messagerie pour vérifier le bon fonctionnement :

Annexes
À partir d’ici, il s’agit d’annexes. Les annexes sont optionnelles : vous n’êtes pas obligé de les appliquer, cela dépendra de vos besoins.
Créez un mail pour autre domaine
Vous avez plusieurs domaines et souhaitez utiliser le serveur de messagerie ? Pas de problème ! Notre serveur est multi-domaine.
Je précise que vous n’aurez pas besoin de gérer d’autres certificats.
Commencez par créer une boîte mail avec votre nouveau domaine :
./mx.sh email add postmaster@NEWFQDN.TLDRécupérez maintenant la nouvelle signature DKIM pour ce domaine :
./generate_dkim_clean.shVous devriez voir toutes les signatures.
Configuration des domaines
Rendez-vous sur le gestionnaire DNS de votre domaine secondaire. Vous devrez créer 4 champs pour ce domaine.
Voici les informations à renseigner :
DKIM :
Type : TXT
NOM : mail._domainkey
TTL : Auto
Contenu : collez le contenu obtenu depuis le script generate_dkim_clean.sh
DMARC :
Type : TXT
NOM : _dmarc
Contenu : Appliquez le même contenu que pour votre premier domaine.
SPF: (Remplacez les XX par votre adresse IP)
Type : TXT
NOM : @
Contenu : v=spf1 a mx ip4:XX.XX.XX.XX ~all
MX :
Type : MX
NOM : @
Serveur de messagerie : mail.FQDN.TLD
Durée TTL : Auto
Priorité : 0
Rajout des domaines dans SnappyMail
Dans SnappyMail, retournez dans le panel d’administration.
En local : http://IP:45621/?admin
ou
Avec un nom de domaine : http://mail.FQDN.TLD/?admin
Dans la configuration des domaines, ajoutez un second domaine.
Dans « Name », inscrivez votre nouveau domaine. Les autres paramètres doivent être les mêmes que ceux de votre premier domaine, c’est-à-dire :
IMAP :
Server (il s’agit de votre nom de serveur mail principal) : mail.FQDN.TLD
Attention : mail.FQDN.TLD est le domaine du premier serveur, vous n’avez pas besoin de déclarer le DNS pour cette adresse e-mail.
Require verification of SSL certificate : OUI
Security : SSL/TLS
Port : 993
SMTP :
Server (il s’agit de votre nom de serveur mail principal) : mail.FQDN.TLD
Security : 465
Require verification of SSL certificate : OUI
[OPTIONNEL] Si vous souhaitez configurer le tri automatique dans certains dossiers, vous pouvez activer les fonctions SIEVE.
Protection Fail2Ban
Fail2Ban permet de protéger votre serveur de mail contre les attaques par force brute. Par défaut, le serveur est configuré pour bloquer toutes les attaques après 5 mauvaises tentatives. Les adresses IP bloquées sont débloquées après 1 heure.
Sur Fail2Ban, exécutez la commande suivante pour voir le statut :
docker exec mailserver fail2ban-client status postfixSi besoin, vous pouvez modifier la configuration ici :
docker-data/dms/config/fail2ban-jail.cf
Les logs d’accès sont disponibles ici :
cat docker-data/dms/mail-logs/mail.logReset le compte admin Snappymail
En cas de probleme de connexion au Snappymail via OTP vérifier que l’heure de votre machine est à jour ou si vous avez oublier le code et que vous voulez le reset éditez le fichier suivant :
nano ~/mailserver-docker/docker-data/snappymail_data/_data_/_default_/configs/application.iniCherchez la valeur admin_password et supprimez le champ contenant le mot de passe chiffré. Rafraîchissez la page /?admin (https://FQDN.TLD/?admin). Un nouveau couple admin/password va être généré.
Vous devriez pouvoir lire le nouveau mot de passe avec la commande :
cat /root/mailserver-docker/docker-data/snappymail_data/data/default/admin_password.txtTesteurs de mails
Dans cet article, nous avons vu mail-tester et mailgenius, mais il existe certains testeurs qui vont un peu plus loin et analysent la conformité jusqu’à la conformité DANE. Voici les autres services qui pourraient vous intéresser :
https://mecsa.jrc.ec.europa.eu MECSA est un outil en ligne développé par le Centre commun de recherche (CCR) pour évaluer la sécurité des communications par courriel entre fournisseurs.
https://internet.nl/test-mail/ Ce service prend en charge les normes Internet modernes ci-dessous :
- IPv6 : Accessible via une adresse Internet moderne ?
- DNSSEC : Noms de domaine signés ?
- DMARC, DKIM et SPF : Des marques d’authenticité contre le phishing par e-mail ?
- STARTTLS et DANE : Connexion sécurisée au serveur de messagerie ?
- RPKI : Autorisation de routage
