Set-OPS-Public/roles/serveur_postfix/templates/main.cf.j2
Daniel Allaire 92a396b3fe forge du site : ses courriels partent, par le relais du site
La forge nommait infra-mail-01 en dur comme relais : une machine de
locataire, absente du site. Elle derive maintenant son relais du groupe
serveur_postfix. Le relais du site admet les machines dont un role declare
un flux vers lui, lues dans le registre des flux (aujourd'hui la forge).

Deploye au site ; un courriel de mot de passe oublie est arrive et a servi.
Aussi : forge-comptes ne compte plus de changement en mode plan.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 01:57:43 -04:00

66 lines
2.9 KiB
Django/Jinja

# Géré par Set-OPS (rôle serveur_postfix). Ne pas éditer à la main.
compatibility_level = 3.6
myhostname = {{ serveur_postfix_nom_hote }}
mydomain = {{ serveur_postfix_domaine }}
myorigin = $mydomain
inet_interfaces = all
inet_protocols = ipv4
biff = no
append_dot_mydomain = no
readme_directory = no
smtpd_banner = $myhostname ESMTP
mynetworks = {{ serveur_postfix_reseaux_confiance }}
# Aucune remise locale : ce MTA ne fait QUE des boîtes virtuelles (via LDAP + LMTP).
mydestination =
local_recipient_maps =
{% if serveur_postfix_mode == 'relais' %}
{# UN RELAIS N'HEBERGE RIEN, IL EXPEDIE.
Pas de domaine virtuel, pas de carte LDAP, pas de remise LMTP : il n'y a aucune
boite ici. Ce qu'il faut, c'est que la supervision puisse SORTIR une alerte, et
qu'elle sorte au nom du SITE — pas d'un locataire. #}
relayhost =
{# `mynetworks` seul decide qui peut faire relayer : la loopback, donc les services de
cette machine, et les machines dont un role declare un flux vers ce relais (la forge ;
au site, `site_inventaire.reseaux_confiance_relais`). Rien d'autre : un relais ouvert
est repere et exploite en heures. #}
smtpd_relay_restrictions = permit_mynetworks, reject_unauth_destination
{% else %}
# --- Boîtes virtuelles : validation LDAP + remise LMTP vers le nœud mail-store (Dovecot) ---
virtual_mailbox_domains = {{ serveur_postfix_domaine }}
virtual_mailbox_maps = ldap:/etc/postfix/ldap-mailboxes.cf
virtual_transport = lmtp:inet:[{{ serveur_postfix_mailstore_hote }}]:{{ serveur_postfix_lmtp_port }}
# Résolution via le plancher /etc/hosts (indépendant du DNS) pour la remise interne.
lmtp_host_lookup = native
{% endif %}
{% if serveur_postfix_tls_actif %}
# --- TLS (certificat step_ca) ---
smtpd_tls_cert_file = {{ serveur_postfix_tls_dir }}/cert.pem
smtpd_tls_key_file = {{ serveur_postfix_tls_dir }}/key.pem
smtpd_tls_security_level = may
smtpd_tls_protocols = >=TLSv1.2, !SSLv2, !SSLv3
smtp_tls_security_level = may
{% if serveur_postfix_lmtp_tls_verify | default(false) %}
# Zero-confiance : livraison LMTP vers Dovecot chiffree ET verifiee (cert step-ca).
# `wrappermode` = TLS des la connexion : c'est ce que sait offrir un `inet_listener`
# Dovecot. Sans lui, Postfix tentait STARTTLS sur un port qui ne le propose pas, et
# la poignee de main expirait au bout de 300 s — livraison differee en silence.
lmtp_tls_wrappermode = yes
lmtp_tls_security_level = verify
lmtp_tls_CAfile = {{ serveur_postfix_lmtp_tls_cafile }}
{% endif %}
{% endif %}
{% if serveur_postfix_rspamd_milter %}
# --- Milter rspamd (antispam + signature DKIM), co-localisé sur edge-mta ---
smtpd_milters = inet:localhost:{{ serveur_postfix_rspamd_milter_port }}
non_smtpd_milters = $smtpd_milters
milter_protocol = 6
milter_default_action = accept
{% endif %}
# --- Restrictions de base ---
smtpd_helo_required = yes
smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination