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>
100 lines
3.5 KiB
Django/Jinja
100 lines
3.5 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
|
|
|
|
{# LE 143 NE S'OUVRE PLUS (2026-10-12). L'IMAP en clair ecoutait par defaut a cote du 993 :
|
|
le pare-feu le bloquait et `ssl = required` refusait toute connexion avant STARTTLS, mais
|
|
le port repondait. Directive : tout transit chiffre — on n'offre que le TLS direct (993,
|
|
RFC 8314). `port = 0` eteint l'ecoute ; eprouve sur banc Debian 13 (le 993 reste). #}
|
|
service imap-login {
|
|
inet_listener imap {
|
|
port = 0
|
|
}
|
|
}
|
|
|
|
# --- 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 %}
|