SYNCTHING: il cloud P2P opensource
Cosa intendiamo per Cloud Storage?
Tra i servizi che offriamo ai nostri clienti ci sono quelli per la gestione e scambio di dati in cloud, in particolare per effettuare backup remoti, sicuri ed efficienti fuori sede oppure servizi per la sincronizzazione dei file, anche tra più dispositivi e modalità differenti.
Spesso, nelle aziende, specie se si utilizzano più computer, può diventare impellente avere un servizio di sincronizzazione per gestire i dati su macchine e dispositivi mobili diversi. Una delle soluzioni più utilizzate è quella di fare uso di servizi di storage online, i famosi servizi Cloud, davvero ormai molto diffusi, come Dropbox, Google Drive. OneDrive o Amazon s3 con i quali è possibile trasferire e sincronizzare i file da un dispositivo ad un altro. Il grosso limite di questi servizio è che una copia dei file risiederà necessariamente sul server del fornitore del servizio.
Ma come è possibile creare e gestire il proprio servizio di sincronizzazione file, senza coinvolgere utenti tersi, magari su dispositivi propri?
E’ possibile la tecnologia P2P, come quella famosa di BitTorrent Sync e sincronizzare i file direttamente tra computer senza bisogno di intermediari. Siamo in grado di offrire questo servizio ai clienti usando nostri server o mettendo a disposizione dei clienti host virtuali a loro dedicati, sia remoti che locali, per consentire questo meccanismo di sincronizzazione dati tra dispostivi, utilizzando ambienti ristretti al loro ambito. Un’ottima ed indipendente soluzione in questo caso è e è sicuramente Syncthing.
Syncthing per il nostro cloud storage personale
E’ importante far notare come Syncthing, non sia un vero programma per effettuare backup, ma piuttosto un sistema che consente la sincronizzazione P2P dei file. Ho voluto in questo documento cercare di utilizzarlo come sistema di backup, ma in realtà Syncthing non prevede un nodo centrale ma è un puro programma di peer to peer, anche se modificando le direzioni di sincronizzazione è possibile, mantenere una sorta di copie dei file remoti. Questo è bene che sia chiaro fina dall’inizio.
Obiettivo esplicito del progetto è quello di rendere il programma accessibile universalmente. E’ disponibile infatti, oltre che su GNU/Linux, anche su MacOS, Windows, Solaris FreeBSD, e OpenBSD. Inoltre è disponibile una versatile applicazione ufficiale per Android e distribuita tramite Play Store.
Installiamo Syncthing sul server Ubuntu
# echo "deb https://apt.syncthing.net/ syncthing stable" | sudo tee /etc/apt/sources.list.d/syncthing.list
# curl -s https://syncthing.net/release-key.txt | sudo apt-key add -
# apt-get update
# apt-get install syncthing
Avviare automaticamente la sincronizzazione con Systemd
Grazie a Systemd, non è più necessario avviare Syncthing manualmente, si può infatti creare un servizio che avvii in automatico la sincronizzazione P2P. Bisogna creare l’apposito demone tramite l’istruzione:
# nano /etc/systemd/system/syncthing@.service
e, nel file appena aperto, inserite il seguente codice:
[Unit]
Description=Syncthing - Open Source Continuous File Synchronization for %I
Documentation=man:syncthing(1)
After=network.target
[Service]
User=%i
ExecStart=/usr/bin/syncthing -no-browser -gui-address="0.0.0.0:8384" -no-restart -logflags=0
Restart=on-failure
SuccessExitStatus=3 4
RestartForceExitStatus=3 4
# Hardening
ProtectSystem=full
PrivateTmp=true
SystemCallArchitectures=native
MemoryDenyWriteExecute=true
NoNewPrivileges=true
[Install]
WantedBy=multi-user.target
Date, infine, le classiche istruzioni per abilitare il servizio, come vi ho spiegato in questa guida:
# systemctl daemon-reload
# systemctl start syncthing@$USER
# systemctl enable syncthing@$USER
In caso di esito positivo, dovreste avere un output simili digitando l’istruzione systemctl status syncthing@$USER
l# systemctl status syncthing@$USER
syncthing@root.service - Syncthing - Open Source Continuous File Synchronization for root
Loaded: loaded (/etc/systemd/system/syncthing@.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2021-02-27 18:45:07 UTC; 33ms ago
Docs: man:syncthing(1)
Main PID: 24678 (syncthing)
Tasks: 4 (limit: 2287)
Memory: 1.0M
CGroup: /system.slice/system-syncthing.slice/syncthing@root.service
└─24678 /usr/bin/syncthing -no-browser -gui-address=0.0.0.0:8384 -no-restart -logflags=0
Feb 27 18:45:07 vps-systemd[1]: syncthing@root.service: Scheduled restart job, restart counter is at 7.
Feb 27 18:45:07 vps-systemd[1]: Stopped Syncthing - Open Source Continuous File Synchronization for root.
Feb 27 18:45:07 vps-systemd[1]: Started Syncthing - Open Source Continuous File Synchronization for root.
Avviare e accedere alla Web GUI di amministrazione
Syncthing presenta una coma interfaccia CLI per gestire il servizio senza accedere all’interfaccia Web che però è caldamente consigliata specie in fase di configurazione: Per avviare come servizio remoto, ricordarsi di impostare la password:
# syncthing -gui-address=X.Y.Z.K:8384
- Invia& Ricevi: i file vengono scambiati e sincronizzati in ENTRAMBE LE DIREZIONI, tra i due dispositivi (peer to peer puro). Soluzione utile se si salvano i dati su più dispositivi e li si vuole sincronizzati localmente tutti allo stesso modo.
- Invia Soltanto: i file verranno sincronizzati solo sul dispositivo di destinazione. In questo modo i file sono protetti dalle modifiche effettuate negli altri dispositivi, ma le modifiche effettuate in questo dispositivo verranno inviate al server. E’ una modalità sincrona monodirezionale più simile alle procedure di backup.
- Ricevi solo: Le directory condivise sul server riceveranno solo i file, ma eventuali modifiche apportate localmente (in questo caso sul server) non verranno inviate ad altri dispositivi.
Attenzione!!
- Per usare il cloud storage con Syncthing in modalità backup, è consigliabile che i dispositivi remoti (client) usino l’opzione “Invia soltanto” ed il server quella “Ricevi Solo”.
- Ricordo che la definizione client e server è utilizzata impropriamente e solo per fare capire il tipo di configurazione adottato in questo esempio, ma sarebbe sempre e comunque più corretto parlare di nodi peer to peer.
- Se invece intendete usare Syncthing per condividere e gestire tra più dispositivi gli stessi file sincronizzati occorre lasciare selezionato il metodo “Invia & Ricevi”-
Installare il servizio su Windows
Il metodo più efficace ed elegante per usare Syncthing su Windows è usare SyncTrayzor: Windows tray utility, filesystem watcher & launcher). Installa l’applicazione ed gestibile tramite l’icona nella status bar, come i migliori e più moderni cloud
- impostare la password di protezione della Web GUI
- Aggiungere il dispositivo remoto o quello con cui intendiamo sincronizzare dati (cloud storage server)
- Condividere una o più directory da sincronizzare impostando il metodo di sincronizzazione voluto (Tipo di cartella)
Installare ed utilizzare la App su Android
Una colta installata l’APP è necessario richiedere i permessi richiesti. Di default su Android verrà condivisa la cartella Camera o comunque quella delle foto, tipico share per i cloud sui dispositivi mobili. Nulla vitra di aggiungere le cartelle desiderate.
A questo punto Cliccando su DISPOSITIVI e poi sul + per aggiungere il nostro cloud storage server, possiamo usare il QR code cliccando sull’icona e inquadrando con lo smartphone il QR Code del nostro dispositivo server, o accedendo all’interfaccia oppure ricevendo come immagine attraverso un canale di comuhciazi9one sicuro.
Adesso sul nostro cloud storage server arriverà la richiesta di autorizzazione del dispositivo come visto per il client Windows. Ovviamente dovremo acquetarla per consentire di usare il servizio di sincronizzazione.
Una volta aggiunto il dispositivo possiamo impostare il tipo di politica per la sincronizzazione della cartella.
A questo punto partirà la sincronizzazione della cartella impostata
Attenzione!!
- L’App sullo smartphone è molto utile ma può consumare parecchia batteria, per cui valutarne l’uso solo in determinati momenti
- Può consumare molta banda per cui è bene tenere attiva la sincronizzazione solo quando si è connessi ad una rete Wifi e disattivarla quando si usano i dati mobili.
Installare Syncthing su QNAP
Una cosa che apprezzo sempre molto è la possibilità di installare il programma anche sui QNAP e sui Synology, tramite l’App disponibile su Qnapclub. Basta scaricare l’App e installarla dall’interfaccia di gestione del QNAP
A questo punto viene caricata l’interfaccia che risponderà su http://IP-QNAP:8384/ ed il programma potrà essere gestito allo stesso modo degli altri sistemi operativi, mostrando la grande versatilità e distribuzione di questo sistema.
La sicurezza in Syncthing
- Impostare subito una robusta password al servizio (sempre e comunque) in qualsiasi ambiente giri il servizio.
- Utilizzare il protocollo HTTPS al posto dell’HTTP impostato di default
- Attivare un firewall sul sistema (o a monte se disponibile) per limitare l’accesso solo alle porte del servizio e in casi particolari solo ad indirizzi IP certificati.
- Utilizzare il servizio di Tunnel SSH se non si vuole aprire la porta del servizio di amministrazione a tutti.
- Installare il servizio fail2ban in grado di respingere in modo dinamico tentativi di attacco bruteforce
- Effettuare un monitoraggio attivo degli accessi al sistema, dei logo di Syncthing e dello stato generale del sistema, come consumo delle risorse e utilizzo della banda che sono spesso spia di tentavi di attacco
Impostazione Firewall
- Porta 22000/TCP: TCP based sync protocol traffic
- Porta 22000/UDP: QUIC based sync protocol traffic
- Porta 21027/UDP: for discovery broadcasts on IPv4 and multicasts on IPv6
Maggiori informazioni possono essere reperite sulle FAQ ufficiali
Tunneling tramite SSH
Se si dispone dell’accesso SSH alla macchina che esegue Syncthing ma si preferisce non aprire la porta della GUI Web al mondo esterno, è possibile accedervi tramite un tunnel SSH. Puoi avviare un tunnel con un comando come il seguente:
# ssh -L 9999: localhost: 8384 IP IP_Server
Questo si collegherà alla tua porta locale 9999 e inoltrerà tutte le connessioni da lì alla porta 8384 sulla macchina di destinazione. Funziona ancora anche se Syncthing è destinato all’ascolto solo su localhost.
Risorse e documentazione