mailcow: dockerized est une pile logicielle complète et prête à l’emploi pour héberger votre propre messagerie sur un serveur : MTA (Postfix), boîtes et protocoles (Dovecot), filtrage antispam (Rspamd), antivirus optionnel (ClamAV), interface d’administration web, SOGo (webmail / calendrier / ActiveSync), base MariaDB, Redis, Nginx, etc. Tout est orchestré avec Docker et Docker Compose.
À quoi sert mailcow ?
- Centraliser l’email de votre organisation ou de vos domaines sur une infrastructure que vous contrôlez (pas de boîte « gratuite » partagée avec des règles opaques).
- Gérer domaines, alias, quotas et politiques depuis une interface web unique.
- Bénéficier d’une stack maintenue par la communauté mailcow, avec mises à jour documentées, plutôt que d’assembler manuellement Postfix + Dovecot + spam + webmail.
Important : La messagerie correctement délivrable impose un DNS irréprochable (MX, SPF, DKIM, DMARC), un PTR (rDNS) cohérent avec le nom d’hôte du serveur, et souvent une réputation d’IP saine. Sans cela, même une installation parfaite peut atterrir en spam.
Limites et prérequis officiels (à respecter)
Selon la documentation mailcow — Prepare your system :
| Ressource | Minimum documenté |
|---|---|
| RAM | 6 Gio + 1 Gio de swap (configuration par défaut) |
| Disque | 20 Gio minimum (sans le volume des boîtes mail) |
| CPU | 1 GHz |
| Architecture | x86_64 ou ARM64 |
Non pris en charge pour mailcow : OpenVZ, Virtuozzo, LXC, NAS type Synology/QNAP. Privilégiez un VPS en virtualisation complète (KVM, Hyper-V, ESXi, etc.), par exemple une offre avec 8 Gio de RAM ou plus si plusieurs utilisateurs / ActiveSync.
Vous pouvez alléger la RAM en désactivant des composants lourds dans mailcow.conf (voir plus bas) : SKIP_CLAMD=y, SKIP_FTS=y.
Aucun autre service mail (Postfix/Exim installé sur l’hôte) ne doit occuper les ports 25, 80, 110, 143, 443, 465, 587, 993, 995, 4190. Vérifiez avant installation :
Bashss -tlpn | grep -E -w '25|80|110|143|443|465|587|993|995|4190'
Prérequis DNS (avant de commencer)
Suivez au minimum la documentation DNS mailcow :
- FQDN : choisissez un nom pleinement qualifié pour le serveur, par ex.
mail.votredomaine.tld— ce sera votreMAILCOW_HOSTNAME. - Enregistrement A (et AAAA si IPv6) pointant vers l’IP du VPS pour ce nom.
- MX du domaine pointant vers ce FQDN (avec la bonne priorité).
- PTR (reverse DNS) de l’IP publique : doit correspondre au FQDN du serveur (souvent configuré chez votre hébergeur / registrar IP, pas dans la zone DNS du domaine).
- Après installation : SPF (TXT), DKIM (depuis l’UI mailcow), DMARC (TXT
_dmarc).
Outils de contrôle cités par mailcow : MXToolbox, Mail-tester.
Étape 1 — Paquets système (Debian / Ubuntu)
Conformément à Install mailcow — System Packages :
Bashsudo apt update sudo apt install -y git openssl curl gawk coreutils grep jq
Étape 2 — Docker Engine et Docker Compose v2
mailcow exige Docker ≥ 24.0.0 et Docker Compose ≥ 2.0. La doc recommande le Docker Engine à jour, pas uniquement la version figée des dépôts Debian/Ubuntu.
Installation type Debian/Ubuntu (script officiel Docker) :
Bashcurl -sSL https://get.docker.com/ | CHANNEL=stable sudo sh sudo systemctl enable --now docker
Puis le plugin Compose (commande docker compose, sans tiret) :
Bashsudo apt update sudo apt install -y docker-compose-plugin
Vérifiez :
Bashdocker --version docker compose version
Étape 3 — Cloner mailcow et générer la configuration
La procédure officielle utilise /opt et un umask adapté :
Bash1sudo su 2umask 0022 3cd /opt 4git clone https://github.com/mailcow/mailcow-dockerized 5cd mailcow-dockerized 6./generate_config.sh
Le script vous demande le FQDN (ex. mail.example.com). Il génère mailcow.conf.
Éditez les paramètres si besoin :
Bashnano mailcow.conf
Vérifiez notamment :
MAILCOW_HOSTNAME: doit être le FQDN public du serveur mail.- IPv6 : depuis la version 2025-09, vous pouvez forcer la désactivation si votre hébergeur ou votre réseau ne gère pas IPv6 correctement (évite des pièges documentés de type « open relay » liés au NAT IPv6 Docker) :
BashENABLE_IPV6=false
Après modification IPv6, un redémarrage complet de la pile est requis (voir ci-dessous).
Référence : Disable IPv6.
Étape 4 — Démarrer mailcow
Toujours depuis /opt/mailcow-dockerized :
Bashdocker compose pull docker compose up -d
Accès à l’administration : https://VOTRE_MAILCOW_HOSTNAME/admin
Identifiants par défaut (à changer immédiatement) :
- Utilisateur :
admin - Mot de passe :
moohoo
Source : Installation of mailcow — Starting mailcow.
Sécurisation immédiate après la première connexion
- Changer le mot de passe administrateur dans l’interface (ne conservez jamais
moohoo). - Activer l’A2F (2FA) pour le compte admin : TOTP, WebAuthn ou Yubi OTP — voir la doc officielle Two-Factor Authentication.
- Heure système / NTP : obligatoire pour le TOTP. Vérifiez
timedatectl status(NTP synchronized: yes). Guide : Prepare your system — Date and Time. - HTTPS : utilisez l’accès HTTPS fourni par mailcow ; si vous n’avez pas de proxy inverse, suivez la doc pour la redirection HTTP→HTTPS, par ex. HTTP to 443.
- DKIM / SPF / DMARC : créez la clé DKIM dans l’UI mailcow et publiez les enregistrements TXT indiqués ; complétez SPF et DMARC selon prerequisite-dns.
Pare-feu, UFW et Docker (point critique)
La documentation mailcow avertit : UFW / firewalld sur l’hôte peuvent poser problème avec Docker, car les règles INPUT classiques ne filtrent pas toujours le trafic vers les conteneurs comme on l’imagine. Recommandation officielle : adapter les règles au chaînage Docker (chaîne DOCKER-USER) plutôt que de bloquer aveuglément. Lisez les guides cités par mailcow, par exemple unrouted.io — Docker firewall et la section Firewall & Ports de prerequisite-system.
Ouvrez côté fournisseur / pare-feu réseau au minimum les ports entrants documentés : 25, 80, 110, 143, 443, 465, 587, 993, 995, 4190 (TCP), sauf personnalisation dans mailcow.conf.
Alléger la machine (optionnel)
Dans mailcow.conf (puis recréation / redémarrage des services concernés selon la doc) :
BashSKIP_CLAMD=y SKIP_FTS=y
Référence : tableau Minimum System Resources dans prerequisite-system.
MTU ≠ 1500 (OpenStack, certains clouds)
Si votre réseau impose un MTU réduit, la doc indique d’ajuster le réseau dans docker-compose.yml :
YAMLnetworks: mailcow-network: driver_opts: com.docker.network.driver.mtu: 1450
Voir Install — Troubleshooting MTU.
Mises à jour et maintenance
Utilisez le flux documenté dans le dépôt (script update.sh fourni avec mailcow). Sauvegardez les volumes Docker et le répertoire mailcow-dockerized (notamment mailcow.conf et data/).
Réinitialisation du mot de passe admin
En cas de perte d’accès, mailcow fournit un script (voir Reset Passwords) :
Bashcd /opt/mailcow-dockerized ./helper-scripts/mailcow-reset-admin.sh
Liens utiles (documentation officielle)
Sur un VPS Infrawire, assurez-vous que l’offre correspond aux ressources et au type de virtualisation attendus par mailcow avant de commander ou de migrer.