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

ServiceProtocolPortContainer
Postfix SMTPTCP25postfix-mailcow
Postfix SMTPSTCP465postfix-mailcow
Postfix SubmissionTCP587postfix-mailcow
Dovecot IMAPTCP143dovecot-mailcow
Dovecot IMAPSTCP993dovecot-mailcow
Dovecot POP3TCP110dovecot-mailcow
Dovecot POP3STCP995dovecot-mailcow
Dovecot ManageSieveTCP4190dovecot-mailcow
HTTP(S)TCP80/443nginx-mailcow

Entrées DNS à mettre en place

NameTypeValue
mailIN A1.2.3.4
autodiscoverIN CNAMEmail.domain.com.
autoconfigIN CNAMEmail.domain.com.
@IN MX 10mail.domain.com.
@IN TXT“v=spf1 mx a -all”
dkim._domainkeyIN TXT“v=DKIM1; k=rsa; t=s; s=email; p=
_dmarcIN TXT“v=DMARC1; p=reject; rua=mailto:[email protected]

DNS supplémentaires

NameTypePriorityWeightPortValue
_autodiscover._tcpIN SRV01443mail.domain.com.
_caldavs._tcpIN SRV01443mail.domain.com.
_caldavs._tcpIN TXT   “path=/SOGo/dav/”
_carddavs._tcpIN SRV01443mail.domain.com.
_carddavs._tcpIN TXT   “path=/SOGo/dav/”
_imap._tcpIN SRV01143mail.domain.com.
_imaps._tcpIN SRV01993mail.domain.com.
_pop3._tcpIN SRV01110mail.domain.com.
_pop3s._tcpIN SRV01995mail.domain.com.
_sieve._tcpIN SRV01419mail.domain.com.
_smtps._tcpIN SRV01465mail.domain.com.
_submission._tcpIN SRV01587mail.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