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.
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
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
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êmeletsencrypt
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
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
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
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.
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.
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
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 :
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
À 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
Ensuite il faut cliquer sur le bouton Regénérer les clés
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.
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
La on entre le nom du domaine que l’on veux tester (monserveur.eu) sans le mail. au début.
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.
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.
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
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.
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.
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.
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 »