Introduzione
Seafile è una potente piattaforma open-source per la sincronizzazione e la condivisione di file che offre un’alternativa ai servizi di archiviazione cloud commerciali. Quando si implementa Seafile in un ambiente di produzione, solitamente si desidera posizionarlo dietro un reverse proxy come Traefik per gestire la terminazione SSL, il routing e funzionalità di sicurezza aggiuntive.
In questa guida, ti illustrerò la configurazione esatta di Traefik necessaria per esporre correttamente Seafile 12 su internet. Questa configurazione gestisce tutti e tre i componenti essenziali di Seafile: l’interfaccia web, il servizio di trasferimento file (seafhttp) e l’accesso WebDAV (seafdav).
Comprendere l’Architettura di Seafile
Prima di addentrarci nella configurazione, è importante capire che Seafile è costituito da più servizi che devono essere instradati correttamente:
- Interfaccia Web Principale - L’interfaccia primaria con cui gli utenti interagiscono con Seafile
- Seafhttp - Gestisce il caricamento e il download dei file
- Seafdav - Fornisce accesso WebDAV ai file
Ciascuno di questi servizi necessita delle proprie regole di routing in Traefik.
Configurazione di Traefik
Iniziamo con la configurazione completa di Traefik necessaria per Seafile 12:
http:
routers:
routerSeafile:
entryPoints: websecure
service: seafile
rule: "Host(`sf.mydomain.com`)"
middlewares:
- "HSTS"
tls: {}
routerSeafHttp:
entryPoints: websecure
service: seafhttp
rule: "Host(`sf.mydomain.com`) && PathPrefix(`/seafhttp`)"
middlewares:
- "HSTS"
- "seafhttp-strip-prefix"
- "removeDuplicateSlashes"
tls: {}
routerSeafdav:
entryPoints: websecure
service: seafdav
rule: "Host(`sf.mydomain.com`) && PathPrefix(`/seafdav`)"
middlewares:
- "HSTS"
tls: {}
services:
seafile:
loadBalancer:
servers:
- url: http://seafile.local:8000
serversTransport: insecureTransport
seafhttp:
loadBalancer:
servers:
- url: http://seafile.local:8082
serversTransport: insecureTransport
seafdav:
loadBalancer:
servers:
- url: http://seafile.local:8080
serversTransport: insecureTransport
Configurazione del Middleware
Oltre alle regole di routing principali, dobbiamo definire alcuni middleware per gestire la sicurezza e la manipolazione dei percorsi:
http:
middlewares:
HSTS:
headers:
stsSeconds: 15552000
stsIncludeSubdomains: true
forceSTSHeader: true
stsPreload: true
frameDeny: true
browserXssFilter: true
seafhttp-strip-prefix:
stripPrefix:
prefixes:
- "/seafhttp"
forceSlash: true
removeDuplicateSlashes:
replacePathRegex:
regex: "/{2,}"
replacement: "/"
serversTransports:
insecureTransport:
insecureSkipVerify: true
Analisi della Configurazione
Analizziamo le parti principali di questa configurazione:
1. Definizioni dei Router
Definiamo tre router separati, ciascuno gestisce un componente diverso di Seafile:
- routerSeafile: Instrada le richieste all’interfaccia utente principale di Seafile
- routerSeafHttp: Instrada le richieste di trasferimento file al servizio seafhttp
- routerSeafdav: Instrada le richieste WebDAV al servizio seafdav
2. Regole di Routing
Ogni router utilizza una combinazione di regole basate su nome host e percorso:
- Interfaccia principale: Corrisponde alle richieste a
sf.mydomain.com
- Seafhttp: Corrisponde alle richieste a
sf.mydomain.com/seafhttp
- Seafdav: Corrisponde alle richieste a
sf.mydomain.com/seafdav
3. Servizi
Ogni router è collegato al suo servizio corrispondente, che definisce dove Traefik dovrebbe effettuare il proxy delle richieste:
- Interfaccia principale: Proxy a
http://seafile.local:8000
- Seafhttp: Proxy a
http://seafile.local:8082
- Seafdav: Proxy a
http://seafile.local:8080
4. Middleware
Applichiamo diversi middleware importanti:
- HSTS: Impone l’uso di HTTPS da parte dei client
- seafhttp-strip-prefix: Rimuove il prefisso
/seafhttp
prima dell’inoltro al backend - removeDuplicateSlashes: Pulisce gli URL con slash duplicati. Questo è diventato necessario per me dopo la migrazione da Seafile 11 a 12, ma potrebbe non essere necessario per te.
5. Considerazioni sulla Sicurezza
- L’impostazione
insecureTransport
consente a Traefik di comunicare con i servizi interni utilizzando HTTP - Gli header HSTS garantiscono che i client utilizzino sempre HTTPS per le connessioni future
- Header di sicurezza aggiuntivi proteggono da vulnerabilità web comuni
Conclusione
Questa configurazione fornisce un modo sicuro ed efficiente per esporre Seafile 12 dietro Traefik. La configurazione gestisce correttamente tutti e tre i componenti di Seafile, garantendo che gli utenti possano accedere all’interfaccia web, caricare/scaricare file e utilizzare la funzionalità WebDAV.
Utilizzando Traefik come reverse proxy, si ottengono diversi vantaggi, tra cui la gestione automatica dei certificati SSL (se configurata), potenti capacità di routing e livelli di sicurezza aggiuntivi. Questa specifica configurazione si concentra sulle esigenze di routing specifiche di Seafile implementando al contempo le migliori pratiche di sicurezza.
Ricorda che questa configurazione presuppone che tu abbia già configurato Seafile correttamente e che sia accessibile internamente agli indirizzi definiti. La configurazione presuppone inoltre che tu abbia configurato correttamente Traefik con certificati SSL per il dominio specificato.