1 Reverse proxy et TLS
Daniel Allaire edited this page 2026-07-04 15:33:18 -04:00

Reverse-proxy & TLS

Unité d'apprentissage. Moule : ① concept → ② Set-OPS → ③ transférable → ④ à toi de jouer.


① Le concept (générique)

Un reverse-proxy est un point d'entrée unique devant plusieurs services. Il :

  • route par nom (grafana.… → tel backend, forge.… → tel autre) — via l'en-tête Host / SNI ;
  • termine le TLS : il porte les certificats, parle HTTPS au client et (souvent) HTTP en interne ;
  • centralise journaux, limites de débit, en-têtes de sécurité (et un WAF éventuel).

Terminaison TLS = le chiffrement s'arrête au proxy ; derrière, le réseau interne est de confiance. Un seul endroit gère les certificats → simple et cohérent.


② Comment Set-OPS le fait

serveur_nginx déployé sur l'edge (infra-edge) est le reverse-proxy. Le point élégant : l'exposition est auto-dérivée. Déclarer expose: [icinga.lab.chezlepro.internal] sur une app génère tout :

expose ──> vhost nginx (route par nom)
      ──> SAN ajouté au certificat de l'edge (step-ca)
      ──> enregistrement A dans PowerDNS
      ──> alias plancher /etc/hosts

Le client parle HTTPS vérifié à l'edge ; l'edge relaie en HTTP au backend interne (Grafana, Forgejo, Keycloak…). Une seule ligne déclarative, toute la chaîne câblée. C'est une liaison (app → domaine) — voir l'unité Liaisons.


③ Pourquoi c'est transférable

Set-OPS Équivalents ailleurs
nginx reverse-proxy HAProxy · Traefik · Caddy · Apache · Envoy
edge + terminaison TLS tout load-balancer / ingress cloud, un NetScaler ADC
routage par SNI/Host mécanisme standard de tout proxy HTTP

Tu as appris le reverse-proxy, le routage par nom, la terminaison TLS — pas « nginx ».


④ À toi de jouer

  1. Route par nom. Deux noms, un seul edge (192.168.15.21) :
    curl -sI --resolve grafana.lab.chezlepro.internal:443:192.168.15.21 \
      --cacert /etc/step/certs/root_ca.crt https://grafana.lab.chezlepro.internal/ | head -1
    
    Change grafana en forge : même IP, backend différent. C'est le routage par SNI.
  2. Vois la terminaison TLS. Le certificat présenté est celui de l'edge (avec les SAN des exposés) : openssl s_client -connect 192.168.15.21:443 -servername grafana.lab… | openssl x509 -noout -text | grep -A1 'Subject Alternative'.
  3. Casse & répare. Arrête le backend (ex. systemctl stop grafana-server sur obs-01) et rouvre Grafana : l'edge répond 502 Bad Gateway (le proxy est là, le service non). Redémarre : ça remarche. Tu distingues le proxy de ce qu'il sert.

Pour aller plus loin (dépôt)

  • Rôle : roles/serveur_nginx ; les sites se déclarent côté nginx (serveur_nginx_sites).
  • Machinerie d'exposition : expositions_des_applications (dérive vhost + SAN + A + plancher).
  • Frontière publique (au-delà de l'edge interne) : docs/ + Étape B (OPNsense).