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:

  1. Interfaccia Web Principale - L’interfaccia primaria con cui gli utenti interagiscono con Seafile
  2. Seafhttp - Gestisce il caricamento e il download dei file
  3. 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.