feat(portal): accès Internet direct — kaya.freeboxos.fr:9080

Choix simplicité (2026-07-07) : exposition directe du portail plutôt que
le VPN (WireGuard reste déployé mais dormant, sans redirection Freebox).

- gateway : DNAT 9080/tcp → Traefik (192.168.10.200:80) + rate-limit
  30 connexions neuves/min sur le trafic Internet (LAN non concerné)
- IngressRoute guacamole : host kaya.freeboxos.fr accepté
- Guacamole : formulaire local en premier ("*, openid") — l'accès externe
  passe par des comptes locaux, Authentik n'est pas exposé (SSO = LAN)
- doc : section « Accès externe » dans admin/k8s/auth-portal.md

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
alkatrazz 2026-07-07 11:08:44 +02:00
parent 2181e3ee80
commit 080441ef41
5 changed files with 42 additions and 16 deletions

View file

@ -85,20 +85,37 @@ kubectl -n auth create secret generic guacamole-secret \
3. Settings → Users : les comptes Authentik apparaissent après leur **premier login**
(`POSTGRESQL_AUTO_CREATE_ACCOUNTS=true`) → leur assigner les connexions (READ).
## Accès externe (Internet) — `kaya.freeboxos.fr:9080`
Le portail est joignable depuis Internet **sans VPN** (choix assumé 2026-07-07,
simplicité d'abord — le VPN WireGuard reste dispo, cf. `admin/infra/wireguard.md`) :
- **Chaîne** : `kaya.freeboxos.fr:9080` → redirection Freebox `9080/tcp → funk-s01`
→ DNAT nftables `→ 192.168.10.200:80` (Traefik) → IngressRoute (host
`kaya.freeboxos.fr` accepté) → Guacamole
- **Auth externe = comptes locaux Guacamole** (Settings → Users → New user + mot de
passe fort + cocher ses connexions). **Authentik n'est PAS exposé** : le SSO ne
fonctionne que du LAN (le lien « OpenID » échoue depuis Internet — normal).
- **Garde-fous** : rate-limit nftables (30 connexions neuves/min) + anti-bruteforce
Guacamole (5 échecs → ~5 min) + mots de passe forts obligatoires. ⚠️ HTTP **non
chiffré** : mots de passe des comptes locaux interceptables en théorie — ne pas
réutiliser un mot de passe important, et envisager TLS (vrai domaine + Let's
Encrypt) ou l'option TOTP de Guacamole si l'usage s'installe.
## Pièges / notes
1. **Tout est en HTTP** (pas de TLS sur `*.lab.local`) — OK pour un LAN privé, mais ne
**jamais** exposer le portail sur Internet en l'état.
1. **Tout est en HTTP** (pas de TLS) — accepté y compris pour l'accès Internet
(cf. section ci-dessus), avec garde-fous réseau + mots de passe dédiés.
2. **JWKS via le Service interne** (`authentik.auth.svc.cluster.local:9000`) : l'appel
serveur→serveur de Guacamole ne dépend pas de la résolution `lab.local` des pods.
L'issuer, lui, reste `http://auth.lab.local/...` (doit matcher le claim `iss` des
tokens émis via le navigateur).
3. **`EXTENSION_PRIORITY="openid, *"`** : arrivée sur le portail = **redirection
immédiate vers Authentik** (pas de formulaire local). Conséquence : `guacadmin` est
inaccessible — l'admin Guacamole passe par un compte SSO auquel on a coché
**« Administer system »** (fait pour `Alkatrazz`). Prérequis absolu avant d'activer :
avoir donné ce droit, sinon plus d'admin. Dépannage si Authentik est HS : remettre
`"*, openid"` dans `k8s/apps/guacamole/deployment.yaml` (le formulaire local revient).
3. **`EXTENSION_PRIORITY="*, openid"`** : formulaire local affiché en premier (requis
pour les comptes locaux de l'accès Internet), lien « OpenID » en dessous pour le SSO
LAN. La variante `"openid, *"` (redirection SSO immédiate, testée puis abandonnée
le 2026-07-07) est incompatible avec l'accès externe sans exposer Authentik.
NB : le compte SSO `Alkatrazz` a « Administer system » — admin possible par les
deux chemins.
4. **Le slug de l'application Authentik doit être exactement `guacamole`** : Authentik
le génère depuis le nom (« Portail consoles » → `portail-consoles`) et l'issuer/JWKS
deviennent faux → log Guacamole `Non 200 status code (404) ... /o/guacamole/jwks/`