technique:adminsys:mail:deploiement

Déploiement du serveur de mail

docker volume create mail-mda-maildir
opendkim-genkey -b 4096 -s nov2018 -d picasoft.net

Puis copier le contenu du fichier nov2018.txt dans le DNS, renommer la clef privée en selecteur.domaine.rsa (ici nov2018.picasoft.net.rsa) puis la placer dans un dossier sécurisé. Ce dossier doit être monté dans le conteneur pica-mail-mta sur /etc/dkimkeys.

Le docker-compose actuel fait que le dossier de l’hôte dans lequel on place la clef privée est /DATA/docker/mail/opendkim/ :

pica-mail-mta:
   volumes:
      - /DATA/docker/mail/opendkim/:/etc/dkimkeys/

Pour une procédure plus détaillée, voir la documentation dédiée.

Sur l’infra Picasoft on utilise traefik en tant que client acme. Ce sont les labels qui permettent de demander à traefik la génération d’un certificat:

      - "traefik.frontend.rule=Host:mail.test.picasoft.net"
      - "traefik.port=80"
      - "traefik.enable=true"
      - "traefik.docker.network=pica_mail"

Bien vérifier que le nom d’hôte est accessible. Ce n’est pas nécessairement le nom d’hôte qui sera utilisé par postfix lors des transactions SMTP entre MTA, mais c’est celui qui sera utilisé lors de la connexion utilisateur-serveur. Traefik a besoin d’être sur le même réseau que le conteneur. Si ce n’est pas déjà le cas:

docker network connect pica_mail traefik

Lorsqu’on n’a jamais lancé le docker-compose, le réseau n’existera pas. Attention, le préfixe pica_ dans pica_mail vient du fichier .env présent dans le dossier docker-compose. Sans ça, le préfixe est le nom du dossier depuis lequel la commande docker-compose a été lancée.

Les certificats sont copiés de traefik vers les MDA et MTA lors du lancement du docker-compose (par pica-mail-copy-certs). Lorsqu’on demande un certificat pour un certain domaine pour la première fois, il y a un délai de quelques minutes, ce qui fait qu’il faut lancer à nouveau pica-mail-copy-certs. On peut voir quels certificats traefik a à sa disposition en inspectant le fichier acme.json (sur l’infra picasoft, dans /DATA/docker/traefik/certs/acme.json).

Une configuration fine d’un serveur de mail nécessite 4 entrées DNS :

  1. MX :
    @	MX	200	pica01-test.test

    pica01-test.test est le sous-domaine visé par les mails.

  2. SPF :
  3. DKIM : comme expliqué dans la section précédente, il faut copier tel quel dans le DNS le contenu du fichier nov2018.txt1) créé à la génération des clefs DKIM.
  4. DMARC : la rédaction du champ peut se réaliser manuellement mais nous recommandons l’aide fournie par ce site interactif. La sortie générée est également à copier tel quel dans le DNS.

Les images sont générées à partir des Dockerfile sur le repository de Picasoft2). Au moment de la rédaction de cette page, ces fichiers se trouvaient sous $(USERDIRECTORY)/dockerfiles/pica-mail-mta et $(USERDIRECTORY)/dockerfiles/pica-mail-mda/auth_LDAP, respectivement pour le MTA et le MDA.

Puis :

cd /dockerfiles/pica-mail-mta
docker build -t pica-mail-mta .
cd /dockerfiles/pica-mail-mda
docker build -t pica-mail-mda .
cd /dockerfiles/docker-compose
docker-compose -f mail.yml up

Un exemple de fichier docker-compose se trouve dans /docker-compose/mail.yml.

Noter qu’un fichier .env se trouve dans le répertoire docker-compose, il est important car c’est lui qui définit le préfixe des réseaux, à savoir “pica”. Il faut absolument se placer dans un répertoire contenant mail.yml et .env

(Ce qui signifie que si on demande au docker-compose de créer le réseau “mail”, alors c’est le réseau “pica_mail” qui sera créé. Ce comportement de docker-compose est un problème connu de Docker, mais il ne sera pas changé dans des versions suivantes, pour des raisons de compatibilité.)


1)
en supposant que le sélecteur soit nov2018.
  • technique/adminsys/mail/deploiement.1581689591.txt.gz
  • de 127.0.0.1