services publics des locataires : web frontal 80/443, soumission 587/465 ; externe ouvre a tous chez les locataires
Le web frontal devient la porte publique (80/443 externe) ; Postfix publie la soumission 587 et ajoute le 465 (TLS direct). Le generateur nftables ouvrait un flux externe combine a une source nommee a cette seule source : l Internet etait refuse par l hote. Corrige chez les locataires ; au site, rien ne s elargit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
e9b03399b9
commit
37753984a7
6 changed files with 61 additions and 7 deletions
|
|
@ -94,7 +94,8 @@
|
|||
| `serveur_ops_site` | egress | 8006 | tcp | fabric | tls-requis | API de l'hyperviseur : créer, cloner et détruire les VM de la fabric. Le seul flux par lequel un écosystème peut en matérialiser un autre. |
|
||||
| `serveur_ops_tenant` | ingress | 22 | tcp | runner_site | ssh | Insémination : le runner du SITE amorce ce runner-ci — socle, moteur, plan, plancher de résolution — jusqu'à ce qu'un humain lui remette sa voûte. Vers cette machine seule, jamais vers le reste de l'écosystème. |
|
||||
| `serveur_postfix` | ingress | 25 | tcp | externe, client_smtp | starttls | SMTP entrant : courrier externe (MX) et notifications internes (client_smtp). |
|
||||
| `serveur_postfix` | ingress | 587 | tcp | flotte | starttls | Soumission authentifiée (submission) pour les agents internes qui envoient du courrier. |
|
||||
| `serveur_postfix` | ingress | 465 | tcp | flotte, externe | tls-requis | Soumission authentifiée en TLS direct (submissions, RFC 8314) : clients de courriel des utilisateurs. |
|
||||
| `serveur_postfix` | ingress | 587 | tcp | flotte, externe | starttls | Soumission authentifiée (STARTTLS obligatoire) : agents internes et clients de courriel des utilisateurs. |
|
||||
| `serveur_postfix` | egress | 24 | tcp | serveur_dovecot | tls-requis | Remise finale par LMTP au mailstore (Dovecot), en TLS vérifié. |
|
||||
| `serveur_postfix` | egress | 25 | tcp | externe | starttls | Relais sortant vers les MX distants (STARTTLS opportuniste). |
|
||||
| `serveur_postfix` | egress | 636 | tcp | serveur_openldap | tls-requis | Tables virtuelles (domaines/alias/boîtes) résolues sur l'annuaire (LDAPS). |
|
||||
|
|
@ -124,14 +125,16 @@
|
|||
| `serveur_web_dorsal` | ingress | 80 | tcp | edge | clair | Front nginx local des webapps, proxie par l'edge (TLS termine a l'edge). |
|
||||
| `serveur_web_dorsal` | egress | 443 | tcp | flotte | tls | git clone/pull du depot de chaque app (Forgejo souverain) au deploiement. |
|
||||
| `serveur_web_frontal` | ingress | 80 | tcp | edge | clair | Contenu statique servi au navigateur via l'edge (TLS termine a l'edge). |
|
||||
| `serveur_web_frontal` | ingress | 80 | tcp | externe | clair | HTTP public — le premier contact d'un navigateur, et le defi HTTP d'ACME ; renvoie vers HTTPS. |
|
||||
| `serveur_web_frontal` | ingress | 443 | tcp | externe | tls-requis | HTTPS public — les sites et services que le locataire publie sur l'Internet. |
|
||||
| `serveur_web_frontal` | egress | 443 | tcp | flotte | tls | git clone/pull du depot du site (Forgejo souverain) au deploiement. |
|
||||
|
||||
## Synthèse chiffrement
|
||||
|
||||
- **clair** : 50 flux
|
||||
- **clair** : 51 flux
|
||||
- **n-a** : 8 flux
|
||||
- **ssh** : 8 flux
|
||||
- **starttls** : 6 flux
|
||||
- **tls** : 11 flux
|
||||
- **tls-cible** : 2 flux
|
||||
- **tls-requis** : 34 flux
|
||||
- **tls-requis** : 36 flux
|
||||
|
|
|
|||
|
|
@ -39,7 +39,8 @@ serveur_postfix_lmtp_port: 24
|
|||
|
||||
# --- Soumission :587 (clients authentifiés) ---
|
||||
# SASL délégué à Dovecot (passdb LDAP prouvé) sur le nœud mail-store, via son auth réseau.
|
||||
# Interne uniquement : STARTTLS requis, seuls les authentifiés relaient. Pas de sortie internet.
|
||||
# 587 (STARTTLS requis) et 465 (TLS direct) ; seuls les authentifiés relaient. Publics depuis le
|
||||
# 2026-09-29 : les clients de courriel y arrivent par l'adresse publique du locataire.
|
||||
serveur_postfix_submission_actif: false
|
||||
serveur_postfix_sasl_hote: "{{ serveur_postfix_mailstore_hote }}"
|
||||
serveur_postfix_sasl_port: 12345
|
||||
|
|
|
|||
|
|
@ -8,12 +8,21 @@ flux:
|
|||
chiffrement: starttls
|
||||
poste: false
|
||||
raison: "SMTP entrant : courrier externe (MX) et notifications internes (client_smtp)."
|
||||
# LA SOUMISSION EST PUBLIQUE (2026-09-29) : les clients de courriel des utilisateurs
|
||||
# envoient depuis n'importe ou, par l'adresse publique du locataire. Toujours chiffree,
|
||||
# toujours authentifiee (SASL Dovecot) ; seuls les authentifies relaient.
|
||||
- sens: ingress
|
||||
port: 587
|
||||
protocole: tcp
|
||||
pair: flotte
|
||||
pair: [flotte, externe]
|
||||
chiffrement: starttls
|
||||
raison: "Soumission authentifiée (submission) pour les agents internes qui envoient du courrier."
|
||||
raison: "Soumission authentifiée (STARTTLS obligatoire) : agents internes et clients de courriel des utilisateurs."
|
||||
- sens: ingress
|
||||
port: 465
|
||||
protocole: tcp
|
||||
pair: [flotte, externe]
|
||||
chiffrement: tls-requis
|
||||
raison: "Soumission authentifiée en TLS direct (submissions, RFC 8314) : clients de courriel des utilisateurs."
|
||||
- sens: egress
|
||||
port: 24
|
||||
protocole: tcp
|
||||
|
|
|
|||
|
|
@ -189,7 +189,10 @@
|
|||
mode: "0644"
|
||||
notify: Redémarrer postfix
|
||||
|
||||
- name: Activer la soumission :587 (clients authentifiés, SASL Dovecot distant)
|
||||
# 465 (`submissions`, TLS DIRECT, 2026-09-29) A COTE DU 587 (STARTTLS). La RFC 8314 recommande
|
||||
# le TLS direct pour la soumission : aucun echange en clair avant le chiffrement. Memes
|
||||
# restrictions que le 587 : authentifie, sinon refuse.
|
||||
- name: Activer la soumission :587 et :465 (clients authentifiés, SASL Dovecot distant)
|
||||
ansible.builtin.blockinfile:
|
||||
path: /etc/postfix/master.cf
|
||||
marker: "# {mark} SETOPS SUBMISSION 587"
|
||||
|
|
@ -203,6 +206,15 @@
|
|||
-o smtpd_sasl_security_options=noanonymous
|
||||
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
|
||||
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
|
||||
submissions inet n - y - - smtpd
|
||||
-o syslog_name=postfix/submissions
|
||||
-o smtpd_tls_wrappermode=yes
|
||||
-o smtpd_sasl_auth_enable=yes
|
||||
-o smtpd_sasl_type=dovecot
|
||||
-o smtpd_sasl_path=inet:{{ serveur_postfix_sasl_hote }}:{{ serveur_postfix_sasl_port }}
|
||||
-o smtpd_sasl_security_options=noanonymous
|
||||
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
|
||||
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
|
||||
when: serveur_postfix_submission_actif | bool
|
||||
notify: Redémarrer postfix
|
||||
|
||||
|
|
|
|||
|
|
@ -7,6 +7,22 @@ flux:
|
|||
pair: edge
|
||||
chiffrement: clair
|
||||
raison: "Contenu statique servi au navigateur via l'edge (TLS termine a l'edge)."
|
||||
# LE WEB FRONTAL EST LA PORTE PUBLIQUE DU LOCATAIRE (2026-09-29). L'edge expose les services
|
||||
# INTERNES a l'administration ; ce qui est publie sur l'Internet l'est ici, par l'adresse
|
||||
# publique que le site attribue au locataire (redirection a la frontiere). Le 443 attend son
|
||||
# TLS (Let's Encrypt) : la redirection est prete avant lui.
|
||||
- sens: ingress
|
||||
port: 80
|
||||
protocole: tcp
|
||||
pair: externe
|
||||
chiffrement: clair
|
||||
raison: "HTTP public — le premier contact d'un navigateur, et le defi HTTP d'ACME ; renvoie vers HTTPS."
|
||||
- sens: ingress
|
||||
port: 443
|
||||
protocole: tcp
|
||||
pair: externe
|
||||
chiffrement: tls-requis
|
||||
raison: "HTTPS public — les sites et services que le locataire publie sur l'Internet."
|
||||
- sens: egress
|
||||
port: 443
|
||||
protocole: tcp
|
||||
|
|
|
|||
|
|
@ -732,6 +732,19 @@ def generer_nftables(flux_par_role: dict[str, list[dict]], site: bool = False) -
|
|||
f"source — aucune regle emise pour {hote} (une source vide "
|
||||
f"ouvrirait le port a tous).", file=sys.stderr)
|
||||
continue
|
||||
# `externe` COMBINE A UNE SOURCE NOMMEE OUVRE A TOUS (2026-09-29). Le 25 de
|
||||
# Postfix est `[externe, client_smtp]`, la soumission `[flotte, externe]` : la
|
||||
# source nommee se resolvait, et la regle ne gardait QU'ELLE — l'Internet,
|
||||
# que la frontiere redirige et que Proxmox laisse passer, etait refuse par
|
||||
# l'hote lui-meme. « Tout le monde » inclut la flotte. Sauf le SSH : son
|
||||
# `externe` est celui de la gestion, reserve a l'administration partout.
|
||||
# CHEZ LES LOCATAIRES SEULEMENT : eux seuls exposent au public. Au site, la
|
||||
# soumission du relais courriel (declaree publique par le meme role) reste
|
||||
# a sa flotte — le site ne publie que ce qu'il redirige (`port_public`).
|
||||
_ssh = (str(fl.get("protocole", "tcp")).lower() != "icmp"
|
||||
and "22" in [str(x) for x in ports])
|
||||
if _public and not local and not _ssh and not site:
|
||||
saddr = ""
|
||||
for port in ports:
|
||||
if local and not srcs:
|
||||
continue # lo deja accepte
|
||||
|
|
|
|||
Loading…
Reference in a new issue