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>
77 lines
3.2 KiB
YAML
77 lines
3.2 KiB
YAML
---
|
|
# AUTHENTIFICATION LOCALE POUR POSTFIX (2026-10-12) — voir templates/auth-locale.conf.j2.
|
|
#
|
|
# Appelee par `serveur_postfix` la ou la soumission existe, APRES que Postfix a demarre :
|
|
# le socket vit dans `/var/spool/postfix/private`, que Postfix cree a son premier demarrage.
|
|
# Ni IMAP, ni LMTP, ni aucun port : la machine n'entre pas dans le groupe `serveur_dovecot`,
|
|
# et aucun de ses flux ne s'ouvre ici.
|
|
- name: Authentification locale — resoudre l'annuaire (role partage)
|
|
ansible.builtin.include_role:
|
|
name: resoudre_annuaire
|
|
vars:
|
|
# Le compte de Dovecot, comme sur la machine des boites : meme verification, meme droit.
|
|
resoudre_annuaire_bind_cn: "dovecot"
|
|
resoudre_annuaire_secret: "vault_ldap_bind_dovecot"
|
|
|
|
- name: Authentification locale — adopter la connexion annuaire
|
|
ansible.builtin.set_fact:
|
|
serveur_dovecot_ldap_uris: "{{ resoudre_annuaire_uri }}:{{ resoudre_annuaire_port }}"
|
|
serveur_dovecot_ldap_base: "{{ resoudre_annuaire_base_dn }}"
|
|
serveur_dovecot_ldap_bind_dn: "{{ resoudre_annuaire_bind_dn }}"
|
|
serveur_dovecot_ldap_bind_password: "{{ resoudre_annuaire_bind_password }}"
|
|
no_log: true
|
|
|
|
- name: Authentification locale — exiger le mot de passe de liaison (Vault)
|
|
ansible.builtin.assert:
|
|
that:
|
|
- serveur_dovecot_ldap_bind_password | length > 0
|
|
fail_msg: "vault_ldap_bind_dovecot requis : l'authentification locale se lie a l'annuaire sous le compte de Dovecot."
|
|
|
|
# Le coeur et le pilote LDAP, RIEN d'autre : sans `dovecot-imapd` ni `dovecot-lmtpd`, aucun
|
|
# protocole n'est declare et Dovecot ne lance aucun service de connexion.
|
|
- name: Authentification locale — installer Dovecot (coeur + LDAP)
|
|
ansible.builtin.apt:
|
|
name: "{{ serveur_dovecot_auth_locale_paquets }}"
|
|
state: present
|
|
update_cache: true
|
|
register: serveur_dovecot_auth_locale_apt
|
|
|
|
- name: Authentification locale — assurer le repertoire du socket (sous le chroot Postfix)
|
|
ansible.builtin.file:
|
|
path: "{{ serveur_dovecot_postfix_socket_dir }}"
|
|
state: directory
|
|
owner: postfix
|
|
group: root
|
|
mode: "0700"
|
|
|
|
- name: Authentification locale — deployer la configuration (drop-in Dovecot 2.4)
|
|
ansible.builtin.template:
|
|
src: auth-locale.conf.j2
|
|
dest: /etc/dovecot/conf.d/99-setops.conf
|
|
owner: root
|
|
group: root
|
|
mode: "0640"
|
|
no_log: true # contient le mot de passe de liaison LDAP
|
|
notify: Redémarrer dovecot
|
|
|
|
- name: Authentification locale — desactiver l'auth systeme (LDAP est l'unique autorite)
|
|
ansible.builtin.replace:
|
|
path: /etc/dovecot/conf.d/10-auth.conf
|
|
regexp: '^!include auth-system\.conf\.ext'
|
|
replace: '#!include auth-system.conf.ext'
|
|
notify: Redémarrer dovecot
|
|
# En simulation, le paquet qu'on vient d'« installer » n'a pose aucun fichier.
|
|
when: not (ansible_check_mode and serveur_dovecot_auth_locale_apt is changed)
|
|
|
|
- name: Authentification locale — valider la configuration (doveconf)
|
|
ansible.builtin.command: doveconf -n
|
|
changed_when: false
|
|
when: not ansible_check_mode
|
|
|
|
- name: Authentification locale — activer et demarrer Dovecot
|
|
when: not ansible_check_mode
|
|
ansible.builtin.systemd:
|
|
name: "{{ serveur_dovecot_service }}"
|
|
enabled: true
|
|
state: started
|
|
daemon_reload: true
|