La forge exige STARTTLS et verifie le certificat du relais. Le relais du site exige le TLS en entree, verifie le serveur joint en sortie (autorites publiques, lues avant le chroot), et journalise chaque session TLS. Mesure sur un envoi reel : TLS 1.3 sur les deux troncons, remis. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
71 lines
3.2 KiB
Django/Jinja
71 lines
3.2 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 = {{ serveur_postfix_tls_entrant }}
|
|
smtpd_tls_protocols = >=TLSv1.2, !SSLv2, !SSLv3
|
|
smtpd_tls_mandatory_protocols = >=TLSv1.2
|
|
smtpd_tls_loglevel = {{ serveur_postfix_tls_journal }}
|
|
smtp_tls_security_level = {{ serveur_postfix_tls_sortant }}
|
|
smtp_tls_CAfile = {{ serveur_postfix_tls_ca_publiques }}
|
|
smtp_tls_mandatory_protocols = >=TLSv1.2
|
|
smtp_tls_loglevel = {{ serveur_postfix_tls_journal }}
|
|
{% 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
|