Set-OPS-Public/roles/serveur_dovecot/templates/99-setops.conf.j2
Daniel Allaire 63f5fda091 courriel : les mots de passe de soumission ne quittent plus la machine de Postfix
Postfix (edge-mta) faisait verifier chaque mot de passe de soumission par le
Dovecot du mailstore, sur :12345. Le client SASL Dovecot de Postfix ne chiffre
pas : chaque mot de passe traversait le reseau en clair, et le registre disait
ce flux tls.

Le flux est supprime, pas chiffre. serveur_postfix pose a cote de lui un
Dovecot d'authentification seule (serveur_dovecot/tasks/auth_locale.yml) :
coeur + LDAP, aucun protocole, aucun port, joint par private/auth, qui verifie
sur l'annuaire en LDAPS. Le 12345 disparait des deux roles et du pare-feu ;
serveur_dovecot_sasl_reseau est retire, et une garde arrete l'instance qui le
pose encore.

Deploye chez les deux locataires ; prouve par un envoi reel chez chacun
(sasl_username au journal, remise LMTP, relu par IMAP). test_sasl_local.py
garde le changement ; 95 preuves.

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

90 lines
3.1 KiB
Django/Jinja

# Géré par Set-OPS (rôle serveur_dovecot). Ne pas éditer à la main. Syntaxe Dovecot 2.4.
dovecot_config_version = 2.4.0
protocols {
imap = yes
lmtp = yes
}
# --- Stockage Maildir (boîtes virtuelles) ---
mail_driver = maildir
mail_home = {{ serveur_dovecot_mail_path }}
mail_path = %{home}/Maildir
# L'INBOX vit dans le Maildir (pas le /var/mail mbox par défaut de 2.4, root → refusé).
mail_inbox_path =
first_valid_uid = {{ serveur_dovecot_vmail_uid }}
first_valid_gid = {{ serveur_dovecot_vmail_gid }}
# Garder l'adresse complète (user@domaine) comme identité — domaines virtuels.
auth_username_format = %{user}
# --- TLS (certificat step_ca, via le pont) ---
ssl = required
ssl_server_cert_file = {{ serveur_dovecot_tls_dir }}/cert.pem
ssl_server_key_file = {{ serveur_dovecot_tls_dir }}/key.pem
ssl_min_protocol = TLSv1.2
# --- Auth / annuaire LDAP (serveur_openldap) ---
auth_mechanisms = plain login
ldap_uris = {{ serveur_dovecot_ldap_uris }}
ldap_base = {{ serveur_dovecot_ldap_base }}
ldap_auth_dn = {{ serveur_dovecot_ldap_bind_dn }}
ldap_auth_dn_password = {{ serveur_dovecot_ldap_bind_password }}
passdb ldap {
ldap_filter = {{ serveur_dovecot_ldap_filter }}
ldap_bind = yes
}
userdb static {
# Répond pour TOUT utilisateur sans exiger un passdb (requis pour la remise LMTP,
# y compris le contexte expéditeur/raw-mail-user qui n'est pas dans l'annuaire).
static_allow_all_users = yes
fields {
uid = {{ serveur_dovecot_vmail_utilisateur }}
gid = {{ serveur_dovecot_vmail_utilisateur }}
home = {{ serveur_dovecot_mail_path }}
}
}
{% if serveur_dovecot_lmtp_reseau %}
# --- LMTP réseau (livraison depuis un MTA distant : edge-mta) ---
# À restreindre au nœud MTA par pare-feu.
service lmtp {
inet_listener lmtp {
port = {{ serveur_dovecot_lmtp_port }}
{% if serveur_dovecot_lmtp_tls %}
# TLS IMPLICITE sur ce port. Le `ssl = required` global ne concerne que les
# services de connexion (IMAP/POP) : ce port-ci ecoutait en clair.
#
# Postfix, lui, etait deja durci (`lmtp_tls_security_level = verify`). Les deux
# cotes d'un meme flux avaient donc ete traites separement, et la livraison
# interne etait DIFFEREE en silence — « SSL_connect error […] Connection timed
# out », 300 s par tentative, sans qu'aucun ecran ne le montre. Constate le
# 2026-08-08 par `make courriel-plan`.
#
# Implicite et non STARTTLS : c'est ce que sait faire un `inet_listener`, et le
# client doit donc etre en `lmtp_tls_wrappermode`. Les deux vont ensemble.
ssl = yes
{% endif %}
}
}
{% endif %}
# --- Sockets pour Postfix (remise LMTP + auth SASL) ---
# Seulement si Postfix est co-localisé (l'utilisateur postfix existe). Sinon Dovecot
# tourne en autonome (IMAP) ; les sockets seront ajoutés au déploiement de serveur_postfix.
{% if serveur_dovecot_postfix_present | default(false) %}
service lmtp {
unix_listener {{ serveur_dovecot_postfix_socket_dir }}/dovecot-lmtp {
user = postfix
group = postfix
mode = 0600
}
}
service auth {
unix_listener {{ serveur_dovecot_postfix_socket_dir }}/auth {
user = postfix
group = postfix
mode = 0660
}
}
{% endif %}