L’Informaticien Libre

Maîtrisez Linux pour une informatique libre et sans frontières

Mailu : Installer son serveur email personnel

par | Juil 26, 2020 | Tutoriel, Linux, Serveur | 5 commentaires

Contents

Introduction

Mailu est un simple mais néanmoins complet serveur d’email construit avec des images Docker. Tous les logiciels qui composent Mailu sont des logiciels libres, le code source du projet lui même est disponible sur github.

Une grande force de Mailu est son générateur de configuration automatisé qui permets de gagner beaucoup de temps et limiter les risques de se planter. De plus l’interface d’administration du serveur est très bien faite.

Interface d'adminitration Mailu
Interface d’adminitration Mailu

Ce qui nous intéresse ici est comment installer ce bel outil bien sympathique.
Note : dans ce tuto quand je parle du serveur il s’agit de la machine distante sur laquelle sera déployée Mailu, quand je parle du serveur mail là il s’agit de l’ensemble des logiciels fournis par Mailu.

Prérequis

  • Un serveur avec une distribution Linux basée sur Debian (Ubuntu, Mint, …) connecté à internet.
  • Avoir Docker et Docker-compose installés.
  • Avoir un nom de domaine et accès aux paramètres de zone DNS

Configuration de l’assistant Mailu

Ici nous traiterons de l’installation avec docker-compose, il est tout de même bon de noter qu’une installation sur cluster Swarm est aussi disponible.
Le générateur de configuration est disponible ici

Première étape

Configuration de Mailu
Première étape de la configuration de Mailu

Ici, on prend la dernière version de Mailu (1.7 dans notre cas) puis comme précisé ci-dessus on choisi Compose.

Deuxième étape

Deuxième étape de la configuration de Mailu

Ici nous entrons les paramètres de configuration généraux.

Mailu storage path

C’est là que seront accessible les données des différents contenairs Docker. On peut le laisser par défaut, si le fait d’avoir un répertoire /mailu à la racine ne vous dérange pas.
De mon côté j’aime avoir les volumes data dans le même répertoire que le fichier docker-compose.yml , mais pour cela il faudra faire la modification directement dans le fichier, donc pour l’instant on laisse tel quel.

Main mail domain and server display name.

Dans ce champs on entre le nom que le veut donner au serveur de mail, dans l’exemple le nom de domaine est monserveur.eu du coup nommer le serveur mail mail.monserveur.eu est assez logique.

Postmaster local part

Laissons ce paramètre par défaut (admin)

Choose how you wish to handle security TLS certificates

C’est la que l’on définie comment seront gérés les certificats

  • cert Si on gère ses certificats sois même
  • letsencrypt On laisse letsencrypt gérer les certificats (recommandé)
  • mail est similaire à cert sauf que les certificats TLS seront gérés seulement pour les emails (IMAP et SMTP), par pour HTTP (ce paramètre est à utiliser si on est derrière un proxy);
  • mail-letsencrypt est similaire à letsencrypt sauf que les certificats TLS seront générés par letsencrypt seulement pour les emails (IMAP et SMTP), par pour HTTP (ce paramètre est à utiliser si on est derrière un proxy);
  • notls N’utilise pas TLS (à utiliser seulement à des fins de tests)

Si on a seulement le serveur mail sur le serveur ou la VM, je conseil d’utiliser letsencrypt. Si comme moi on gère ses certificats à la main il faut choisir cert

Authentication rate limit (per source IP address)

On laisse par défaut.

Opt-out of statistics

On laisse par défaut, entre autre par ce que je ne sais pas trop à quoi ça sert

Website name

On peut mettre ce qu’on veut l’importance est minime

Linked Website URL

C’est l’URL à laquelle sera accessible l’interface d’adminiostration

Enable the admin UI (and path to the admin UI)

Si on veut l’interface d’administration (ce que je recommande) il faut cocher, le champ qui va apparaitre en dessus c’est le chemin d’accès de cette interface (on laisse par défaut)

Troisème étape

Troisème étape de la configuration de Mailu

Ici on va décider des logiciels / options additionnelle

Enable Web email client (and path to the Web email client)

On choisi si on veut un webmail, je recommande car c’est toujours simpa de pouvoir checker ses mail directement sur internet sans avoir son client lourd installé.
On a le choix entre rouncube et rainloop, je ne vais entrer dans une comparaison parfaitement arbitraire entre ces deux logiciels, perso j’ai pris rouncube mais il parait que rainloop est trè bien aussi.
Le champ qui apparait en dessous du choix est le chemin d’accès au webmail (laisser par défaut)

Enable the antivirus service

Si on veut un antivirus, il faut prêter attention au fait qu’un antivirus prends des ressources (prévoir 1Go de RAM)

Enable the webdav service

Pour ceux qui veulent pouvoir gérer les contacts et agendas avec leur compte email, perso j’utilise nextcloud pour ça donc j’ai laissé décoché.

Enable fetchmail

Pour récupérer automatiquement les mail et les déposer dans la boite, plutôt utile. À cocher

Quatrième étape

Quatrième étape de la configuration de Mailu

Ici ce sont les paramètres réseaux ainsi que le choix de la base de donnée qu’on va renseigner

IPv4 listen address

C’est l’adresse principale de votre serveur, on la trouve en ce connectant dessus, puis avec la commande : ip a ce qui donne quelque chose comme :

Subnet of the docker network

C’est le sous réseau interne à Docker, à priori on mets ce qu’on veut pourvu qu’il n’entre pas en conflit avec un déjà existant. Notons tout de même qu’il s’agit d’une adresse de réseau donc en général le dernier octet est à zéro.

Enable IPv6

À moins que de savoir ce qu’on fait, il vaut mieux laisser décoché.

Enable unbound resolver

Si on veut que le serveur mail puisse servir plusieurs nom de domaines, par exemple utilisateur@monserveur.eu et utilisateur@autre-nom-de-domaine.com.

Public hostnames

Là on renseigne les noms de domaines que l’on veut que le serveur mail puisse servir, le domaine principal (mail.monserveur.eu dans l’exemple) en premier. Les différents noms doivent être séparés par des virgules.

Which database back end would you like to use?

  • Sqlite : ne nécessite pas de conteneur Docker supplémentaire bien pour les petits serveur mail
  • Mysql / Mariadb : bien pour les serveur mail moyen à grands
  • Postgresql : bien pour les serveur mail grands à très grands

Configuration sur le serveur

Dans cette partie il faut être connecté au serveur sur lequel on va déployer Mailu.

Une fois l’assistant Mailu correctement renseigné on valide et on arrive sur cette page

Téléchargement des fichiers de configuration de Mailu

Tout d’abord on se place dans le répertoire de travail, moi j’aime bien créer un répertoire nommé containers dans mon home et qui va contenir les différents projets docker, donc j’ai fais pareil avec Mailu.

mkdir -p /home/<user>/containers/mailu/
cd /home/<user>/containers/mailu/

Là il peut télécharger les 2 fichiers de configuration généreusement générés par l’assistant de configuration en faisant un copier-coller des deux lignes wget

docker-compose.yml

Ok maintenant on a 2 fichiers : docker-compose.yml et mailu.env.
Pour commencer on va éditer le fichier docker-compose.yml. Comme je l’ai spécifié au dessus j’aime bien que les volumes des conteneurs Docker soient dans le même répertoire que le fichier docker-compose. Pour cela il suffit d’ajouter un point devant chaque occurrence de /mailu dans tout le fichier.

Extrait du fichier docker-compose.yml

C’est aussi dans ce fichier que l’on peut changer les redirections de ports entre le conteneur et le serveur hôte, par exemple si on a un proxy.

mailu.env

Ensuite on édite le fichier mailu.env qui contient les informations que l’on a renseignées dans l’assistant. C’est dans ce fichier qu’on pourra intervenir si on veut modifier des paramètres de Mailu sans avoir à tout régénérer.

Extrait du fichier mailu.env

Ici il est plus sécurisant (sans être obligatoire) de changer la valeur de SECRET_KEY, pour cela la manière la plus simple est de générer un mot de passe aléatoire avec la commande pwgen 16

commande pwgen

Si pwgen n’est pas installé il suffit de faire

apt install pwgen

Maintenant tout est prêt pour lancer l’installation.

docker-compose up -d

Là les images docker vont se télécharger puis s’installer ça peut prendre du temps.
Une fois cela fini sans erreurs on peut observer les conteneurs qui fonctionnent avec la commande

docker ps -a

Qui devrait donner quelque chose ressemblant à ça :

docker ps

Avant de pouvoir utiliser Mailu la première chose à faire est de définir un mot de passe, voici la commande qui va faire le job : (les valeurs entre <> sont à substituer par les vraies)

docker-compose -p mailu exec admin flask mailu admin admin <mail.monserveur.eu> <PASSWORD>

Si on veut éviter d’enter un mot de passe dans la console on peut mettre un mot de passe bidon et changer ensuite quand on sera loggé à l’UI ce qui ne va pas tarder.

L’interface graphique

Si tout c’est bien passé on peut maintenant se connecter à l’UI de Mailu en entrant dans votre navigateur favori l’URL https://monserveur.eu/admin

Interface de Mailu

À partir de cette interface on peut administrer l’ensemble des paramètres du serveur mail.

Générer les clés pour la zone DNS

La première chose à faire est de générer les clés pour renseigner/créer les bonnes entrées de la zone DNS
Pour cela on va dans la liste des domaines et on clic sur détails

Liste des domaines Mailu

Ensuite il faut cliquer sur le bouton Regénérer les clés

Détail du domaine Mailu

La zone DNS

Une fois qu’on a ces informations il faut aller sur l’interface de gestion du fournisseur de nom de domaine, chez moi c’est OVH, puis on édite la zone DNS afin de créer les entrées présentes dans Mailu.

Zone DNS

Là on voit l’entrée de type MX qui pointe vers mail.monserveur.eu qui est un entrée de type A, qu’il faut créer aussi (sa valeur est l’adresse IP du serveur mail).
Deux entrées de type TXT et SPF qui contiennent le même contenu.
L’entrée de type DKIM et enfin une entrée TXT qui contient les informations DMARC

En fonction du fournisseur de nom de domaine les modifications de la Zone DNS peuvent prendre du temps (jusqu’à 24H pour certains) avant d’être prise en compte.

Le reverse proxy

La dernière chose à faire est de changer la valeur du reverse proxy du serveur, pour cela il faut aller sur l’interface de gestion de votre votre fournisseur de serveur. Puis changer la valeur par mail.monserveur.eu

Vérification

Une fois ces opérations effectuées il faut vérifier que tout fonctionne bien. Évidemment la première chose à faire est de ce connecter au webmail (accessible à partir de l’interface) et d’envoyer un mail à une autre adresse mail et d’y répondre.

Il existe un outil qui va tester si le serveur mail répond bien à tous les critères d’acceptabilité : mxtoolbox

MX Toolbox

La on entre le nom du domaine que l’on veux tester (monserveur.eu) sans le mail. au début.

Premier test MX Toolbox

Si tous les tests sont au vert on peut cliquer sur SMTP Test pour avoir les tests plus approfondis. On peut aussi vérifier si l’IP du serveur n’est pas enregistrée en blacklist.

Tests SMTP

Si ici tous les tests sont vert le serveur mail est opérationnel et les mail envoyés à partir de lui auront peu de chance de tomber dans les spams

Conclusion

Clairement installer un serveur email n’est pas une tâche pour un débutant, néanmoins avec quelques connaissances et un peu de débrouillardise on peut, grâce à Mailu dépoyer et héberger son serveur d’email sécurisé sans trop de difficultés.

5 Commentaires

  1. erwolf56

    Bonjour,

    J’ai procédé à l’installation de Mailu sur Ubuntu 18.04. sans erreurs.
    J’ai cependant deux erreurs
    1) mon site est inatteignable avec l’adresse du web du site
    2) en local, Nginx m’affiche une erreur 403 « Forbidden » lorsque j’essaie de me connecter en admin

    Merci de votre aide
    Erwolf56

    Réponse
    • Olivier Munier

      Bonjour,

      Difficile de dire avec si peu d’informations.

      1) de quel site s’agit il ? d’un site perso ou de l’interface de mailu ?
      2) Si nginx envoie une erreur 403 c’est qu’il y a un problème de permission, cela peut être dû aux droits des fichiers (mais avec docker c’est peu probable) ou à un port mal redirigé dans le fichier de configuration de nginx /etc/nginx/nginx.conf.

      Réponse
  2. John Esteban

    Merci pour cet article qui m’a bien aidé à choisir ma solution d’auto-hébergement de mon service e-mail.

    Petit commentaire sur l’option « Opt-out of statistics » : il me semble relativement évident qu’il s’agit d’explicitement demander à ce que l’utilisation faite de Mailu ne soit pas utilisée à des fins de statistiques.

    À cocher, à mon sens.

    Réponse
  3. gabe

    Bonjour, je trouve MailU tres pratique et je vous remercie énormement pour cet article qui est assez explicite .

    Voici mon problème qui est de deux ordres:

    *** depuis mon serveur, j’ai créer depuis mon serveur quelques domaines mails que j’arrive à gérer sans soucis. Néanmoins je n’arrive pas à avoir sur ces domaines mails un certificat ssl mais seulement un certificat auto-signé, et je voudrais avoir un certificat bien signé par let’s enscrypt. Quoique sur mon domaine principal j’ai bien un certificat ssl

    *** Environnement étant sous docker, une sauvegarde des données de ce serveur est tres recommandé. Avez des pistes pour cela.

    Réponse
    • Olivier Munier

      En effet je n’ai pas abordé l’histoire des certificats avec let’s enscrypt (le logiciel s’appel dehydrated maintenant) car je pense qu’on s’éloigne du sujet, mais faire un article sur ce sujet est dans les tuyaux.
      Mais pour te débloquer :
      – Il faut générer les fichier de certificat pour ton nom de domaine (avec dehydrated donc) et les copier dans le répertoire « répertoire_où_est_ton_docker-compose »/mailu/certs/
      – Le fichier fullchain.pem devra être renommé cert.pem
      – Le fichier privkey.pem devra être renommé key.pem
      – Recharger le nginx du docker la commande doit être quelque chose comme : docker exec « mailu_front » nginx -s reload
      Pense à faire une tâche cron pour régénérer les certificat car ils ont une durée de 3 mois
      Pour la sauvegarde je te conseil de faire une tâche cron qui copie vers un serveur SFTP le contenu du dossier « répertoire_où_est_ton_docker-compose »

      Réponse

Laisser un commentaire

Rejoins la Newsletter

Sois informé directement des nouveautés du site



Merci pour votre inscription