Introduzione
I servizi di streaming musicale come Navidrome offrono un modo fantastico per accedere alla propria collezione musicale personale da qualsiasi luogo. Tuttavia, l’esposizione di tali servizi a Internet comporta problemi di sicurezza.
Questa guida mostra come proteggere l’istanza di Navidrome utilizzando le funzionalità di Single Sign-On (SSO) di Authentik dietro il reverse proxy Traefik.
Implementando questa configurazione, aggiungerete un ulteriore livello di sicurezza al vostro server musicale, mantenendo al contempo un comodo accesso per gli utenti legittimi.
Presupposti e record DNS
Questa guida presuppone che abbiate già installato e configurato
- Authentik come identity provider
- Traefik come reverse proxy
- Navidrome come server di streaming musicale
Per gli scopi di questo tutorial, utilizzeremo i seguenti domini:
music.example.com
: L’istanza di Navidrome rivolta al pubblicoexample.com
: Il vostro dominio esternointernal.example.com
: Il vostro sottodominio interno
Comprendere il flusso di autenticazione
Il flusso di autenticazione funziona come segue:
- Un utente tenta di accedere a
music.example.com
- Traefik intercetta la richiesta e la inoltra ad Authentik tramite il middleware
authentik-forward-auth
- Se l’utente non è autenticato, viene reindirizzato alla pagina di login di Authentik
- Dopo l’autenticazione, Authentik rimanda l’utente a Navidrome con le intestazioni di autenticazione
- Navidrome legge queste intestazioni per identificare l’utente e concede l’accesso di conseguenza
È importante notare che la nostra configurazione esclude deliberatamente l’autenticazione per due percorsi specifici:
/share/
: Permette l’accesso anonimo ai link musicali condivisi/rest/
: Permette l’accesso alle API per applicazioni mobili come Symfonium o DSub
Questa autenticazione selettiva fornisce sia sicurezza che funzionalità, laddove necessario.
Configurazione di Authentik
Application e Provider
Per impostare Navidrome in Authentik:
-
Dal cruscotto di amministrazione di Authentik, selezionare “Applications” e fare clic su “Create with Provider”
-
Nella schermata “Application”:
- Inserire “Navidrome” come nome
- Impostare uno slug appropriato (ad esempio, “navidrome”)
- Aggiungere una descrizione e un’icona opzionale
-
Nella schermata “Choose a provider”:
- Selezionare “Proxy Provider”
-
Nella schermata “Configure Provider”:
- Inserire un nome per il provider (ad esempio, “navidrome-proxy”)
- Selezionare il flusso di autenticazione che si utilizza di solito
- Scegliere “Forward auth (single application)”
- Inserire
https://music.example.com
come host esterno
-
Saltare la schermata “Configure Bindings” e completare la procedura guidata.
Outpost
Quindi, collegare l’applicazione all’avamposto Authentik:
- Andate su “Outpost” nell’interfaccia di amministrazione di Authentik
- Modificare il “authentik Embedded Outpost”
- Nella sezione “Applications”, aggiungere l’applicazione Navidrome appena creata
- Salvare le modifiche
Configurazione di Traefik
La configurazione di Traefik gestisce l’instradamento del traffico e l’autenticazione. Ecco il setup:
# Configurazione di Traefik per Navidrome con Authentik SSO
http:
routers:
to-authentik-outpost:
entryPoints: webSecure
rule: "Host(`music.example.com`) && PathPrefix(`/outpost.goauthentik.io/`)"
service: authentik
priority: 200
middlewares:
- authentik-forward-auth
to-protected:
entryPoints: webSecure
rule: "Host(`music.example.com`) && !(PathPrefix(`/share/`) || PathPrefix(`/rest/`))"
service: navidrome
priority: 100
middlewares:
- authentik-forward-auth
to-subsonic:
entryPoints: webSecure
rule: "Host(`music.example.com`) && PathPrefix(`/rest/`)"
service: navidrome
priority: 150
to-navidrome:
entryPoints: webSecure
rule: "Host(`music.example.com`) && PathPrefix(`/share/`)"
service: navidrome
priority: 100
services:
navidrome:
loadBalancer:
servers:
- url: http://navidrome.internal.example.com:4533
authentik:
loadBalancer:
servers:
- url: https://authentik.internal.example.com:9443
middlewares:
authentik-forward-auth:
forwardAuth:
address: http://authentik.internal.example.com:9000/outpost.goauthentik.io/auth/traefik
trustForwardHeader: true
authResponseHeaders:
- X-authentik-username
- X-authentik-groups
- X-authentik-entitlements
- X-authentik-email
- X-authentik-name
- X-authentik-uid
- X-authentik-jwt
- X-authentik-meta-jwks
- X-authentik-meta-outpost
- X-authentik-meta-provider
- X-authentik-meta-app
- X-authentik-meta-version
Spiegazione della Configurazione
La configurazione di Traefik è composta da diversi componenti chiave:
Routers:
to-authentik-outpost
: Gestisce i percorsi specifici per le autorizzazioni con la massima priorità (200)to-protected
: Indirizza il traffico generale di Navidrome attraverso l’autenticazioneto-subsonic
: Consente l’accesso non autenticato alle API Subsonic (/rest/
)to-navidrome
: Permette l’accesso diretto ai link condivisi (/share/
)
Services:
navidrome
: Punta alla tua istanza Navidromeauthentik
: Punta alla tua istanza Authentik
Middleware:
authentik-forward-auth
: Il componente critico che inoltra le richieste di autenticazione ad Authentik e passa le informazioni sull’utente tramite intestazioni a Navidrome
La configurazione utilizza le priorità di instradamento per garantire che le eccezioni di autenticazione funzionino correttamente; i numeri più alti hanno la precedenza.
Configurazione di Navidrome
Affinché Navidrome si integri correttamente con questa configurazione di autenticazione, è necessario configurare due importanti impostazioni:
ReverseProxyWhitelist
: Impostare l’indirizzo IP del server Traefik per garantire che Navidrome si fidi delle intestazioni di autenticazioneReverseProxyUserHeader
: Impostare questo parametro suX-authentik-username
, in modo che Navidrome sappia quale header contiene il nome utente
È possibile configurare queste impostazioni nelle variabili d’ambiente o nel file di configurazione di Navidrome:
ND_REVERSEPROXYWHITELIST=<il_tuo_ip_traefik>
ND_REVERSEPROXYUSERHEADER=X-authentik-username
Per ulteriori opzioni di configurazione, consultare la documentazione di Navidrome.
Conclusione
Una volta completata la configurazione, l’istanza di Navidrome è ora protetta da Authentik SSO. Quando gli utenti visiteranno music.example.com
, verrà presentata loro la pagina di login di Authentik. Dopo l’autenticazione, otterranno l’accesso a Navidrome.
Uno degli aspetti più comodi di questa integrazione è il provisioning automatico degli utenti. Se un utente si autentica tramite Authentik ma non esiste ancora in Navidrome, verrà creato automaticamente un nuovo account utilizzando il nome utente di Authentik (e una password randomica).
Questo approccio garantisce una solida sicurezza, pur mantenendo un accesso comodo per gli utenti legittimi, con l’esclusione dell’autenticazione selettiva per funzionalità specifiche come i link condivisi e l’accesso alle app mobili.
Risorse Utilizzate
https://github.com/brokenscripts/authentik_traefik
https://www.navidrome.org/docs/usage/reverse-proxy/
https://docs.goauthentik.io/docs/add-secure-apps/providers/proxy/server_traefik