feat(auth): Authentik en hub utilisateur public — SSO de bout en bout (#82)

L'entrée unique devient la page « My applications » d'Authentik
(kaya.freeboxos.fr:9081) : login → tuiles des apps autorisées → SSO
vers Guacamole (:9080). Plus de comptes locaux Guacamole.

- Services LoadBalancer dédiés (MetalLB .201 Authentik / .202 Guacamole) :
  le DNAT par port ne peut pas router par Host derrière Traefik :80
- gateway : DNAT 9081→.201:9000 et 9080→.202:8080 + rate-limit par VIP
- Guacamole : endpoints OIDC sur l'URL publique canonique (LAN inclus,
  hairpin Freebox) + retour au SSO direct (openid prioritaire)
- doc : section « Accès externe » réécrite (hub, chaîne, config provider)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
ALI YESILKAYA 2026-07-07 11:25:56 +02:00 committed by GitHub
parent cf09e404ef
commit 5a4190faaa
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 92 additions and 40 deletions

View file

@ -77,12 +77,14 @@ table inet filter {
ip daddr 192.168.10.20 tcp dport { 7777, 8888 } ct state new,established,related accept
ip daddr 192.168.10.20 udp dport 7777 ct state new,established,related accept
# Portail public — trafic Internet DNATé (9080 → Traefik :80).
# Rate-limit sur les connexions neuves : anti-bruteforce/scan réseau,
# en plus de la protection intégrée de Guacamole. Le LAN domestique n'est
# pas concerné (accepté par la règle 192.168.1.0/24 plus haut).
ip daddr 192.168.10.200 tcp dport 80 ct state new limit rate 30/minute burst 15 packets accept
ip daddr 192.168.10.200 tcp dport 80 ct state established,related accept
# Hub public Authentik (:9081) + portail Guacamole (:9080) — trafic Internet
# DNATé vers les VIPs MetalLB dédiées. Rate-limit sur les connexions neuves :
# anti-bruteforce/scan réseau, en plus des protections applicatives. Le LAN
# domestique n'est pas concerné (règle 192.168.1.0/24 plus haut, hairpin
# Freebox inclus).
ip daddr 192.168.10.201 tcp dport 9000 ct state new limit rate 30/minute burst 15 packets accept
ip daddr 192.168.10.202 tcp dport 8080 ct state new limit rate 30/minute burst 15 packets accept
ip daddr { 192.168.10.201, 192.168.10.202 } ct state established,related accept
# WireGuard → lab : filtrage par pair (host_vars wireguard_peers)
{% for peer in wireguard_peers | selectattr('access', 'equalto', 'full') | list %}
@ -111,8 +113,10 @@ table ip nat {
iif {{ wan_interface }} tcp dport { 7777, 8888 } dnat to 192.168.10.20
iif {{ wan_interface }} udp dport 7777 dnat to 192.168.10.20:7777
# Portail Guacamole public — kaya.freeboxos.fr:9080 (redirection Freebox → s01)
iif {{ wan_interface }} tcp dport 9080 dnat to 192.168.10.200:80
# Hub Authentik + portail Guacamole publics (redirections Freebox → s01)
# kaya.freeboxos.fr:9081 → Authentik (VIP .201) ; :9080 → Guacamole (VIP .202)
iif {{ wan_interface }} tcp dport 9081 dnat to 192.168.10.201:9000
iif {{ wan_interface }} tcp dport 9080 dnat to 192.168.10.202:8080
}
chain postrouting {