1 aprile 2026 · 8 min lettura
Intelligenza Artificialeduck.ai promette chat AI senza tracciamento: nessun log, nessun IP, accordi con Anthropic e OpenAI. Ma DuckDuckGo ha già tradito questa fiducia una volta.
Self-HostingLa cloud sovranità europea è sovereignty washing: i datacenter sono in UE, le chiavi restano a Seattle. Gaia-X è fallito, NIS2 stringe. Il homelab risponde.
Self-HostingIscriviti alla newsletter per ricevere i migliori articoli direttamente nella tua inbox.
900k siti WordPress esposti a RCE critico, 500k a file read su wp-config.php. Se ospiti WordPress in homelab o su VPS, ecco cosa fare nei prossimi 30 minuti.
Questo post è realizzato in collaborazione conAuthentik, che ha fornito una licenza enterprise per i test. Le configurazioni, i gotcha e le opinioni sono basate sull'uso reale della mia infrastruttura.
Con Authentik SSO homelab si smette di gestire decine di utenti locali sparsi tra Grafana, Forgejo, n8n, Gitea e compagnia. Un solo identity provider, un solo login, un solo posto dove revocare un accesso.Sul nostro homelab — Proxmox, 14 container LXC, NetBird come VPN — abbiamo messo in produzione Authentik 2025.2 con licenza enterprise. Questo post racconta esattamente come funziona su due servizi reali: Grafana e Forgejo.

Il problema non è la sicurezza in astratto. È pratico: quando hai 14 servizi in produzione, ogni nuovo utente significa 14 account da creare, 14 password da gestire, 14 posti dove dimenticare di revocare l'accesso quando qualcuno lascia il progetto.
Authentik risolve questo a livello strutturale. Non è un proxy di autenticazione — è un identity provider completo con supporto OAuth2, OIDC, SAML, LDAP e SCIM. La differenza con soluzioni più leggere come Authelia è sostanziale: Authentik gestisce il consent flow, il role mapping granulare, l'impersonation per il debug, e con la licenza enterprise aggiunge RBAC avanzato e audit logging persistente. Authelia fa forward auth. Authentik fa identity management.
Authentik gira su CT 121 (IP) via Docker Compose: containerserver+worker+ PostgreSQL 16 + Redis (nota: da authentik 2025.10 Redis è stato completamente rimosso). Il dominio pubblico èauth.homelabz.cc, esposto tramite Nginx reverse proxy con HTTPS. L'hardware sottostante — Ryzen 7 1800X, 48 GB ECC, ZFS mirror SSD — regge senza problemi, ma Authentik è ragionevolmente leggero: a regime consuma meno di 400 MB RAM.
La licenza enterprise (20 utenti interni + 20 esterni, valida fino a marzo 2027) sblocca capability specifiche:can_save_media,can_asn,can_geo_ip,can_impersonateeis_enterprise. Il flagcan_impersonatevale oro in un homelab con più collaboratori: puoi assumere l'identità di un utente per riprodurre esattamente il suo contesto e diagnosticare problemi di accesso senza chiedergli la password.
Grafana 12.4.1 su CT 103. L'integrazione usa il providergeneric_oauthcon PKCE abilitato — lo standard che protegge il flusso OAuth2 aggiungendo un code_verifier/code_challenge per prevenire l'intercettazione del codice di autorizzazione. Scopes richiesti:openid email profile.
[auth.generic_oauth]
enabled = true
name = Authentik
client_id = <CLIENT_ID>
client_secret = <CLIENT_SECRET>
scopes = openid email profile
auth_url = https://auth.homelabz.cc/application/o/authorize/
token_url = https://auth.homelabz.cc/application/o/token/
api_url = https://auth.homelabz.cc/application/o/userinfo/
use_pkce = true
role_attribute_path = contains(groups[*], 'Grafana Admins') && 'Admin' || 'Viewer'
allow_sign_up = true
Il problema più comune — e meno documentato — è questo: seroot_urlnon è configurato ingrafana.ini, Grafana costruisce il redirect URI usandolocalhostcome hostname. Authentik riceve un redirect versohttp://localhost:3000/login/generic_oauthinvece dihttps://grafana.homelabz.cc/login/generic_oauth, non trova corrispondenza nell'Application configurata, e restituisceRedirect URI Error. Blocco totale, messaggio criptico.
[server]
root_url = https://grafana.homelabz.ccIl role mapping via JMESPath funziona esattamente come ci si aspetta: l'espressionecontains(groups[*], 'Grafana Admins') && 'Admin' || 'Viewer'assegna il ruolo Admin a chi appartiene al gruppo Grafana Admins in Authentik, Viewer a tutti gli altri. Nessuna configurazione manuale per ogni utente. Aggiungi un utente al gruppo — ha i permessi. Lo rimuovi — li perde.
Forgejo su CT 106 supporta OpenID Connect con auto-discovery, il che rende la configurazione più pulita rispetto a Grafana. Basta puntare all'URL di discovery di Authentik e il client recupera automaticamente tutti gli endpoint — token, userinfo, jwks.
forgejo admin auth add-oauth \
--name authentik \
--provider openidConnect \
--key <CLIENT_ID> \
--secret <CLIENT_SECRET> \
--auto-discover-url https://auth.homelabz.cc/application/o/forgejo/.well-known/openid-configuration \
--scopes "openid email profile" \
--auto-register \
--skip-local-two-faIl flag--auto-registercrea automaticamente l'account Forgejo al primo login OIDC.--skip-local-two-fadelega la 2FA ad Authentik — che la gestisce meglio, con TOTP e notifiche push integrate.
Forgejo aveva ancora il vecchio IP nella variabileROOT_URL— residuo di quando il container girava su un indirizzo diverso. Il risultato era identico al problema di Grafana: redirect verso un URL non registrato in Authentik, login bloccato. AggiornareROOT_URLall'indirizzo corretto risolve. Lezione: dopo ogni migrazione di container, verificare sempreROOT_URLprima di configurare SSO.
Terzo gotcha, meno frequente: se usi un reverse proxy davanti ad Authentik (Caddy, Nginx, Traefik), assicurati che l'header X-Forwarded-Proto sia impostato correttamente. Senza, i redirect HTTPS si rompono in modo non ovvio — la pagina di login torna vuota senza un messaggio d'errore utile. La documentazione ufficiale per reverse proxy copre i requisiti generali e include un esempio completo per Nginx.
Il RBAC enterprise va oltre i gruppi semplici. Puoi definire policy granulari — per esempio, permettere l'accesso a Grafana solo agli utenti che soddisfano più condizioni simultanee: appartenenza al gruppo, IP di origine nella subnet management, orario di accesso. Le policy vengono valutate in pipeline con logica AND/OR configurabile tramite la UI dei Flow.
L'audit logging persistente è l'altra feature che giustifica la licenza enterprise in un contesto con più collaboratori. Ogni evento di autenticazione — login riuscito, fallito, token revocato, consent aggiornato — viene registrato con timestamp, utente, IP e applicazione. Non serve un SIEM esterno per avere visibilità su chi ha fatto cosa e quando.
Dopo settimane di utilizzo, il punto di forza non è la feature singola — è la riduzione di attrito operativo. Aggiungere un nuovo collaboratore significa creare un utente in Authentik e assegnarlo ai gruppi giusti. Nessun provisioning manuale su ogni servizio. La revoca è istantanea e completa: disabilita l'account in Authentik, quella persona perde l'accesso a tutti i servizi integrati in un colpo solo.
La nostra infrastruttura gira suNetBird VPN con tre subnet separate— management, backend, Docker. Authentik si integra naturalmente con questo schema: puoi creare policy che limitano l'accesso alle applicazioni interne solo agli utenti connessi dalla subnet management, senza modificare i servizi applicativi. Zero codice custom, tutto via Flow editor.
Come nota a margine: Authentik può proteggere anche una dashboard analytics self-hosted comeMatomo su PikaPodstramite OAuth2 proxy. È nella lista dei prossimi step del nostro homelab — centralizzare l'autenticazione anche lì.
Authentik ha un problema di complessità iniziale concreto. La UI è densa, la terminologia — Flow, Stage, Provider, Application, Source, Outpost — richiede tempo per essere interiorizzata, e la documentazione assume un certo livello di familiarità con i protocolli di identity. Per chi parte da zero su OAuth2 e OIDC, le prime ore sono dure.
Il worker è un processo separato obbligatorio — senza di lui le task in background non girano: email, cleanup dei token scaduti, notifiche eventi. Non un difetto di design, ma va messo in conto nell'architettura Docker. Il consumo di risorse a regime: con la configurazione precedente (PostgreSQL + Redis + server + worker) si attestava attorno a 600-700 MB RAM. Da authentik 2025.10, Redis è stato completamente rimosso come dipendenza, riducendo il footprint complessivo.
Un identity provider centralizzato riduce la superficie di attacco — ma la concentra. Se Authentik è compromesso, l'attaccante ha accesso a tutto. Non è un argomento contro Authentik, è un argomento per hardening serio: Authentik dietro VPN (non esposto direttamente su Internet senza protezione aggiuntiva), 2FA obbligatoria per tutti gli utenti, aggiornamenti regolari, backup del database PostgreSQL su storage separato.
Il post sullavulnerabilità ZimaOS e CasaOS con 22 CVEè un promemoria utile di cosa succede quando si espone su Internet software homelab non mantenuto. Vale anche per Authentik: la versione 2025.2 è in produzione da due mesi, gli aggiornamenti vanno applicati.
Documentazione Authentik:goauthentik.io/docs— Enterprise licensing:goauthentik.io/docs/enterprise— Grafana generic_oauth:grafana.com/docs/grafana/latest/setup-grafana/configure-security/configure-authentication/generic-oauth— Forgejo OAuth CLI:forgejo.org/docs/latest/admin/oauth2-provider
Authentik non è il percorso di minima resistenza. Richiede tempo per essere configurato correttamente, va mantenuto, e i gotcha come il root_url di Grafana costano ore la prima volta. Ma una volta in produzione, la gestione degli accessi smette di essere un problema operativo. Un utente, un login, un posto dove guardare. Su un homelab con 14 servizi in produzione e più collaboratori, questo vale il prezzo dell'investimento iniziale — e la licenza enterprise aggiunge le feature che contano davvero quando la struttura cresce.