Set-OPS-Public/roles/serveur_dovecot/templates/99-setops.conf.j2
Daniel Allaire a90dff7ba7 courriel : routage local par identifiant, et la livraison interne remise en marche
Arbitrage rendu : le courrier local est route par uid, plus par l'attribut
mail. Dovecot le faisait DEJA (mail_home = /var/vmail/%{user | username}) ;
les deux moities ne s'accordaient que par coincidence, tant que mail valait
uid@<domaine_interne>. Cout assume : l'adresse interne est derivee et ne se
choisit plus ; en echange mail redevient libre de porter la vraie adresse de
la personne.

Puis la preuve de bout en bout a revele bien pire : toute livraison interne
etait DIFFEREE.

  SSL_connect error to infra-mail-01:24: Connection timed out
  status=deferred (Cannot start TLS: handshake failure)

Postfix etait durci (lmtp_tls_security_level = verify), le port LMTP de
Dovecot ecoutait en clair — son ssl = required global ne concerne que les
services de connexion. Les deux cotes d'un meme flux avaient ete traites
separement. Corrige et accorde : ssl = yes sur l'inet_listener (TLS implicite)
et lmtp_tls_wrappermode = yes cote client ; l'un sans l'autre ne marche pas.

Livraison prouvee : status=sent (250 ... Saved), message dans
/var/vmail/sysadmin/Maildir/.INBOX/new/.

Le devis disait CONFORME pendant ce temps : il verifiait la resolution et les
dialectes, jamais si le courrier BOUGE. Un devis qui ne regarde que les
reglages ne dit pas si le service rend son service. Il releve desormais la
file d'attente et ses raisons ; test negatif : la panne est nommee.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 09:42:45 -04:00

100 lines
3.4 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 %}
{% if serveur_dovecot_sasl_reseau %}
# --- Auth SASL réseau (soumission :587 depuis le MTA distant edge-mta) ---
# À restreindre au nœud MTA par pare-feu.
service auth {
inet_listener sasl {
port = {{ serveur_dovecot_sasl_port }}
}
}
{% 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 %}