Ceci est une ancienne révision du document !


Paramétrer son propre serveur mail, version 3

Comment ça, version 3 alors que je n'ai jamais fini la 2 ?

C'est comme ça… Le bordel sur l'autre page ne me plaisait pas.

Une partie est liée à des scripts bash/ansibles.

Concernant les domaines :

  • poste.example.org sera le relai mail (ce qu'on paramètre en priorité ici)
  • example.org sera le nom de domaine du mail, avec des adresses en machin@example.org

Installation du système de base

TODO : lvm, lien vers paramétrage des trucs de base.

Vérifier les DNS

C'est définitivement mieux de le faire en amont. Ça laisse le temps que ça se propage et de voir les erreurs. De toute façon, bosser sans vrai nom de domaine va être une belle galère.

Il faut :

  1. Un nom de sous-domaine pour le serveur mail, MX en A et AAAA vers lui depuis le domaine principal.
  2. Un reverseDNS sur la machine.

Quelque chose dans ce genre, dans la zone DNS :

poste.example.org.  IN  A  a.b.c.d
poste.example.org.  IN  AAAA  2001:a::b
example.org.  IN  MX  10 poste.example.org.

Le faire sur ipv6 si possible… Aujourd'hui tous les serveurs devraient le permettre, mais dans les faits, ça dépend entièrement du bon vouloir du fournisseur. Pas évident de savoir en amont, sauf à déjà avoir des machines chez ce fournisseur et accès à l'interface d'administration.

Quand on monte un serveur mail en local, cela dépend du FAI, mais aussi des capacités de la box.

  • Chez OVH, ma box (jamais remplacée et assez vieille) ne permettais pas de faire de l'ipv6, mais l'interface web d'OVH le prenait en compte ; c'est donc sans doute ok à présent ?
  • Chez Free, la box ne le gère pas non plus et ça reste un problème relevé sur les forums en 2026. De toute façon, les IP de Free seront résidentielles, et cela garantit une déliverabilité très mauvaise…

Pour MX, une priorité plus basse veut dire que ce sera choisi en premier. Donc si on a un relai paramétré à 10 et un second à 20, le courrier sera d'abord envoyé à 10. Si plusieurs relais ont le même chiffre, ça sera l'un ou l'autre. On verra dans un autre document comment mettre un relai backup MX (qui permet de récupérer les mails si notre relai principal tombe, et de lui renvoyer quand il revient) ; quand à avoir deux serveurs mails qui peuvent envoyer et recevoir, c'est sacrément plus complexe donc on va laisser ça de côté pour un bon moment1).

Il faut aussi configurer son Reversedns et ça, c'est permis ou non par l'hébergeur (dans l'interface web de gestion de la machine). La machine prend le “nom” du serveur mail.

  • Sur Oneprovider, pas de souci.
  • Depuis OVH telecom, ça se fait aussi, dans la partie telecom justement. Mais autant leur interface web permet ce qu'il faut en ipv6 et ipv4, autant ma box à la maison galère sur la gestion de l'ipv6 (trop vieille…).
  • Chez Free, dans “Ma freebox” sur https://adsl.free.fr, on a l'option “Personnaliser mon reverse DNS”. Cependant, en 2024, cela n'est possible que sur l'ipv4, ce qui posera souci pour la délivrance du mail avec les acteurs qui forcent à l'ipv6 (genre, gmail).

Ensuite, pour tester :

dig +short -x "a.b.c.d" @9.9.9.9
dig +short -x "2001:a::b" @9.9.9.9

L'un et l'autre doivent donner le nom de domaine configuré pour les ip en question. Le “@9.9.9.9” à la fin permet de passer par l'extérieur, si on teste en local sur un ordi local, dig ne retourne rien…

Ports et parefeu

Il faut que certains ports soient accessibles avec internet.

Suivant la configuration, il faut ouvrir ces ports explicitement sur la machine, et potentiellement aussi sur un proxy ou la box avec redirection vers les ports du serveur. On ouvre les ports sur le proxy quand tout le reste est fini… Ça évite d'exposer une machine en cours de paramétrage.

Certains sont non-chiffrés :

  • 25 : SMTP
  • 143 : IMAP
  • 110 : POP (plus vraiment utilisé)

Et d'autres pour les échanges chiffrés :

  • 587 (ou 467) : SMTP ; 587 est “TLS”, 465 est “SSL”.
  • 993 (ou 220) : IMAP, 993 en SSL
  • 995 : POP (SSL)

Et suivant les besoins :

  • 4190 : Sieve
  • 10025 ? : Antivirus ? Vérifier, je ne suis pas sûre de l'intérêt.

En réalité on ne va ouvrir que ceci sur le nftables de la machine : 25, 587, 993, 4190. Oublions POP, l'IMAP en non-chiffré, et préférons SMTP-TLS2).

Avec la config paramétrée dans nftables, ce qu'il faut modifier/surveiller :

  • /etc/nftables.d/30-fight.nft : Protection contre le SMTP/Email Bombing, vérifier si ça ne bloque pas des serveurs légitimes.
  • /etc/nftables.d/40-confperso.nft : Autoriser en entrée 80, 443, 25, 587, 993, 4190 (encore que les deux premiers, uniquement si on a des outils de gestion web sur le serveur même ? mais c'est mon cas…)).
  • /etc/nftables.d/50-output.nft : Autoriser en sortie 25, 465, 587 (TODO : J'ai un petit doute sur SIEVE, on vérifiera…).

/etc/hosts

Vérifier que /etc/hosts a un nom de domaine cohérent (si renseigné) avec notre reversedns. Dans mon cas il avait doublé “poste” ce qui faisait un domaine en “poste.poste.example.org”. Cela créait ensuite des soucis.

Cela donne un fichier de ce genre comme ceci :

/etc/hosts
127.0.0.1       localhost
127.0.1.1       poste.example.org     poste
 
# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Installation des paquets

Configuration classique avec postfix, dovecot, mariadb, et postfixadmin pour gérer graphiquement les détails. Ainsi que phpmyadmin le temps des bidouilles (désactivé ensuite pour réduire les surfaces d'attaque).

Il y a plein de possibilité de panachages. J'ai fait un choix, ça m'aura pris des jours à me décider, plus des jours à adapter… Je vais essayer d'expliquer mais ce qui est fait pour un logiciel, peut s'adapter à un autre.

Aucune solution n'est parfaite ou meilleure. D'autres préféreront un serveur “tout en un” où tout est installé et géré. J'en avais listé quelques uns ici. Mais au final je préfère configurer à ma sauce. Cela me permet d'adapter à certains besoins spécifiques (comme les jokers) et de tourner sur une machine peu puissante.

Utilitaires

Quelques outils pratiques à avoir :

  • swaks : “couteau suisse du mail”, fournit divers utilitaires
  • bsd-mailx : permet de lire/envoyer les mails sur le serveur, en ligne de commande, utile lors des tests.
  • mutt : autre logiciel pour voir les mails, plus “graphique” (mais en console), et pratique aussi à d'autres moment. Voir ma doc associée en cas de souci.
  • certbot : le certificat SSL sera géré avec certbot, classique et fonctionnel.

Mon apt est configuré pour ne pas installer par défaut les recommandés et suggérés, ce qui demande de voir la liste et de compléter au besoin. Ici, à installer en complément pour se simplifier la vie :

sudo apt install swaks mutt shared-mime-info xdg-user-dirs

Mariadb

Mariadb ne sert qu'à stocker les utilisateurs donc très peu de données, sa perfomance ne sera pas un souci. Il sera aussi utilisé par Postfixadmin (cf plus bas).

sudo apt install mariadb-server 

Il n'y a plus besoin de lancer “mysql_secure_installation” sur Debian3) (d'ailleurs remplacé par la commande “mariadb-secure-installation”), par défaut c'est propre.

On peut tout de même se paramétrer un user “superadmin” (avec un autre nom que “root”) et un user pour postfixadmin, ce sera fait.

DB_ROOT_PASS="" 
DB_POSTAL_PASS=""
 
sudo systemctl enable --now mariadb
 
sudo mariadb -u root 
 
-- Configuration admin avec nom dédié
CREATE USER 'superadmin'@'localhost' IDENTIFIED BY '$DB_ROOT_PASS';
GRANT ALL PRIVILEGES ON *.* TO 'superadmin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
 
-- Configuration Postfixadmin
CREATE DATABASE IF NOT EXISTS postfixadmin CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
DROP USER IF EXISTS 'postfixadmin'@'localhost';
CREATE USER 'postfixadmin'@'localhost' IDENTIFIED BY '$DB_POSTAL_PASS';
GRANT ALL PRIVILEGES ON postfixadmin.* TO 'postfixadmin'@'localhost';
 
FLUSH PRIVILEGES;
EXIT;

Postfix

Je fais le choix de Postfix (avec postfix-mysql pour parler à Mariadb) ; aujourd'hui pas mal de gens apprécieront plus Opensmtpd et c'est legit. Pourquoi j'ai finalement pris Postfix ?

  • Énormément plus de tutos, à destination des noobs et des experts, sur tous les cas de figures
  • J'aime la doc plus organique que des manpages
  • En discutant avec des sysadmin connaissant les deux logiciels, leur avis n'est pas absolument tranché en faveur de l'un ou l'autre. Opensmtpd est effectivement considéré comme un challenger pertinent, mais la réputation de difficulté à paramétrer Postfix est un peu usurpée (et je confirme, c'est comme plein de logiciels…).
  • Leur avis est aussi que Postfix est extrêmement puissant. Il permet de faire “tout” (y compris des conneries), c'est sa force et son risque. Opensmtpd est encore jeune et certaines options ne sont pas (encore?) possibles ; ceci dit rien qui bloquera la sysadmin hébergeant du mail familial.

Quand Postfix demande sa configuration, répondre “Site Internet”. Vérifier le nom de domaine, par exemple “poste.example.org”.

sudo apt install postfix postfix-mysql 

Dovecot

Dovecot, tout le monde le plébiscite, et ce n'est pas celui qui m'aura posé de souci.

  • dovecot-mysql : pour communiquer avec mysql et donc partager la même base d'utilisateurs
  • dovecot-imapd : pour utiliser l'IMAP donc obligé
  • dovecot-lmtpd : une fois arrivé sur le serveur, va aiguiller les mails aux bons utilisateurs (MDA)
  • dovecot-managesieved : permet aux utilisateurs de définir leurs règles de filtre.
sudo apt install dovecot-mysql dovecot-imapd dovecot-lmtpd dovecot-managesieved 

Et le reste

redis-server, opendkim etc

sudo apt install redis-server opendkim

Antispam

Rspamd est certes plebiscité mais… j'ai des misères à le faire tourner, et puis ça m'agace qu'il fasse “tout” (je préfère le KISS). Je ne veux pas que si rspamd plante, ça fasse foirer la signature DKIM… La solution Spamassassin+Opendkim est sans doute plus adaptée. Je vais quand même refaire des tests avec les deux et voir. Par ailleurs j'ai fait un test avec Modoboa (tout compris !) et rspamd consommait bien plus de mémoire “à vide” que Spamassassin+Amavis+Opendkim…

La chasse au spam reste donc un point en suspens pour le moment, attendant plus d'expérimentations, mais je vais plutôt vers la solution SpamAssassin.

DMARC

Il faudrait que je gère un chouïa mieux DMARC. C'est paramétré mais :

  • Je n'envoie pas de rapports en retour (c'est une mauvaise pratique, il faudrait que je le fasse)
  • Je n'analyse pas les rapports DMARC reçus (du coup quand il y a un souci, je m'en rends compte tardivement).

Dmarc-srg semble plutôt sympa sur l'analyse des rapports. En bonus, il se connecte en imap donc peut être installé sur une autre machine sans aucun souci.

OpenDmarc (référence sur le sujet) génère les rapports à envoyer aux autres admins. Ça semble une sacré usine à gaz, probablement assez lourd. À voir et tester, mais… jusqu'ici, ne pas envoyer les rapports ne me fait pas “jeter” non plus. Par ailleurs cela demande que les milters aient vérifié SPF et DKIM (ce qui, de toute façon, serait mieux…). Opendkim gère DKIM, pour SPF voir le milter policyd-spf peut-être.

Web

Je vais avoir la surcouche graphique avec Postfixadmin, qui permettra à mes utilisateurs de gérer leurs propres alias et mot de passe.

Il y aura aussi phpmyadmin le temps des bidouilles, mais faut penser à l'enlever à la fin, ça fait une surface d'attaque en moins.

Sécurité

Y'a plus à faire, dans l'absolu autant le paramétrer “là”.

Enfin (parce qu'il est un chouïa pénible sinon)

sudo apt install rkhunter

Snapshot

Refaire un snapshot parce que c'est long d'installer ces logiciels.

sudo lvcreate -L 10g -s -n snap_root_$(date --iso)_logicielsOK /dev/VgPoste/root

 Ce texte est placé sous licence CC0

1)
Faut que les clients aient un seul nom de domaine à renseigner sur leur thunderbird, ce qui veut dire load balancing ou un truc du genre ; on est sur d'autres infra.
2)
Pourquoi ? Je ne sais plus. Ça mérite de vérifier, mais en attendant…
3)
À partir de Trixie.
pratique/informatique/mail/serveur_mail3.1780307726.txt.gz · Dernière modification : 01/06/2026 11:55 de Zatalyz