Set-OPS-Public/roles/serveur_dovecot/defaults/main.yml
Daniel Allaire 78c3505577 courriel : la sonde boites cherche un vrai compte, et l'IMAP n'ecoute plus en clair
La sonde demandait `doveadm user`, que le userdb static (static_allow_all_users,
requis par la remise LMTP) satisfait pour n'importe quel nom : elle disait
« daniel » resolu chez deux locataires ou ce compte n'existe pas. Elle interroge
desormais le passdb (`doveadm auth lookup`), sans mot de passe, et cherche le
compte d'amorcage (amorcage_acces_courriel) plutot qu'un nom ecrit.

Le 143 (IMAP en clair) ecoutait par defaut a cote du 993 : eteint par
`inet_listener imap { port = 0 }`, eprouve sur banc Debian 13.

Deploye chez les deux locataires : 24 et 993 seulement ; sonde verte sur
sysadmin, rouge sur un compte inexistant. test_dovecot_sonde_et_imap.py garde
les deux ; 95 preuves.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 11:36:41 -04:00

67 lines
3.4 KiB
YAML

---
# Dovecot 2.4 (Debian 13) — IMAP + LMTP + auth LDAP, stockage Maildir des boîtes virtuelles.
# Config par drop-in conf.d/99-setops.conf (syntaxe 2.4). Cf. docs/courriel-conception.md.
serveur_dovecot_paquets:
- dovecot-core
- dovecot-imapd
- dovecot-lmtpd
- dovecot-ldap
serveur_dovecot_service: "dovecot"
# --- Stockage des boîtes virtuelles ---
serveur_dovecot_vmail_utilisateur: "vmail"
serveur_dovecot_vmail_uid: 5000
serveur_dovecot_vmail_gid: 5000
serveur_dovecot_vmail_base: "/var/vmail"
# Maildir par utilisateur. Nom d'utilisateur seul → chemin IDENTIQUE pour la remise LMTP
# (destinataire local-part) et l'accès IMAP (adresse complète). Mono-domaine ; pour du
# multi-domaine il faudra préserver le domaine des deux côtés (raffinement Étape B).
serveur_dovecot_mail_path: "{{ serveur_dovecot_vmail_base }}/%{user | username}"
# --- Annuaire/auth LDAP (vers serveur_openldap) ---
# Connexion à l'annuaire (uris, base, bind_dn, bind_password) : fournie par le rôle partagé
# resoudre_annuaire (voir tasks/main.yml « Adopter la connexion annuaire »).
# Filtre de connexion : utilisateur = adresse courriel (attribut mail).
serveur_dovecot_ldap_filter: "(&(objectClass=inetOrgPerson)(mail=%{user}))"
# --- TLS via le certificat d'hôte step_ca (client_pki) ---
serveur_dovecot_tls_actif: true
serveur_dovecot_tls_source_cert: "/etc/step/certs/{{ ansible_fqdn | default(ansible_hostname) }}.crt"
serveur_dovecot_tls_source_cle: "/etc/step/certs/{{ ansible_fqdn | default(ansible_hostname) }}.key"
serveur_dovecot_tls_dir: "/etc/dovecot/tls"
# --- Intégration Postfix (sockets sous le chroot Postfix) ---
serveur_dovecot_postfix_socket_dir: "/var/spool/postfix/private"
# --- LMTP réseau : pour un MTA DISTANT (Postfix sur le nœud edge-mta) qui livre
# par LMTP réseau. À restreindre au nœud MTA par pare-feu (nftables) en prod.
serveur_dovecot_lmtp_reseau: true
serveur_dovecot_lmtp_port: 24
# --- Authentification de la soumission : LOCALE A POSTFIX, plus jamais par le reseau ---
# Jusqu'au 2026-10-12, Postfix (edge-mta) interrogeait ce Dovecot sur :12345 ; le client
# SASL Dovecot de Postfix ne chiffre pas, et les mots de passe passaient en clair. Ce port
# n'existe plus : `serveur_postfix` pose a cote de lui un Dovecot d'authentification seule
# (`tasks/auth_locale.yml`), qui verifie sur l'annuaire en LDAPS.
serveur_dovecot_auth_locale_paquets:
- dovecot-core
- dovecot-ldap
# TLS sur le port LMTP. Doit rester ACCORDE avec `serveur_postfix_lmtp_tls_verify` du
# cote emetteur : l'un sans l'autre, la livraison interne s'arrete — soit elle part en
# clair, soit elle est differee sans fin.
serveur_dovecot_lmtp_tls: true
# --- Sonde de supervision -----------------------------------------------------------
# UN COMPTE QUI DOIT EXISTER, sous son IDENTIFIANT DE CONNEXION (l'attribut `mail` : c'est
# ce que cherche le filtre de connexion). Le trouver prouve la chaine : demon, configuration,
# liaison LDAPS, filtre. Variable, donc mise en defaut avec un nom inexistant sans toucher a
# l'annuaire.
#
# Le compte d'amorcage, pas un nom ecrit (2026-10-12) : ce defaut valait `daniel`, qui
# n'existe chez aucun locataire — et la sonde, qui interrogeait le userdb statique, le disait
# trouve. Le compte d'amorcage est le seul que Set-OPS sait exister ; son adresse est un
# intrant obligatoire de toute instance.
serveur_dovecot_sonde_utilisateur: "{{ amorcage_acces_courriel | default('') }}"