# Middlewares mutualisés pour les routes publiques funklab.online. # Traefik est HORS ArgoCD → appliquer à la main (comme redirect.yaml) : # kubectl apply -f k8s/infra/traefik/middlewares.yaml # Référencés depuis les IngressRoutes des apps via { name: , namespace: infra } # (nécessite providers.kubernetesCRD.allowCrossNamespace: true dans values.yaml). --- # Rate-limit par IP client réelle (dépend de externalTrafficPolicy: Local sur le # service Traefik). Bucket à jetons : ~100 req/min soutenu, pointe (1er chargement # d'assets) jusqu'à 200. Anti-scan / anti-bruteforce volumétrique en bord ; la # protection fine du login reste côté Authentik/Guacamole. Ajustable si 429 gênants. apiVersion: traefik.io/v1alpha1 kind: Middleware metadata: name: ratelimit namespace: infra spec: rateLimit: average: 100 period: 1m burst: 200 # sourceCriterion par défaut = IP distante (remoteAddr) = IP client réelle # grâce à externalTrafficPolicy: Local. Pas de depth XFF (aucun proxy amont # de confiance entre Internet et Traefik : Freebox + DNAT sont en L4). --- # En-têtes de sécurité HTTP pour les apps publiques. Attaché uniquement aux routes # funklab.online (pas aux routes internes *.lab.local en HTTP). apiVersion: traefik.io/v1alpha1 kind: Middleware metadata: name: security-headers namespace: infra spec: headers: # HSTS 1 an + sous-domaines (tout *.funklab.online est en HTTPS). Pas de preload # (n'engage pas l'apex sur les listes HSTS des navigateurs, réversible). stsSeconds: 31536000 stsIncludeSubdomains: true contentTypeNosniff: true browserXssFilter: true referrerPolicy: strict-origin-when-cross-origin # SAMEORIGIN (pas DENY) : Grafana embarque ses propres panels en iframe. customFrameOptionsValue: SAMEORIGIN