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 pubblico
  • example.com: Il vostro dominio esterno
  • internal.example.com: Il vostro sottodominio interno

Comprendere il flusso di autenticazione

Il flusso di autenticazione funziona come segue:

  1. Un utente tenta di accedere a music.example.com
  2. Traefik intercetta la richiesta e la inoltra ad Authentik tramite il middleware authentik-forward-auth
  3. Se l’utente non è autenticato, viene reindirizzato alla pagina di login di Authentik
  4. Dopo l’autenticazione, Authentik rimanda l’utente a Navidrome con le intestazioni di autenticazione
  5. 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:

  1. Dal cruscotto di amministrazione di Authentik, selezionare “Applications” e fare clic su “Create with Provider”

  2. Nella schermata “Application”:

    • Inserire “Navidrome” come nome
    • Impostare uno slug appropriato (ad esempio, “navidrome”)
    • Aggiungere una descrizione e un’icona opzionale
  3. Nella schermata “Choose a provider”:

    • Selezionare “Proxy Provider”
  4. 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
  5. Saltare la schermata “Configure Bindings” e completare la procedura guidata.

Outpost

Quindi, collegare l’applicazione all’avamposto Authentik:

  1. Andate su “Outpost” nell’interfaccia di amministrazione di Authentik
  2. Modificare il “authentik Embedded Outpost”
  3. Nella sezione “Applications”, aggiungere l’applicazione Navidrome appena creata
  4. 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’autenticazione
  • to-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 Navidrome
  • authentik: 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:

  1. ReverseProxyWhitelist: Impostare l’indirizzo IP del server Traefik per garantire che Navidrome si fidi delle intestazioni di autenticazione
  2. ReverseProxyUserHeader: Impostare questo parametro su X-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