RETOUR D’EXPÉRIENCE /

Construire une archive email privée avec Dovecot et Ansible

Introduction

Cet article explique le choix d’une archive email privée basée sur Dovecot et gérée par Ansible. L’objectif est de centraliser des copies d’emails provenant de plusieurs fournisseurs sans convertir le projet en un serveur mail public et sans confondre stockage d’archive et suppression chez les fournisseurs.

Symptômes et problème

  • Les archives restent dispersées entre plusieurs fournisseurs et clients.
  • Une arborescence créée uniquement à la main est difficile à reproduire.
  • Un stockage local sans frontière d’administration claire augmente le risque opérationnel.
  • La disponibilité d’un service IMAP peut être confondue avec une chaîne d’archivage complète.

Contexte technique

Le repository fournit un rôle Ansible, une définition Docker Compose et un template de configuration dovecot.conf pour un compte d’archive privé stocké en Maildir. Un proxy TCP existant assure la terminaison TLS sur un réseau privé partagé ; le projet ne fournit ni collecte complète, ni SMTP, ni webmail.

Diagnostic

Les fournisseurs ne sont pas des points d’ancrage fiables pour une archive durable. Héberger un serveur mail complet augmenterait de manière significative la surface d’exposition. La solution retenue isole la fonction d’archive et partage les responsabilités entre l’application (gestion des messages) et la plateforme (réseau, certificats, conservation).

Cause racine

La tension vient du besoin de centraliser des messages tout en évitant d’exposer un service mail complet sur Internet. Il fallait limiter l’étendue fonctionnelle du composant hébergé et définir clairement les frontières d’administration.

Solution retenue

Limiter Dovecot au protocole IMAP, ne publier aucun port depuis le conteneur, stocker les messages en Maildir et administrer la configuration et les utilisateurs par Ansible. La hiérarchie de mailboxes est convergée de façon additive : une modification déclarative n’entraîne jamais la suppression automatique d’une mailbox existante.

protocols = imap
mail_driver = maildir
mail_home = /srv/mail/%{user}
ssl = no
auth_allow_cleartext = yes

Le rôle Ansible inclut des garde-fous : assertions empêchant l’exposition publique ou l’activation d’une suppression distante, vérifications d’UID/GID pour éviter les collisions, création d’un compte système dédié et de répertoires protégés pour l’arborescence Maildir. La définition compose.yml monte la configuration et le répertoire de mail depuis le système hôte et laisse la terminaison TLS à l’élément de plateforme.

Opérations Ansible et garde-fous

Le rôle effectue des contrôles déclaratifs avant création : validation des paramètres de non-exposition et d’absence de suppression distante, recherche d’UID et GID existants pour refuser les collisions, création de groupe et utilisateur système, création des répertoires applicatifs et privés, et rendu des templates et fichiers de définition Compose. Ces étapes sécurisent la mise en place et évitent les effets de bord sur les propriétaires de fichiers existants.

Validation

Le rôle installe la définition Compose, rend la configuration non secrète et le template Dovecot. Lors du déploiement, les tâches renvoient des enregistrements indiquant le succès du rendu des fichiers et la copie de la définition. La validation opérationnelle consiste à vérifier que : le conteneur n’a aucun port publié sur l’hôte, que la configuration Dovecot pointe vers Maildir et que la terminaison TLS est assurée par l’infrastructure de plateforme.

Enseignements

  • Réduire Dovecot à une archive IMAP diminue la surface d’exposition.
  • La plateforme doit gérer le réseau, les certificats et la conservation durable ; le projet gère le service et ses données.
  • Une taxonomie déclarative est plus facile à auditer qu’une arborescence créée uniquement dans un client.
  • La convergence d’une archive doit privilégier l’ajout et rendre toute suppression explicite.
  • Un service IMAP opérationnel ne prouve pas que la collecte, la vérification et la suppression distante sont implémentées.

Isoler la fonction d’archive (IMAP-only, stockage Maildir, gestion déclarative) réduit le risque opérationnel tout en conservant la simplicité d’accès aux messages.

Pattern réutilisable

Dans un contexte similaire, le pattern se résume à : confiner le service d’archive à IMAP, ne pas publier de ports hôtes, déléguer la terminaison TLS à la couche de plateforme, stocker en Maildir géré par un compte système dédié et réaliser toutes les modifications via des playbooks Ansible qui favorisent l’ajout plutôt que la suppression.

Conclusion

La solution présente un compromis pragmatique : centraliser des copies d’emails sans transformer le projet en serveur mail public. En combinant une configuration Dovecot restreinte, un stockage Maildir et une gestion déclarative par Ansible, on obtient une archive auditable, reproductible et dont la surface d’exposition reste maîtrisée.