1. Architecture d'un serveur mail : comprendre les composants

Un serveur mail n'est pas un logiciel unique - c'est un ensemble de pièces qui travaillent ensemble. Avant d'installer quoi que ce soit, il faut comprendre le rôle de chacune :

  • Postfix (MTA - Mail Transfer Agent) : envoie et reçoit les e-mails entre serveurs. C'est la porte d'entrée/sortie de votre serveur mail.
  • Dovecot (MDA - Mail Delivery Agent) : stocke les e-mails reçus et les met à disposition de vos clients mail (Thunderbird, Outlook, votre téléphone) via les protocoles IMAP et POP3.
  • SPF (Sender Policy Framework) : un enregistrement DNS qui indique aux autres serveurs quels serveurs sont autorisés à envoyer des mails pour votre domaine.
  • DKIM (DomainKeys Identified Mail) : une signature cryptographique ajoutée à chaque e-mail pour prouver qu'il vient bien de votre serveur.
  • DMARC : une politique qui indique aux destinataires quoi faire si SPF ou DKIM échouent.
  • Roundcube : un webmail open source - une interface web pour lire et envoyer vos mails depuis un navigateur, comme Gmail.

Flux d'un e-mail entrant :

bash
Serveur distant → Postfix (port 25) → Dovecot → Boîte mail → Roundcube/IMAP

Flux d'un e-mail sortant :

bash
Roundcube → Postfix (port 587) → DKIM signature → Serveur distant

2. Prérequis

Avant de commencer, assurez-vous d'avoir :

  • Un VPS sous Debian 11/12 ou Ubuntu 22.04/24.04
  • Un nom de domaine qui vous appartient (ex: mondomaine.fr)
  • Accès à la gestion des DNS de ce domaine
  • Le port 25 débloqué par votre hébergeur (demandez à CroustyCloud si ce n'est pas le cas - certains hébergeurs le bloquent par défaut contre le spam)
⚠️

Le port 25 est souvent bloqué. La plupart des hébergeurs bloquent le port 25 (SMTP entrant) par défaut pour éviter que leur réseau soit utilisé pour du spam. Vérifiez auprès du support CroustyCloud avant de commencer.

3. Configurer le hostname du serveur

Votre serveur doit avoir un nom d'hôte (hostname) qui correspond à un enregistrement DNS valide. C'est fondamental - un serveur mail sans PTR record valide sera rejeté par la plupart des destinataires.

bash
# Définir le hostname hostnamectl set-hostname mail.mondomaine.fr # Vérifier hostname -f

Mettez à jour /etc/hosts :

bash
nano /etc/hosts
bash
127.0.0.1 localhost VOTRE-IP-VPS mail.mondomaine.fr mail

Dans votre interface DNS, créez ces enregistrements :

bash
Type A : mail.mondomaine.fr → VOTRE-IP-VPS Type MX : mondomaine.fr → mail.mondomaine.fr (priorité 10)

Et demandez à CroustyCloud de configurer le PTR record (reverse DNS) de votre IP vers mail.mondomaine.fr. C'est indispensable.

💡

Pourquoi le PTR record ? Quand votre serveur envoie un mail, le serveur destinataire vérifie que l'IP du serveur envoyeur correspond bien au domaine déclaré. Sans PTR record, vos mails seront systématiquement marqués comme spam ou rejetés.

4. Installer Postfix

bash
apt update apt install postfix -y

L'installation lance un assistant de configuration. Répondez :

  • Type de configuration : Site Internet
  • Nom de messagerie du système : mondomaine.fr (sans le mail.)

Si vous avez raté la configuration, relancez-la :

bash
dpkg-reconfigure postfix

Editez maintenant la configuration principale :

bash
nano /etc/postfix/main.cf

Remplacez tout le contenu par :

bash
# Identité du serveur smtpd_banner = $myhostname ESMTP biff = no myhostname = mail.mondomaine.fr mydomain = mondomaine.fr myorigin = $mydomain # Domaines dont on gère le courrier mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain # Réseau local autorisé à envoyer sans authentification mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 # Où stocker les mails home_mailbox = Maildir/ mailbox_command = # Relayage relayhost = relay_domains = # Limites message_size_limit = 52428800 mailbox_size_limit = 0 # TLS pour les connexions entrantes smtpd_tls_cert_file = /etc/letsencrypt/live/mail.mondomaine.fr/fullchain.pem smtpd_tls_key_file = /etc/letsencrypt/live/mail.mondomaine.fr/privkey.pem smtpd_tls_security_level = may smtpd_tls_auth_only = yes smtpd_tls_loglevel = 1 # TLS pour les connexions sortantes smtp_tls_security_level = may smtp_tls_loglevel = 1 # Authentification SASL (via Dovecot) smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous # Restrictions anti-spam smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination smtpd_helo_restrictions = permit_mynetworks, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname # Aliases alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases

Configurez le fichier master.cf pour activer le port de soumission (587) utilisé par les clients mail :

bash
nano /etc/postfix/master.cf

Décommentez (retirez le #) les lignes du bloc submission :

bash
submission inet n - y - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_tls_auth_only=yes -o smtpd_reject_unlisted_recipient=no -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o milter_macro_daemon_name=ORIGINATING

5. Installer et configurer Dovecot

Dovecot gère le stockage des mails et l'authentification des utilisateurs.

bash
apt install dovecot-core dovecot-imapd dovecot-pop3d -y

Configuration principale :

bash
nano /etc/dovecot/dovecot.conf
bash
protocols = imap pop3 mail_privileged_group = mail

Configuration des emplacements de mails :

bash
nano /etc/dovecot/conf.d/10-mail.conf

Trouvez et modifiez :

bash
mail_location = maildir:~/Maildir

Configuration de l'authentification :

bash
nano /etc/dovecot/conf.d/10-auth.conf
bash
disable_plaintext_auth = yes auth_mechanisms = plain login

Configuration du socket d'authentification partagé avec Postfix :

bash
nano /etc/dovecot/conf.d/10-master.conf

Trouvez le bloc service auth et modifiez-le :

bash
service auth { unix_listener /var/spool/postfix/private/auth { mode = 0660 user = postfix group = postfix } }

Configuration TLS pour Dovecot :

bash
nano /etc/dovecot/conf.d/10-ssl.conf
bash
ssl = required ssl_cert = </etc/letsencrypt/live/mail.mondomaine.fr/fullchain.pem ssl_key = </etc/letsencrypt/live/mail.mondomaine.fr/privkey.pem

6. Obtenir un certificat SSL

Votre serveur mail doit avoir un certificat SSL valide pour que les connexions soient chiffrées et acceptées par les autres serveurs.

bash
apt install certbot -y # Arrêter Nginx si installé (libère le port 80) systemctl stop nginx # Générer le certificat certbot certonly --standalone -d mail.mondomaine.fr # Relancer Nginx systemctl start nginx

Le certificat est valable 90 jours et se renouvelle automatiquement via un timer systemd.

7. Créer des utilisateurs mail

Sous Linux, chaque utilisateur système peut recevoir des mails. Créez un utilisateur pour chaque adresse :

bash
# Créer l'utilisateur adduser contact # Entrez un mot de passe solide # L'adresse mail sera contact@mondomaine.fr

Créez le dossier Maildir pour cet utilisateur :

bash
mkdir -p /home/contact/Maildir/{cur,new,tmp} chown -R contact:contact /home/contact/Maildir chmod -R 700 /home/contact/Maildir

8. Démarrer les services

bash
# Recharger les alias Postfix newaliases # Démarrer et activer les services systemctl restart postfix systemctl restart dovecot systemctl enable postfix systemctl enable dovecot # Vérifier que tout tourne systemctl status postfix systemctl status dovecot

Ouvrez les ports nécessaires dans UFW :

bash
ufw allow 25/tcp # SMTP entrant ufw allow 587/tcp # SMTP soumission (clients mail) ufw allow 993/tcp # IMAPS (IMAP chiffré) ufw allow 995/tcp # POP3S

9. Configurer SPF, DKIM et DMARC

C'est l'étape la plus importante pour que vos mails n'arrivent pas en spam. Ces trois mécanismes sont devenus obligatoires en 2024 - Google et Yahoo les exigent pour tous les envois en masse.

SPF

Ajoutez cet enregistrement TXT dans votre DNS :

bash
Type : TXT Nom : mondomaine.fr (ou @) Valeur: v=spf1 mx a ip4:VOTRE-IP-VPS ~all

Explication :

  • v=spf1 : version du protocole
  • mx : autorise le serveur désigné par le MX à envoyer
  • a : autorise l'IP désignée par l'enregistrement A
  • ip4:VOTRE-IP-VPS : autorise explicitement votre IP
  • ~all : les autres sont suspects (softfail)

DKIM

DKIM signe cryptographiquement vos mails. Installez opendkim :

bash
apt install opendkim opendkim-tools -y

Créez le répertoire et générez les clés :

bash
mkdir -p /etc/opendkim/keys/mondomaine.fr cd /etc/opendkim/keys/mondomaine.fr # Générer la paire de clés (sélecteur "mail") opendkim-genkey -b 2048 -d mondomaine.fr -s mail # Changer le propriétaire chown opendkim:opendkim mail.private

Configurez opendkim :

bash
nano /etc/opendkim.conf
bash
Domain mondomaine.fr KeyFile /etc/opendkim/keys/mondomaine.fr/mail.private Selector mail Socket local:/var/spool/postfix/opendkim/opendkim.sock UMask 002 UserID opendkim Syslog yes LogWhy yes Canonicalization relaxed/simple OversignHeaders From

Créez le socket :

bash
mkdir -p /var/spool/postfix/opendkim chown opendkim:postfix /var/spool/postfix/opendkim

Ajoutez Postfix au groupe opendkim :

bash
adduser postfix opendkim

Activez DKIM dans Postfix (main.cf) :

bash
nano /etc/postfix/main.cf

Ajoutez à la fin :

bash
# DKIM milter_protocol = 6 milter_default_action = accept smtpd_milters = local:opendkim/opendkim.sock non_smtpd_milters = $smtpd_milters

Récupérez votre clé publique DKIM pour la mettre dans votre DNS :

bash
cat /etc/opendkim/keys/mondomaine.fr/mail.txt

Vous verrez quelque chose comme :

bash
mail._domainkey IN TXT ( "v=DKIM1; k=rsa; " "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..." )

Ajoutez cet enregistrement dans votre DNS :

bash
Type : TXT Nom : mail._domainkey.mondomaine.fr Valeur: v=DKIM1; k=rsa; p=VOTRE-CLE-PUBLIQUE

DMARC

Ajoutez cet enregistrement TXT dans votre DNS :

bash
Type : TXT Nom : _dmarc.mondomaine.fr Valeur: v=DMARC1; p=quarantine; rua=mailto:dmarc@mondomaine.fr; pct=100; adkim=s; aspf=s

Explication :

  • p=quarantine : mettre en spam si SPF/DKIM échouent (commencez par none pour observer)
  • rua=mailto:... : adresse qui reçoit les rapports DMARC
  • adkim=s : alignement strict DKIM
  • aspf=s : alignement strict SPF

Redémarrez tous les services :

bash
systemctl restart opendkim postfix

10. Installer Roundcube (webmail)

Roundcube est un webmail open source moderne qui vous permet de lire et envoyer vos mails depuis un navigateur.

bash
apt install roundcube roundcube-mysql -y

L'installeur vous demande :

  • Configurer la base de données : Oui
  • Mot de passe de la base de données : choisissez-en un fort

Configurez Roundcube pour votre serveur :

bash
nano /etc/roundcube/config.inc.php
php
<?php $config['default_host'] = 'ssl://mail.mondomaine.fr'; $config['default_port'] = 993; $config['smtp_server'] = 'tls://mail.mondomaine.fr'; $config['smtp_port'] = 587; $config['smtp_user'] = '%u'; $config['smtp_pass'] = '%p'; $config['product_name'] = 'Webmail MonDomaine'; $config['des_key'] = 'CHAINE-ALEATOIRE-24-CARACTERES'; $config['plugins'] = ['archive', 'zipdownload', 'managesieve'];

Configurez Nginx pour servir Roundcube :

bash
nano /etc/nginx/sites-available/webmail.mondomaine.fr
nginx
server { listen 80; server_name webmail.mondomaine.fr; root /var/lib/roundcube/public_html; index index.php; location / { try_files $uri $uri/ /index.php; } location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/run/php/php8.2-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } # Bloquer l'accès aux fichiers sensibles location ~ ^/(config|temp|logs)/ { deny all; } }
bash
apt install php-fpm -y ln -s /etc/nginx/sites-available/webmail.mondomaine.fr /etc/nginx/sites-enabled/ nginx -t && nginx -s reload # Générer le certificat SSL pour le webmail certbot --nginx -d webmail.mondomaine.fr

Ajoutez l'enregistrement DNS :

bash
Type A : webmail.mondomaine.fr → VOTRE-IP-VPS

11. Tester et vérifier

Test d'envoi

bash
# Envoyer un mail de test en ligne de commande echo "Test" | mail -s "Test serveur mail" votre@gmail.com # Vérifier les logs Postfix tail -f /var/log/mail.log

Test de délivrabilité

Envoyez un mail à mail-tester.com (gratuit) - il analyse votre SPF, DKIM, DMARC et donne un score sur 10. Visez 10/10 avant de considérer votre serveur prêt pour la production.

Vérifier DKIM

bash
# Tester la signature DKIM opendkim-testkey -d mondomaine.fr -s mail -vvv

Vous devez voir key OK à la fin.

Vérifier SPF

Utilisez mxtoolbox.com/spf pour vérifier que votre enregistrement SPF est valide et bien propagé.

🚨

Votre IP est-elle dans une blacklist ? Si votre IP VPS a été utilisée précédemment pour du spam, elle est peut-être listée dans des RBL (blacklists). Vérifiez sur mxtoolbox.com/blacklists et demandez une délistage si nécessaire avant de lancer votre serveur mail.

12. Connexion depuis un client mail

Configurez Thunderbird, Outlook ou votre application mail mobile avec ces paramètres :

bash
Serveur IMAP (réception) Serveur : mail.mondomaine.fr Port : 993 SSL : SSL/TLS Serveur SMTP (envoi) Serveur : mail.mondomaine.fr Port : 587 SSL : STARTTLS Identifiant : contact (votre nom d'utilisateur Linux) Mot de passe: votre mot de passe Linux

Votre serveur mail est opérationnel. Accédez au webmail sur https://webmail.mondomaine.fr. Vérifiez régulièrement vos logs (tail -f /var/log/mail.log) et votre score sur mail-tester.com pour vous assurer que vos mails sont bien délivrés.