Guide d’installation d’un serveur mail sur Docker

By | February 16, 2018

Dans cet article, nous verrons comment mettre en place un serveur mail incluant un client webmail en quelques minutes grâce à Docker.
Il existe sur la toile de nombreuses images Docker avec des configurations mail complètes.
Pour l’objectif de cet article, j’utiliserai tomav/docker-mailserver qui est un projet mail Docker très populaire.
Avant d’aller plus loin, assurez-vous que des enregistrements A et MX pointent sur votre serveur.

Ci-dessous quelques applications configurables avec docker-mailserver:

_ postfix pour le serveur smtp
_ dovecot pour le sasl, l’imap (ou pop3)
_ saslauthd
_ amavis
_ spamassasin
_ clamav
_ opendkim
_ opendmarc
_ fail2ban
_ fetchmail
_ postscreen
_ postgrey

Commençons par créer un certificat à l’aide du client Let’s Encrypt Certbot:

# git clone https://github.com/certbot/certbot.git
# cd certbot
# ./certbot-auto certonly –standalone –email admin@domaine.com -d mail.domaine.com

NB: Remplacez domaine par votre propre domaine.

Créeons un dossier pour notre projet mail:

# mkdir mail

Ce dossier comprendra notamment trois fichiers:
_ Un fichier setup.sh qui nous permettra de configurer le serveur mail.
_ Un fichier docker-compose.yml qui nous servira à monter le serveur.
_ Un fichier Caddyfile pour la configuration du proxy Caddy.

Téléchargeons le fichier setup.sh dans le dossier mail:

# wget https://raw.githubusercontent.com/tomav/docker-mailserver/master/setup.sh

Ci-dessous le fichier docker-compose.yml que j’ai préparé pour la création de notre serveur.
Comme Webmail j’utilise Rainloop et Caddy comme reverse proxy. Ce proxy créera un certificat Lets Encrypt pour le Webmail en plus de celui qu’utiliseront Dovecot et Postfix.

version: '2'
services:
  rainloop:
    image: hardware/rainloop
    depends_on:
      - mail
    volumes:
      - ./data/rainloop:/rainloop/data

  mail:
    image: tvial/docker-mailserver:latest
    hostname: mail
    domainname: domaine.com
    container_name: mail
    ports:
      - "25:25"
      - "143:143"
      - "587:587"
      - "993:993"
  volumes:
    - ./data/mail/data:/var/mail
    - ./data/mail/state:/var/mail-state
    - ./config/:/tmp/docker-mailserver/
    - /etc/letsencrypt/:/etc/letsencrypt/
  environment:
    - ENABLE_SPAMASSASSIN=1
    - ENABLE_CLAMAV=1
    - ENABLE_FAIL2BAN=1
    - ENABLE_POSTGREY=1
    - ONE_DIR=1
    - DMS_DEBUG=0
    - SSL_TYPE=letsencrypt
  cap_add:
    - NET_ADMIN
    - SYS_PTRACE

  entry:
    image: abiosoft/caddy:latest
    restart: always
    privileged: true
    links:
      - rainloop
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/Caddyfile
      - ./data/entry:/root/.caddy

Voici le contenu du fichier Caddyfile:

mail.domaine.com {
proxy / rainloop:8888 {
transparent
}
}

Toujours dans le dossier mail, générons notre paire de clés DKIM pour votre serveur mail à l’aide du script setup.sh. Cette paire de clés constituera une méthode de protection contre les spams et le phishing.

# ./setup.sh config dkim

NB: Vous devez créer un enregistrement TXT avec le contenu du fichier config/opendkim/keys/domain.tld/mail.txt. Voici un lien qui explique comment procéder.

Créeons à présent un compte mail:

# ./setup.sh email add user@domaine.com P@ssword

Voici le menu d’aide du script setup.sh:

Lançons à présent docker-compose pour la création du serveur mail:

# docker-compose up -d

Après 2 à 3 minutes votre serveur mail devrait être fonctionnel.

Accédons à présent à l’adresse suivante pour la configuration du webmail Rainloop:

http://mail.domaine.com/?admin

Voici les identificants par défaut du compte administrateur:

nom de compte: admin
mot de passe: 12345

Veillez surtout à changer ce mot de passe dès votre première connexion.

Configurons à présent notre webmail. Sur le menu de gauche, choisissez le menu Domains, puis l’onglet Add Domain, et ajoutez les configurations de votre serveur comme dans l’image ci-dessous:

Cliquez sur le bouton Whitelist pour ajouter vos comptes d’utilisateurs.

Choisissez le menu Login, puis ajoutez votre nom de domaine dans la case Default Domain.

Votre webmail est à présent opérationnel et vos utilisateurs pourront s’y connecter.

Le fichier docker-compose.yml que nous avons utilisé plus haut permet d’activer automatiquement plusieurs applications comme Fail2ban. N’hésitez donc pas à accéder au conteneur et à réaliser vos propres configurations.

Mise à jour

Pour la mise à jour des images qui composent votre application mail, lancez les commandes ci-dessous à l’intérieur du dossier mail:

# cd mail
# docker-compose pull
# docker-compose up -d

mdestroy

One thought on “Guide d’installation d’un serveur mail sur Docker

  1. Dominique MACHURE

    Bonjour, j’ai trouvé votre tuto très intéressant. j’utilise docker sous OpenMediaVault. je souhaite avoir deux trois précisions.
    – Est-il possible d’utiliser des volumes en dehors de la partition système qui semble être utilisée dans votre description de script docker (stack), je pense notamment à placer les données sur un disque partagé pour plus d’espace.
    – Est-il possible de changer les ports en redirigeant ceux ci en entrée pour éliminer les tentatives de scans.
    je fais ça assez systématiquement pour limiter les attaques nombreuses des chinois qui utilisent le spectre 0-1024 systématiquement.
    – Le webmail rainloop accepte-t-il lui aussi la redirection des ports 80/443 qui sont largement utilisés par les containers docker.
    Merci par avance de vos réponses.
    Cordialement
    Dominique

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *