domaine public -> frontal ; noms publics vers l adresse du locataire ; dorsal refuse les inconnus
Zone publique : les expositions pointent vers ip_publique (les NS restent au site). client_pki : l AC interne ne signe que le domaine interne. Dorsal : serveur par defaut 444. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
6d31842b83
commit
8186389309
6 changed files with 79 additions and 4 deletions
28
CHANGELOG.md
28
CHANGELOG.md
|
|
@ -1,5 +1,33 @@
|
|||
# CHANGELOG — Set-OPS
|
||||
|
||||
## 2026-09-29 (40) — Le domaine public désigne le frontal ; les noms publics pointent vers l'adresse du locataire ; le dorsal refuse les inconnus
|
||||
|
||||
**Point 3.** `domaines.yml` des deux locataires : le domaine public (`chezlepro.ca`,
|
||||
`technolibre.ca`) désigne `serveur_web_frontal` — l'edge garde les noms internes. Aucun nom
|
||||
public n'est encore exposé : rien de visible ne change avant le premier site.
|
||||
|
||||
**Les noms exposés d'une zone publique pointent vers l'adresse DU LOCATAIRE.** Ils
|
||||
pointaient vers `ip_publique_site` (`.62`), l'adresse du site — donc vers son DNS public, pas
|
||||
vers le frontal du locataire. `serveur_powerdns_ip_expositions` = `ip_publique` (repli
|
||||
`ip_publique_site`) ; les serveurs de noms (`dns1`) restent à l'adresse du site.
|
||||
|
||||
**Le DNS public, confirmé tel que l'exploitant le décrit** : chaque locataire tient sa zone
|
||||
sur son PowerDNS (instance publique, signée) ; le DNS public du site (`site-dnspub-01`, joint
|
||||
par `.62:53`) la reçoit par NOTIFY + transfert TSIG ; le registraire désignera ce serveur.
|
||||
Éprouvé à l'instant : le retrait de `git.chezlepro.ca` (entrée 35) déployé chez Chezlepro, le
|
||||
site a pris le nouveau numéro de série et ne sert plus ce nom.
|
||||
|
||||
**`client_pki` ne demande à l'AC interne que le domaine interne.** step-ca n'a aucune
|
||||
politique de noms : il aurait signé les noms publics du frontal, qui relèvent de Let's Encrypt.
|
||||
Filtre sur le champ `domaine` de l'exposition. Un premier essai par expression régulière
|
||||
vidait la liste de l'edge (l'échappement de `\.` ne passe pas de la même façon dans un bloc
|
||||
YAML replié) : vu au rendu, avant tout déploiement. Vérifié ensuite : l'edge garde ses six
|
||||
noms, chaque service du site le sien, le frontal le seul sien.
|
||||
|
||||
**Le dorsal refuse les noms inconnus** (444, comme l'edge et le frontal) ; le site Debian par
|
||||
défaut est retiré. Posé chez les deux locataires : sondes `sites-servis` et `apps-servies`
|
||||
saines (elles interrogent par nom et par port d'application, pas par le défaut).
|
||||
|
||||
## 2026-09-29 (39) — Le web frontal devient reverse proxy + WAF ; le dorsal porte les sites
|
||||
|
||||
**L'architecture, précisée par l'exploitant** : le web **dorsal** est le serveur des sites ;
|
||||
|
|
|
|||
|
|
@ -44,6 +44,10 @@ client_pki_cle: "{{ client_pki_steppath }}/certs/{{ client_pki_nom_cert }}.key"
|
|||
# service, et l'hote doit en faire partie. Un certificat qui revendiquerait le nom d'un
|
||||
# service rendu ailleurs serait une usurpation, pas une commodite.
|
||||
#
|
||||
# L'AC INTERNE NE SIGNE QUE LE DOMAINE INTERNE (2026-09-29). Le web frontal sert les noms
|
||||
# PUBLICS du locataire : ils relevent de Let's Encrypt. step-ca n'a aucune politique de noms
|
||||
# et les aurait signes — sans danger (personne dehors ne lui fait confiance), mais sans objet.
|
||||
#
|
||||
# ET LE SERVICE LUI-MEME, QUAND LES MACHINES Y VONT DIRECTEMENT (2026-09-29). Avec
|
||||
# `resolution_interne: service` (le site), le plancher et la zone menent le nom au service,
|
||||
# pas a l'edge : c'est lui qui doit le porter. Sans cela, une reconstruction de
|
||||
|
|
@ -58,6 +62,8 @@ client_pki_sans: >-
|
|||
| selectattr('edge', 'defined')
|
||||
| selectattr('fqdn', 'defined')
|
||||
| selectattr('edge', 'in', group_names)
|
||||
| selectattr('domaine', 'defined')
|
||||
| selectattr('domaine', 'equalto', domaine_interne | default(''))
|
||||
| map(attribute='fqdn') | list)
|
||||
+ (client_pki_expositions
|
||||
| selectattr('fqdn', 'defined')
|
||||
|
|
|
|||
|
|
@ -96,6 +96,10 @@ serveur_powerdns_sonde_tolerance: 900
|
|||
# recopie pas — il les recoit, comme ses adresses d'amorcage.
|
||||
serveur_powerdns_dns_public_site: "{{ dns_public_site | default('') }}"
|
||||
serveur_powerdns_ip_publique: "{{ ip_publique_site | default('') }}"
|
||||
# L'ADRESSE DES NOMS EXPOSES : celle DU LOCATAIRE (2026-09-29), que le site lui attribue et
|
||||
# que la frontiere redirige vers son web frontal. `ip_publique_site` ne porte plus que les
|
||||
# serveurs de noms (le DNS public du site). Repli sur elle si aucune n'est attribuee.
|
||||
serveur_powerdns_ip_expositions: "{{ ip_publique | default(ip_publique_site) | default('') }}"
|
||||
# Le nom du serveur de noms du site (contrat du site) : NS et SOA de chaque zone publique.
|
||||
serveur_powerdns_dns_public_nom: "{{ dns_public_nom | default('') }}"
|
||||
# Le NOM de la cle TSIG, identique des deux cotes — derive du nom du depot du locataire,
|
||||
|
|
|
|||
|
|
@ -28,11 +28,12 @@ $TTL {{ serveur_powerdns_ttl }}
|
|||
|
||||
{# UNE ZONE PUBLIQUE NE PORTE QUE DES ADRESSES PUBLIQUES.
|
||||
|
||||
Un nom expose sous ce domaine resout vers l'adresse publique du site — la frontiere le
|
||||
relaie ensuite a l'edge. Jamais vers l'adresse interne de l'edge : elle ne resoudrait
|
||||
pour personne dehors, et renseignerait sur le reseau dedans. #}
|
||||
Un nom expose sous ce domaine resout vers l'adresse publique DU LOCATAIRE (2026-09-29) —
|
||||
la frontiere la redirige vers son web frontal. Jamais vers une adresse interne : elle ne
|
||||
resoudrait pour personne dehors, et renseignerait sur le reseau dedans. Les serveurs de
|
||||
noms, eux, restent a l'adresse du site (ci-dessus). #}
|
||||
{% for expo in serveur_powerdns_expositions | default([]) if expo.domaine == zone_publique %}
|
||||
{{ expo.fqdn[:-(zone_publique | length + 1)] if expo.fqdn != zone_publique else '@' }} IN A {{ serveur_powerdns_ip_publique }}
|
||||
{{ expo.fqdn[:-(zone_publique | length + 1)] if expo.fqdn != zone_publique else '@' }} IN A {{ serveur_powerdns_ip_expositions }}
|
||||
{% endfor %}
|
||||
|
||||
{# LES ENREGISTREMENTS DECLARES AU PLAN : courriel, verifications, noms historiques.
|
||||
|
|
|
|||
|
|
@ -107,6 +107,30 @@
|
|||
label: "{{ item.nom }}"
|
||||
when: not ansible_check_mode
|
||||
|
||||
# LE SERVEUR PAR DEFAUT REFUSE TOUT NOM INCONNU (2026-09-29) — a la place du site Debian.
|
||||
- name: Retirer le site nginx par defaut de Debian
|
||||
ansible.builtin.file:
|
||||
path: /etc/nginx/sites-enabled/default
|
||||
state: absent
|
||||
notify: Recharger nginx serveur_web_dorsal
|
||||
|
||||
- name: Deployer le serveur par defaut de Set-OPS
|
||||
ansible.builtin.template:
|
||||
src: defaut.conf.j2
|
||||
dest: /etc/nginx/sites-available/000-defaut.conf
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0644"
|
||||
notify: Recharger nginx serveur_web_dorsal
|
||||
|
||||
- name: Activer le serveur par defaut de Set-OPS
|
||||
ansible.builtin.file:
|
||||
src: /etc/nginx/sites-available/000-defaut.conf
|
||||
dest: /etc/nginx/sites-enabled/000-defaut.conf
|
||||
state: link
|
||||
force: "{{ ansible_check_mode }}"
|
||||
notify: Recharger nginx serveur_web_dorsal
|
||||
|
||||
# LES SITES STATIQUES (2026-09-29) — repris du web frontal, qui ne sert plus rien lui-meme.
|
||||
- name: Creer la racine des sites statiques
|
||||
ansible.builtin.file:
|
||||
|
|
|
|||
12
roles/serveur_web_dorsal/templates/defaut.conf.j2
Normal file
12
roles/serveur_web_dorsal/templates/defaut.conf.j2
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
# Gere par Set-OPS (role serveur_web_dorsal). Ne pas editer a la main.
|
||||
#
|
||||
# UN NOM INCONNU N'OBTIENT RIEN (2026-09-29), comme a l'edge et au frontal. Le dorsal sert
|
||||
# la page d'accueil de Debian a tout nom qu'il ne porte pas : une requete mal adressee par
|
||||
# une des deux portes aurait recu une page au lieu d'un refus, et la sonde `sites-servis`
|
||||
# aurait pu prendre un site disparu pour un site servi.
|
||||
server {
|
||||
listen 80 default_server;
|
||||
listen [::]:80 default_server;
|
||||
server_name _;
|
||||
return 444;
|
||||
}
|
||||
Loading…
Reference in a new issue