boites (dovecot) · cache-apt (artefacts) · certificat (client_pki, 14/14)
collaboration (nextcloud) · collecte (prometheus) · file-courriel (postfix)
forge (forgejo) · identite (keycloak) · ingestion (loki) · moteur (icinga)
resolution (resolveur) · runner (serveur_ops) · tableaux (grafana)
voute (ops_tenant) — toutes vertes, sans une ligne ecrite dans Icinga.
DEUX PRINCIPES QUE LA PREMIERE SONDE A IMPOSES.
Une sonde doit pouvoir etre mise en defaut PAR PARAMETRE : cible et seuils
sont des variables du role, on prouve le rouge avec un port ferme ou un
seuil impossible, sans rien casser. Et la sonde vit LA OU VIT LA VERITE :
« ce noeud est-il collecte ? » appartient a prometheus, pas au client —
une seule y voit les N noeuds, et surtout elle voit le cas SILENCIEUX.
ON DEMANDE AU SERVICE CE QU IL PENSE DE LUI-MEME quand il sait le dire
(healthz, /ready, status.php, decouverte OIDC). Quand il ne sait pas, on
va chercher la verite de terrain : « moteur » ne regarde ni le service ni
le port, il demande a la base depuis combien de temps elle n a pas ete
rafraichie — la lecon des sauvegardes appliquee a la supervision.
QUATRE FOIS J AI ECRIT LA SONDE AVANT DE MESURER, QUATRE FOIS ELLE A EU
TORT. La forge : port et chemin des depots inventes, elle ecoute en 3000
derriere l edge et n a legitimement aucun depot. Loki : « panne
persistante » conclue sur deux lectures a quelques secondes d intervalle
juste apres un redemarrage — deux mesures rapprochees ne distinguent pas
un etat d un instant. Keycloak : vise en 8443, il ecoute en 8080. Le
runner : git en root refuse un depot d un autre proprietaire. A chaque
fois le remede est le meme — lire la verite du role, ne pas la supposer.
Et le meme piege Jinja qu avec client_sante : ${#tableau[@]} contient {#.
Le remede etait deja au depot ; je l ai reecrit au lieu de le chercher.
RESTE : client_smtp, client_artefacts, client_journal, icingaweb2 et
ops_site. Ce sont des chemins de report, dont la panne se voit deja par le
silence des sondes qu ils portent.
make prouver : CONFORME, 64 OK, 0 echec, 0 saute (P64 : 14 sondes).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
|
||
|---|---|---|
| .. | ||
| defaults | ||
| handlers | ||
| meta | ||
| tasks | ||
| templates | ||
| README.md | ||
serveur_dovecot
Mailstore : Dovecot 2.4 (Debian 13) — IMAP pour les utilisateurs, LMTP pour la remise
depuis Postfix, authentification et résolution des comptes sur l'annuaire OpenLDAP.
Stockage Maildir de boîtes virtuelles. Cf. docs/courriel-conception.md.
Rôle
- Installe
dovecot-core,-imapd,-lmtpd,-ldap. - Crée l'utilisateur/groupe système
vmail(uid/gid 5000) et/var/vmail. - TLS : pont de certificat step_ca (
client_pki) — scriptsetops-dovecot-cert-sync- unités
.service/.pathqui recopient le certificat d'hôte dans/etc/dovecot/tlset rechargent Dovecot à chaque renouvellement.
- unités
- Annuaire : connexion fournie par le rôle partagé
resoudre_annuaire(uri, base, bind_dn, bind_password) — rien de codé en dur. - Déploie toute la configuration en un drop-in
conf.d/99-setops.conf(syntaxe 2.4), valide avecdoveconfavant d'activer le service. - Désactive l'auth système par défaut : LDAP est l'unique autorité.
Réglages Dovecot 2.4 qui comptent
La 2.4 a changé la donne par rapport à la 2.3 ; ces trois points conditionnent la remise :
static_allow_all_userspour le userdb static ;mail_inbox_pathlaissé vide ;mail_pathpar utilisateur —{{ vmail_base }}/%{user | username}.
Le local-part seul (| username) donne le même chemin pour la remise LMTP (destinataire
local-part) et l'accès IMAP (adresse complète) — c'est ce qui fait fonctionner le flux
bout-en-bout en mono-domaine.
Variables principales
| Variable | Défaut | Rôle |
|---|---|---|
serveur_dovecot_vmail_base |
/var/vmail |
Racine des boîtes |
serveur_dovecot_mail_path |
<base>/%{user | username} |
Chemin Maildir par compte |
serveur_dovecot_ldap_filter |
(&(objectClass=inetOrgPerson)(mail=%{user})) |
Login = adresse courriel |
serveur_dovecot_tls_actif |
true |
Pont de certificat step_ca |
serveur_dovecot_lmtp_reseau |
true |
LMTP :24 pour un MTA distant (edge-mta) |
serveur_dovecot_sasl_reseau |
false |
Auth SASL réseau :12345 pour la soumission :587 |
Flux (meta/flux.yml)
993/tcp IMAPS (utilisateurs) · 24/tcp LMTP ← Postfix (TLS vérifié) ·
12345/tcp SASL ← Postfix · 636/tcp → OpenLDAP (userdb/passdb).
Notes / limites
- Mono-domaine : le chemin ne conserve pas le domaine. Le multi-domaine demandera de le préserver des deux côtés (raffinement Étape B).
- LMTP et SASL réseau doivent être restreints au nœud MTA par pare-feu — c'est ce que
fait
nftables_baselineà partir demeta/flux.yml(pair: serveur_postfix). - Si Postfix est co-localisé, le rôle bascule sur les sockets sous le chroot
(
/var/spool/postfix/private) plutôt que sur le réseau (détection automatique). - Le certificat est exigé : sans
client_pkisur le nœud, le rôle échoue explicitement.
Prérequis
serveur_dovecot requiert serveur_openldap actif(docs/dependances-groupes.yml).client_pkiappliqué sur le nœud (couchepki_client, avant la coucheservices).