Ludovic Frank - Développeur indépendant

Mailcow, quand une vachette gère vos e-mails

ionicons-v5-k Ludovic Frank 26 juin 2024
2057 lectures Niveau : intermédiaire

Bonjour, bonjour 🙂,

Merci d'avoir cliqué sur cet article, c'est la photo de vachette qui vous a fait cliquer ?

Alors, oui... je vois ce que vous voulez dire... je me suis lâché sur l'image et sur le titre de cette page... oui non, mais c'est l'été, on se détend là 😛.

Bon, sinon, vous avez déjà géré votre propre serveur e-mail vous ? Moi oui, plusieurs fois dans le passé pour différentes boîtes dans lesquels je suis passé...

Aujourd'hui, on va parler d'une vachette, mais, pas celle d'interville (référence de vieux...), mais d'une autre, qui s'occupe de gérer les e-mails... d'ailleurs vous avez vu comment elle fait sur la photo de cet article 😛.

Ma relation avec l'e-mail

Des débuts difficiles

Tout d'abord j'aimerais vous dire que l'e-mail, ce n’est pas si simple que ça, SPF, DKIM... sont plein de choses à connaître avant de se lancer dans l'aventure... en effet avec le temps et les abus, le protocole a évolué pour empêcher les abus, et autre spam.

En ce qui me concerne, la première fois que j'ai joué avec des serveurs e-mail, c'était à mon adolescence, pour changer, tient... D’ailleurs, j'ai toujours mon domaine "silentmail.fr" sur lequel j'ai toujours une adresse qui traîne.

À l'époque je voulais juste comprendre comment tout ça fonctionne, je me souviens ne rien comprendre aux enregistrements MX, en effet un enregistrement DNS MX veut dire "Mail Exchange", mais il ne prend pas une adresse IP comme valeur, mais un nom de domaine (un A ou un CNAME).

Sauf que moi je comprenais rien, "je veux envoyer des e-mails avec silentmail.fr" alors pour moi le "A" de silentmail, devait être le serveur e-mail... bah en fait, non ! 😛.

Mais, a l'époque, après avoir bien galéré pendant des semaines, j'avais mon serveur e-mail qui fonctionnait, enfin presque... c'est quoi ce truc-là le "grey listing", non, mais aidez-moi, ça s'arrête jamais en fait ! 🤣.

En production, en entreprise

Dans ma petite vie pro, avant d'être 100% freelance, je suis passé par des CDI et notamment, je m'occupais du dev dans la boîte, mais pas que... en fait, toute l'infra c'était moi. On avait plusieurs serveurs en "bare-metal" chez différents hébergeurs français, OVH et Scaleway.

Un jour, en regardant la facture du prestataire e-mail qu'on utilisait (je sais plus c'était lequel), on se rend compte que les coûts explosent assez vite et donc on me demande si je ne peux pas faire une solution plus économique...

À l'époque je ne veux pas trop me prendre la tête non plus, on a des licences Windows Server et je découvre HMailServer, parfait il fait SMTP, ça me va et surtout, tout est simple, pour rappel dans cette entreprise je gérais tout... donc je ne pouvais pas avoir 100% de mon temps monopolisé par les e-mails.

HMailServer, je l'utilisais surtout pour la partie SMTP (la partie qui s'occupe d'envoyer, relayer les e-mails), en fait il y avait 3 serveurs e-mail, et en frontal, il y avait un HAProxy qui routait les e-mails vers les différents serveurs.

Tout cela a très bien fonctionné pendant des années... et comme vous le savez aujourd'hui je ne suis plus en CDI donc je ne saurais vous dire si l'entreprise utilise encore cette méthode 🙂.

Qu'est-ce qui nous amène à Mailcow aujourd'hui ?

Il faut s'avoir qu'aujourd'hui, les e-mails c'est devenu très centralisé, je dirais qu'il y a trois gros acteurs qui prennent la plus grosse part du gâteau, ces acteurs sont :

  • Google : Avec GSuite pour les entreprises et Gmail pour les particuliers.
  • Microsoft : Avec Microsoft 365 pour les entreprises et Outlook (ancien Hotmail) pour le grand publique.
  • Apple : Avec iCloud pour les particuliers.

Donc, la solution de la plupart des entreprises est de déléguer ça à Microsoft ou Google et se soucier d'autres choses...

Sauf qu'il y a peu, j'ai été sollicité pour créer un serveur e-mail interne pour un client...

Au début, connaissant un peu toutes les problématiques de gestions d'e-mails, j'étais moyen chaud, mais ayant une très bonne relation avec ce client et me disant que si on vient me demander, c'est qu'ils en ont réellement besoin.

Donc, je me remets un peu le nez dans tout ce monde-là, je vois iRedMail, que je connaissais déjà, d'autre petit truc du genre MailInABox...

Et puis, en fouillant, je tombe sur un article de l'hébergeur allemand "Hetzner", je connais cet hébergeur, car j'avais des serveurs Team Fortress 2 chez eux à l'époque ou je m'amusais à coder des plugins pour le moteur source (s'en est passé des trucs dans ma vie de dev hein...).

Je connais le sérieux de cet hébergeur, de ce fait si eux parlent de Mailcow, c'est qu'il faut que j'y jette un œil...

J'ai donc choisi la vachette comme base pour répondre au besoin de cette mission, puis bon, je l'aime bien, moi, Marguerite 😁.

Mailcow, qu'est-ce que c'est ?

Je dirais que Mailcow est un regroupement de logiciels bien connus sous Linux, en plus de ça ils ont rajouté leurs petites surcouches maison pour simplifier l'administration de tout ça...

Pour faire plaisir aux Linuxiens qui lisent cet article, voici quelques logiciels notoires que vous allez instantanément reconnaître.

  • Postfix : Le célèbre serveur SMTP qui s'occupe de relayer les e-mails, quand vous vous connectez pour envoyer un e-mail c'est lui qui va gérer ça pour vous.
  • Dovecot : Le serveur POP et IMAP, c'est lui qui s'occupe de stocker vos e-mails et vos dossiers pour vous les rendre accessibles.
  • ClamAV : L'antivirus open source, il va scanner les e-mails entrant et sortant pour vérifier qu'il n'y a pas de virus
  • ACME : Plus un protocole qu’un logiciel en soit, mais si vous utilisez let's encrypt, alors vous utilisez ce protocole pour générer vos certificats SSL.
  • SOGo : Avant le leader open source des webmail, c'était Roundcube, il devient un peu vieillissant, SOGo propose une interface remise au goût du jour

Cette liste n'est pas exhaustive, mais ça vous donne une idée de quoi il est question et surtout ça permet à nos amis linuxiens de se sentir comme à la maison... 😛

Une utilisation intensive de Docker

Pour fonctionner, notre vachette envoyeuse d'email utilise des conteneurs dockers prêts à l'emploi, cela simplifie tout.

Cependant, même si on utilise Docker avec Mailcow, déployez votre instance sur un serveur qui ne fait que ça, dans le monde de l'hébergement e-mail c'est plutôt recommandé, notamment car le reverse DNS de votre serveur doit bien correspondre au nom de votre serveur...

Installer Mailcow sur votre serveur

Prêt à laisser une vache gérer votre serveur e-mail ? C'est parti.

Prérequis

Pensez à garder votre serveur à jour, dans mon cas j'utilise Ubuntu Pro pour être tranquille pendant 10 ans.

Le cas OVH
Si votre serveur est chez OVH, il vous faudra obtenir une "query key" de chez SpamHaus afin de pouvoir envoyer des requêtes vers leurs services, notamment quand votre serveur recevra des e-mails, il vérifiera que l'IP du serveur émetteur de l'e-mail n'est pas en liste noire.

Sur votre serveur il vous faudra Docker (la version fournie par Ubuntu 24.04 est très bien) et Docker compose, attention avec lui, car il vous faudra au moins la version 2.0 pour que tout fonctionne.

Dans les dépôts d'Ubuntu 24.04 ce n'est pas cette version qui est disponible, bien sûr vous pouvez utiliser les dépôts officiels de Docker, mais, le problème c'est que vous ne bénéficiera plus de la couverture Ubuntu pro dont j'ai parlé ci-dessus.

Dans mon cas, j'ai simplement été cherché le binaire statique que j'ai "poser” sur le système, pour compose, c'est pas très important.

Pour ceux qui se demandent "comment ça posera sur le système", c’est très simple, j'ai été cherché le binaire sur le GitHub.

Puis, je l'ai placé dans un dossier qui est dans mon “$PATH”, puis un petit chmod +x et c'est réglé.

Installation

En suivant la documentation disponible ici, il va falloir passer en "root” sur votre machine avec la commande "sudo su" par exemple.

Une fois en root, ils préconisent de se mettre dans "/opt”, ce qui me convient :

Une fois dans le répertoire de notre mailcow vachette préféré, on exécute le script de config.

À cette étape il va vous demander le nom d'hôte de votre serveur, très important, ce n'est pas le domaine qui enverra les e-mails, mais le nom de votre serveur par exemple "mail.developpeur-freelance.io" et non developpeur-freelance.io.

Également, c'est pendant cette étape qu'il va vous demander votre clef "Spamhaus", sachant que si vous passez cette étape vous pourrez la mettre plus tard dans "mailcow.conf".

Premier lancement de MailCow

Une fois la configuration terminée, il vous suffit d'utiliser la commande docker-compose pour le premier lancement :

Maintenant, il vous reste plus qu'a attendre un peu et a vous rendre sur votre interface d'administration de vachette, a l'adresse HTTPS + votre nom d'hôte, votre certificat SSL sera généré par Let's Encrypt.

Par défaut les identifiants sont admin et le mot de passe est "moohoo", changez vite, pour cela il y a un helper prévu à cet effet dans votre dossier MailCow :

Une fois connecté à votre interface d'administration, prenez le temps de fouiller à droite à gauche, il y a plein de boutons 😁.

interface d'admin de mailcow

Configuration du DNS

l'interface est très claire et je vais pas trop m'attarder dessus, j'attire votre attention sur votre configuration DNS, car là est l'un des gros problèmes des e-mails.

E-mail -> configuration, vous allez pouvoir décider quels domaines vont êtres gérés par ce serveur e-mail, rien de bien compliquez, remplissez les champs de base et c'est régler.

Une fois votre domaine ajouté, il va être temps de cliquer sur le bouton DNS, c'est là qu'il faudra être bien prudent.

Configuration DNS de Mailcow

Ici j'aimerais attirer votre attention sur les lignes "PTR" (non ce n’est pas les royaumes publics de test de World of Warcraft, oui, j’ai placé WoW dans mon article), ces lignes représente votre "reverse DNS", ne cherchez pas a les ajouter dans votre nom de domaine, mais cela se passe plutôt dans l'interface de l'hébergeur qui vous propose votre serveur dédié ou VPS.

Cherchez où changer la "reverse DNS", et il faudra que cette "reverse" soit raccord avec votre "host", c'est pour cette raison que je déconseille de mettre d'autres services sur la même machine.

Maintenant, il ne vous reste plus qu'à créer vos adresses e-mail, la vachette s'occupe de tout 😁.

Bonus : l'API de MailCow

Et oui, on reste un dev ici, et on m'a montré ça juste avant que je publie cet article, si vous allez sur l'URL "/api" de votre instance MailCow, vous allez voir une belle interface Swagger...

API de Mailcow

Ultra pratique si vous voulez créer vos propres interfaces pour vos utilisateurs, par exemple une entreprise peut parfaitement faire créer une adresse e-mail à ses nouveaux membres avec une simple requête HTTP.

Plus qu'à laisser votre imagination faire, d'ailleurs pour voir la doc complète de l'API c'est par ici

Conclusion

Mailcow, ça envoie du Steak ! (Merci Serge pour cette blague)

La configuration d'un serveur e-mail, de base c'est un enfer avec plein de notions à avoir...

J'ai particulièrement apprécié que Mailcow vous prenne par la main, si vous n'y connaissez pas grand-chose vous pouvez vous en sortir, le travail sur cette partie est remarquable, surtout la partie DNS...

Perso pour moi je n'héberge plus mes serveurs e-mail, mais MailCow a gagné sa place de numéro 1 à chaque fois que j'aurais besoin d'un serveur mail.

Passez un très bon été, moi, je reviens en septembre avec plein de nouveaux articles, en attendant, prenez soin de vous 🙂.