Post

mailcow dockerized

mailcow dockerized

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
mail 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:mailauth-reports@domain.com”

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 !

1
2
3
cd /opt
git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized

Ensuite, afin de générer la configuration :

1
./generate_config.sh

Vérifiez que la configuration produite est conforme à vos attentes :

1
nano mailcow.conf

Lancement de mailcow :

1
2
docker compose pull
docker compose up -d

Intégration avec Traefik

Dans le fichier config.yml :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
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 !

1
2
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

Cet article est sous licence CC BY 4.0 par l'auteur.