mailcow: dockerized est une solution complète pour la gestion de messagerie.
Introduction
Mailcow Dockerized est une solution complète de serveur de messagerie basée sur des conteneurs Docker. Cette approche innovante permet de créer, déployer et gérer facilement un environnement de messagerie complet, tout en bénéficiant des avantages de l’isolation des conteneurs, de la portabilité et de la facilité de mise à l’échelle.
L’architecture Docker permet de découper l’application en petits conteneurs autonomes, chacun exécutant une partie spécifique de Mailcow, comme le serveur SMTP, le serveur IMAP, le service anti-spam, les filtres et bien plus encore. Cette modularité facilite la gestion, les mises à jour et la maintenance de l’ensemble du système de messagerie.
Fonctionnalités
Gestion Complète : Mailcow Dockerized offre une gamme complète d’outils pour gérer les boîtes aux lettres, les domaines, les utilisateurs et les groupes de manière efficace. L’interface d’administration conviviale permet de gérer les paramètres de messagerie, les règles de filtrage, les alias et bien plus encore.
Sécurité Avancée : La sécurité est une préoccupation majeure en matière de messagerie. Mailcow Dockerized intègre des fonctionnalités de sécurité avancées, notamment le chiffrement SSL/TLS, la vérification SPF, DKIM et DMARC, ainsi que des outils anti-spam et anti-phishing.
Collaboration Améliorée : La plateforme prend en charge la synchronisation des contacts, des calendriers et des tâches via les protocoles CalDAV et CardDAV, ce qui facilite la collaboration entre les membres de l’équipe.
Évolutivité et Haute Disponibilité : Grâce à son architecture basée sur des conteneurs Docker, Mailcow peut être facilement mis à l’échelle en fonction des besoins de votre organisation. Vous pouvez déployer plusieurs instances de conteneurs pour garantir une haute disponibilité.
Intégration de Services Externes : Mailcow Dockerized permet l’intégration transparente de services externes tels que Nextcloud pour le stockage et la synchronisation de fichiers.
Source: mailcow: dockerized
Prérequis
Installation de Docker : Avant de commencer, assurez-vous d’avoir Docker installé sur votre serveur. Docker est une plateforme de virtualisation légère qui permet d’exécuter des applications dans des conteneurs isolés.
Configuration de Mailcow : Suivez les instructions fournies par Mailcow pour configurer les paramètres de base, tels que les domaines, les certificats SSL et les utilisateurs.
Gestion et Personnalisation : Utilisez l’interface d’administration de Mailcow Dockerized pour gérer les boîtes aux lettres, les utilisateurs et les paramètres de messagerie. Personnalisez les filtres, les règles de tri et les paramètres de sécurité selon vos besoins.
Mises à Jour Faciles : L’un des avantages de l’utilisation de conteneurs Docker est la facilité de mise à jour. Vous pouvez facilement mettre à jour Mailcow Dockerized en téléchargeant de nouvelles images Docker et en recréant les conteneurs.
Liste des ports réseaux à ouvrir sur l’extérieur
Service | Protocol | Port | Container |
Postfix SMTP | TCP | 25 | postfix-mailcow |
Postfix SMTPS | TCP | 465 | postfix-mailcow |
Postfix Submission | TCP | 587 | postfix-mailcow |
Dovecot IMAP | TCP | 143 | dovecot-mailcow |
Dovecot IMAPS | TCP | 993 | dovecot-mailcow |
Dovecot POP3 | TCP | 110 | dovecot-mailcow |
Dovecot POP3S | TCP | 995 | dovecot-mailcow |
Dovecot ManageSieve | TCP | 4190 | dovecot-mailcow |
HTTP(S) | TCP | 80/443 | nginx-mailcow |
Entrées DNS à mettre en place
Name | Type | Value |
IN A | 1.2.3.4 | |
autodiscover | IN CNAME | mail.domain.com. |
autoconfig | IN CNAME | mail.domain.com. |
@ | IN MX 10 | mail.domain.com. |
@ | IN TXT | “v=spf1 mx a -all” |
dkim._domainkey | IN TXT | “v=DKIM1; k=rsa; t=s; s=email; p=…” |
_dmarc | IN TXT | “v=DMARC1; p=reject; rua=mailto:[email protected]” |
DNS supplémentaires
Name | Type | Priority | Weight | Port | Value |
_autodiscover._tcp | IN SRV | 0 | 1 | 443 | mail.domain.com. |
_caldavs._tcp | IN SRV | 0 | 1 | 443 | mail.domain.com. |
_caldavs._tcp | IN TXT | “path=/SOGo/dav/” | |||
_carddavs._tcp | IN SRV | 0 | 1 | 443 | mail.domain.com. |
_carddavs._tcp | IN TXT | “path=/SOGo/dav/” | |||
_imap._tcp | IN SRV | 0 | 1 | 143 | mail.domain.com. |
_imaps._tcp | IN SRV | 0 | 1 | 993 | mail.domain.com. |
_pop3._tcp | IN SRV | 0 | 1 | 110 | mail.domain.com. |
_pop3s._tcp | IN SRV | 0 | 1 | 995 | mail.domain.com. |
_sieve._tcp | IN SRV | 0 | 1 | 419 | mail.domain.com. |
_smtps._tcp | IN SRV | 0 | 1 | 465 | mail.domain.com. |
_submission._tcp | IN SRV | 0 | 1 | 587 | mail.domain.com. |
Procédure
Pour initier l’installation, dans un shell bash il vous suffit de tapper les commandes suivantes :
Ces commandes sont a éxécuter en root !
cd /opt
git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized
Ensuite, afin de générer la configuration :
./generate_config.sh
Vérifiez que la configuration produite est conforme à vos attentes :
nano mailcow.conf
Lancement de mailcow :
docker compose pull
docker compose up -d
Intégration avec Traefik
Dans le fichier config.yml :
http:
routers:
autodiscover:
entryPoints:
- https
rule: Host(`autodiscover.domain.com`)
middlewares:
- mailcow
tls: {}
service: mail
autoconfig:
entryPoints:
- https
rule: Host(`autoconfig.domain.com`)
middlewares:
- mailcow
tls: {}
service: mail
mail:
entryPoints:
- https
rule: Host(`mail.domain.com`)
middlewares:
- mailcow
tls: {}
service: mail
services:
mail:
loadBalancer:
servers:
- url: "https://[adresse ip locale du serveur]/"
passHostHeader: true
middlewares:
https-redirectscheme:
redirectScheme:
scheme: https
permanent: true
sslheader:
headers:
customRequestHeaders:
X-Forwarded-Proto: https
default-whitelist:
IPAllowList:
sourceRange:
- "10.0.0.0/8"
- "192.168.0.0/16"
- "172.16.0.0/12"
- "173.245.48.0/20"
- "103.21.244.0/22"
- "103.22.200.0/22"
- "103.31.4.0/22"
- "141.101.64.0/18"
- "108.162.192.0/18"
- "190.93.240.0/20"
- "188.114.96.0/20"
- "197.234.240.0/22"
- "198.41.128.0/17"
- "162.158.0.0/15"
- "104.16.0.0/13"
- "104.24.0.0/14"
- "172.64.0.0/13"
- "131.0.72.0/22"
- "2400:cb00::/32"
- "2606:4700::/32"
- "2803:f800::/32"
- "2405:b500::/32"
- "2405:8100::/32"
- "2a06:98c0::/29"
- "2c0f:f248::/32"
crowdsec-bouncer:
forwardauth:
address: http://[adresse ip du bouncedr traefik:port du bouncer]/api/v1/forwardAuth
trustForwardHeader: true
autodetect:
contentType: {}
default-headers:
headers:
frameDeny: false
browserXssFilter: false
forceSTSHeader: true
stsIncludeSubdomains: true
stsPreload: true
stsSeconds: 15552000
customFrameOptionsValue: SAMEORIGIN
default-csp:
headers:
contentsecuritypolicy: "script-src 'self' 'unsafe-inline' 'unsafe-eval' blob: data: wss: https:; img-src 'self' 'unsafe-inline' 'unsafe-eval' blob: data: wss: https:; font-src 'self' 'unsafe-inline' 'unsafe-eval' blob: data: wss: https:; connect-src 'self' 'unsafe-inline' 'unsafe-eval' blob: data: wss: https:; frame-src 'self' 'unsafe-inline' 'unsafe-eval' blob: data: wss: https:; object-src 'self' 'unsafe-inline' 'unsafe-eval' blob: data: wss: https:; media-src 'self' 'unsafe-inline' 'unsafe-eval' blob: data: wss: https:; prefetch-src 'self' 'unsafe-inline' 'unsafe-eval' blob: data: wss: https:; style-src 'self' 'unsafe-inline' 'unsafe-eval' blob: data: wss: https:; child-src 'self' 'unsafe-inline' 'unsafe-eval' blob: data: wss: https:; default-src 'self' 'inline' 'unsafe-inline' 'unsafe-eval' 'blob: data: wss: https:;"
hsts-headers:
headers:
customResponseHeaders:
X-Permitted-Cross-Domain-Policies: none
security-headers:
headers:
customResponseHeaders:
Permissions-Policy: "fullscreen=(*), display-capture=(self), accelerometer=(), battery=(), camera=(), autoplay=(self), vibrate=(self), geolocation=(self), midi=(self), notifications=(*), push=(*), microphone=(self), magnetometer=(self), gyroscope=(self), payment=(self)"
X-Robots-Tag: "none,noarchive,nosnippet,notranslate,noimageindex"
server: ""
via: ""
X-Forwarded-Proto: https
sslProxyHeaders:
X-Forwarded-Proto: https
referrerPolicy: same-origin
hostsProxyHeaders:
- X-Forwarded-Host
customRequestHeaders:
X-Forwarded-Proto: https
inflight-req:
inFlightReq:
amount: 128
rate-limit:
rateLimit:
average: 128
period: 2m
burst: 256
retry-attempts:
retry:
attempts: 8
initialInterval: 1000ms
waf:
plugin:
modsecurity:
modSecurityUrl: http://[adress ip de modsecurity]:[port de modsecurity]
maxBodySize: 10485760
mailcow:
chain:
middlewares:
- https-redirectscheme
- sslheader
- default-whitelist
- crowdsec-bouncer
- autodetect
- default-headers
- default-csp
- hsts-headers
- security-headers
- inflight-req
- rate-limit
- retry-attempts
- waf
Mises à jour
A éxécuter en root !
cd /opt/mailcow-dockerized
./update.sh
Conclusion
Mailcow Dockerized offre une solution moderne, évolutive et sécurisée pour la gestion de la messagerie. Grâce à son architecture basée sur des conteneurs Docker, il est plus facile que jamais de déployer, gérer et mettre à jour un environnement de messagerie complet. Que ce soit pour les entreprises ou les particuliers, Mailcow Dockerized constitue un choix judicieux pour répondre aux besoins de communication d’aujourd’hui et de demain.
Remerciements
- Merci à Uzurka pour toute l’aide apporté à la mise en place de cette stack ! (rôle ansible permettant d’utiliser Traefik)