Avviare un task snapshot da remoto

squalo

Dabbler
Joined
Jul 24, 2019
Messages
22
Salve a tutti, vorrei sapere (io non ci sono riuscito) se è possibile configurare un task che effettui lo snapshot ma che poi debba essere avviato da remoto!
Spiego il mio scenario:
Effettuo una SINCRONIZZAZIONE a specchio dei dati su 2 hd in raid (ovvero dal server eseguo una sincronizzazione tramite ftp sul freenas e in questo modo rendo nuovamente disponibile il server in tempi brevi)
Poi vorrei effettuare un backup differenziale o incrementale di questi dati sincronizzati!
Siccome non ho trovato nulla in freenas che mi permetta di fare un backup incrementale o differenziale di questi dati, ho pensato di fare direttamente degli snapshot!
Adesso vorrei capire come configurare il tutto (non posso settare dei giorni ben specifici, ne un orario preciso perchè, essendo il gestionale di una farmacia, essa esegue dei turni!
Per ovviare al problema dei turni ho creato uno script (praticamente un cron) che può avviare precisamente i task nel momento in cui certamente la farmacia non è in funzione, quindi il mio problema è: come posso configurare uno snapshot/backup differenziale/backup incrementale e avviarlo da remoto (possibilmente evitando di utilizzare nome utente e password)?

GRAZIE
 
Last edited:

proto

Patron
Joined
Sep 28, 2015
Messages
269
onfigurare un task che effettui lo snapshot ma che poi debba essere avviato da remoto!

Hai due possibilità:

1) replication tasks, cioè send/receive tra due sistemi, via ssh auth. Fai riferimento alla documentazione, perché da quando li usavo io mi sembra sia cambiato qualcosa.

2) se la tua necessità è di lanciare comandi da remoto potresti guardare le API ---> http://api.freenas.org/resources/storage.html#replication <--- della tua versione di FreeNAS (11.x spero).
Ma senza autenticazione (via HTTPS) non puoi fare nulla ovviamente. Puoi però usare un utente dedicato.

Comunque, gli snapshots sono già una sorta di backup incrementale/differenziale e diventano davvero backup quando sono replicati (il tutto detto molto superficialmente).
 

glauco

Guru
Joined
Jan 30, 2017
Messages
524
come posso configurare uno snapshot/backup differenziale/backup incrementale e avviarlo da remoto (possibilmente evitando di utilizzare nome utente e password)?
Ciao, ho riletto il tuo post più volte ma ancora non mi è chiara la tua situazione, quindi la mia risposta potrebbe non essere del tutto pertinente.
Se i dati di cui fare il backup stanno sul NAS, imposti un periodic snapshot task.
Se vuoi snapshottare su un'altra FreeNAS box, vai di replication task.
Se vuoi snapshottare su una macchina non-FreeNAS, imposti un rsync task.
Con rsync ti dovrai sbattere un po' per impostare l'autenticazione con chiave pubblica/privata, ma non è niente di troppo complicato.
In tutti i casi, testa bene il tutto prima e fai molte verifiche!
Se vuoi lanciare i comandi manualmente anziché in maniera programmata, io ho trovato un'ottima soluzione nell'app per Android Juice SSH, che permette, con un solo tap, di loggarsi via ssh e lanciare un "frammento", cioè uno o più comandi/script.
 

squalo

Dabbler
Joined
Jul 24, 2019
Messages
22
Hai due possibilità:

1) replication tasks, cioè send/receive tra due sistemi, via ssh auth. Fai riferimento alla documentazione, perché da quando li usavo io mi sembra sia cambiato qualcosa.

2) se la tua necessità è di lanciare comandi da remoto potresti guardare le API ---> http://api.freenas.org/resources/storage.html#replication <--- della tua versione di FreeNAS (11.x spero).
Ma senza autenticazione (via HTTPS) non puoi fare nulla ovviamente. Puoi però usare un utente dedicato.

Comunque, gli snapshots sono già una sorta di backup incrementale/differenziale e diventano davvero backup quando sono replicati (il tutto detto molto superficialmente).

Grazie proto per la risposta.
1)Il mio problema è diverso, i file io li ho già sul nas e se non erro il replication task serve per backuppare i dati su di un altro dispositivo!
2)Probabilmente così risolverei, ma non ne vengo a capo, potresti aiutarmi un pò?
Mettiamo caso che io crei un utente (non so se sia possibile dargli il solo potere di creare snapshot) potrei fare accesso e avviare il task dello snapshot in automatico? Se si come?

GRAZIE

Ciao, ho riletto il tuo post più volte ma ancora non mi è chiara la tua situazione, quindi la mia risposta potrebbe non essere del tutto pertinente.
Se i dati di cui fare il backup stanno sul NAS, imposti un periodic snapshot task.
Se vuoi snapshottare su un'altra FreeNAS box, vai di replication task.
Se vuoi snapshottare su una macchina non-FreeNAS, imposti un rsync task.
Con rsync ti dovrai sbattere un po' per impostare l'autenticazione con chiave pubblica/privata, ma non è niente di troppo complicato.
In tutti i casi, testa bene il tutto prima e fai molte verifiche!
Se vuoi lanciare i comandi manualmente anziché in maniera programmata, io ho trovato un'ottima soluzione nell'app per Android Juice SSH, che permette, con un solo tap, di loggarsi via ssh e lanciare un "frammento", cioè uno o più comandi/script.

Grazie glauco per la risposta! Allora, si i dati da backuppare sono già sul nas, il problema è che non posso impostare su freenas esattamente quando dover fare lo snapshot perchè la sincronizzazione non viene fatta precisamente tutti i gironi alla stessa ora! Ad esempio la farmacia non è aperta tutte le domeniche ma quando è di turno è aperta (quindi quando sarà aperta dovrà essere fatto lo snapshot, mentre quando sarà chiusa non dovrà essere fatto).

Per ovviare a questo problema ho creato uno script e riesco esattamente ad avviare dei comandi a mio piacimento nel momento giusto.

Ma tutto questo è relativo...la mia domanda parte da qui:

Ho dei file già presenti sul nas, posso far partire la creazione di uno snapshot da remoto (senza che sia stato configurato un cron).

Più o meno questo è il mio problema

Tramite ssh vorrei evitare perchè tutto questo avverrà in automatico e lo sto facendo per evitare di utilizzare dei dati di accesso che permettano a malintenzionati di poter accedere ai file nel nas (es. cryptolocker).
Avevo pensato, ad esempio, a richiamare uno script presente nel nas che avvii il processo di creazione dello snapshot attraverso un link.
ES:
Effettuo sincronizzazione dei file dal server al nas --> Terminata la sincronizzazione, dal server, vorrei richiamare uno script all'ip del freenas ES: http://ipdelnas/scriptcheavvialosnapshot

FINE
GRAZIE
 
Last edited:

glauco

Guru
Joined
Jan 30, 2017
Messages
524
Scusa ma non ho capito qual è il problema se al momento dello snapshot la farmacia dovesse essere chiusa.
 

proto

Patron
Joined
Sep 28, 2015
Messages
269
Effettuo sincronizzazione dei file dal server al nas --> Terminata la sincronizzazione, dal server, vorrei richiamare uno script all'IP del freenas ES: http://ipdelnas/scriptcheavvialosnapshot

FreeNAS espone le API... ma non puoi farlo senza auth.
ovviamente la macchina client che lancia il comando deve essere ad accesso ristretto.
 

squalo

Dabbler
Joined
Jul 24, 2019
Messages
22
Hai due possibilità:

1) replication tasks, cioè send/receive tra due sistemi, via ssh auth. Fai riferimento alla documentazione, perché da quando li usavo io mi sembra sia cambiato qualcosa.

2) se la tua necessità è di lanciare comandi da remoto potresti guardare le API ---> http://api.freenas.org/resources/storage.html#replication <--- della tua versione di FreeNAS (11.x spero).
Ma senza autenticazione (via HTTPS) non puoi fare nulla ovviamente. Puoi però usare un utente dedicato.

Comunque, gli snapshots sono già una sorta di backup incrementale/differenziale e diventano davvero backup quando sono replicati (il tutto detto molto superficialmente).
Scusa ma non ho capito qual è il problema se al momento dello snapshot la farmacia dovesse essere chiusa.

Il problema è che non posso creare un task di snapshot con il cron! Con un semplice cron non è possibile prevedere il turno della farmacia!
Allora partiamo da 0 io posso sincronizzare con una precisione del 100% il gestionale sul nas, ovvero posso avviare correttamente dei comandi nel momento giusto. Ma questi "momenti giusti" non sono ricorsivi, ovvero non si presentano settimanalmente/mensilmente/annualmente con la stessa cadenza quindi con una semplice pianificazione tramite cron tab non riuscirei a fare tutto!

Non posso dire adesso "tra 10 domeniche la farmacia sarà aperta e quindi non eseguire lo snapshot" (attraverso freenas!)
Sono in grado di farlo solo attraverso uno script che ho fatto io in php.

Dovrei aggiungere a questo script l'avvio dello snapshot sul freenas! Questo è tutto.
Grazie

FreeNAS espone le API... ma non puoi farlo senza auth.
ovviamente la macchina client che lancia il comando deve essere ad accesso ristretto.
Sapresti aiutarmi con passaggi precisi anche se generici? Grazie
 

glauco

Guru
Joined
Jan 30, 2017
Messages
524
Ok, ho capito una cosa in più: non vuoi fare snapshot se la farmacia è aperta... ma perché? Che problema ci sarebbe?
Se i dati stanno già sul NAS non vedo quale può essere il problema.
 

squalo

Dabbler
Joined
Jul 24, 2019
Messages
22
Ok, ho capito una cosa in più: non vuoi fare snapshot se la farmacia è aperta... ma perché? Che problema ci sarebbe?
Se i dati stanno già sul NAS non vedo quale può essere il problema.
Che ne farebbe tanti a vuoto (dovrei impostare per forza anche le domeniche ad esempio) e non sarei mai certo che la sincronizzazione si sia conclusa e se si sia conclusa correttamente per poi poter avviare lo snapshot!
 

proto

Patron
Joined
Sep 28, 2015
Messages
269
mi sono perso un po'... ok, sono sistemi eterogenei, quindi niente replica.

Sapresti aiutarmi con passaggi precisi anche se generici?

ti posso solo consigliare di leggere bene il manuale delle API REST e decidere quale sia la tua strategia adottare e quale linguaggio ti è più comodo per creare il client.
nel manuale c'è l'esempio in python che utilizza requests per creare una GET, nel resto del manuale tutti gli esempi di POST e DELETE.
naturalmente nel creare una POST per lo snapshot dovrai costruire la richiesta con i parametri passati in json.

inizia con una GET:

Code:
import requests

print(requests.get('https://IP_NAS/api/v1.0/storage/volume/', auth=('root', 'PASSWORD'), verify=False).json())


ti permette di vedere lo stato dei volumi e disabilita verifica SSL se il cert non è autorevole.

magari puoi agganciare allo script che esegue FTP il task successivo di snapshot remoto.

considerazione finale:
purtroppo non puoi fare a meno di usare e di inserire in uno script la password di root. è chiaramente un limite di sicurezza e tutto dipende dal grado di confidenzialità. se sono dati sensibili (presumo lo siano per una farmacia) è ovviamente una rogna da affrontare.
quindi occhio a come implementi la soluzione, se vorrai adottare una roba del genere.

mah... non vedo nemmeno io il problema dei tanti snapshots a vuoto.
 

glauco

Guru
Joined
Jan 30, 2017
Messages
524
Che ne farebbe tanti a vuoto (dovrei impostare per forza anche le domeniche ad esempio) e non sarei mai certo che la sincronizzazione si sia conclusa e se si sia conclusa correttamente per poi poter avviare lo snapshot!
Non vedo quale sarebbe il problema se facesse tanti snapshot a vuoto, dato che non occuperebbero spazio.
Cito da https://www.ixsystems.com/documentation/freenas/11.2-U5/tasks.html#periodic-snapshot-tasks :
if little data changes, new snapshots take up very little space. For example, a snapshot where no files have changed takes 0 MB of storage, but as changes are made to files, the snapshot size changes to reflect the size of the changes.

Poi, rileggendo il tuo primo post:
ho creato uno script (praticamente un cron) che può avviare precisamente i task nel momento in cui certamente la farmacia non è in funzione, quindi il mio problema è: come posso configurare uno snapshot/backup differenziale/backup incrementale e avviarlo da remoto (possibilmente evitando di utilizzare nome utente e password)?
dato che dici che hai già creato questo script e l'hai messo in crontab, hai bisogno solo di sapere qual è il comando da riga di comando per lanciare gli snapshot?
 

proto

Patron
Joined
Sep 28, 2015
Messages
269
Non vedo quale sarebbe il problema se facesse tanti snapshot a vuoto, dato che non occuperebbero spazio.

concordo.

dato che dici che hai già creato questo script e l'hai messo in crontab
io ho capito che lo script è in php: però credo che lo script giri sul server sorgente...
 

squalo

Dabbler
Joined
Jul 24, 2019
Messages
22
Scusate, forse avevo sbagliato a capire il senso degli snapshot...
La mia visione di snapshot (correggetemi se sbaglio): quando creo uno snapshot esso riproduce, in un unico file, lo stato 1:1 in cui riversano i file quando viene generato! Se così non fosse (è quindi sarebbe praticamente come una sincronizzazione a specchio) concorderete con me che, se si prende un cryptolocker, sarà tutto da buttare!

dato che dici che hai già creato questo script e l'hai messo in crontab, hai bisogno solo di sapere qual è il comando da riga di comando per lanciare gli snapshot?
Non è presente nel crontab, ho detto che è simile ad un crontab (gli orari e i giorni esatti in cui eseguire i comandi li prende da un db mysql)


mi sono perso un po'... ok, sono sistemi eterogenei, quindi niente replica.

ti posso solo consigliare di leggere bene il manuale delle API REST e decidere quale sia la tua strategia adottare e quale linguaggio ti è più comodo per creare il client.
nel manuale c'è l'esempio in python che utilizza requests per creare una GET, nel resto del manuale tutti gli esempi di POST e DELETE.
naturalmente nel creare una POST per lo snapshot dovrai costruire la richiesta con i parametri passati in json.

inizia con una GET:

Code:
import requests

print(requests.get('https://IP_NAS/api/v1.0/storage/volume/', auth=('root', 'PASSWORD'), verify=False).json())


ti permette di vedere lo stato dei volumi e disabilita verifica SSL se il cert non è autorevole.

magari puoi agganciare allo script che esegue FTP il task successivo di snapshot remoto.

considerazione finale:
purtroppo non puoi fare a meno di usare e di inserire in uno script la password di root. è chiaramente un limite di sicurezza e tutto dipende dal grado di confidenzialità. se sono dati sensibili (presumo lo siano per una farmacia) è ovviamente una rogna da affrontare.
quindi occhio a come implementi la soluzione, se vorrai adottare una roba del genere.

mah... non vedo nemmeno io il problema dei tanti snapshots a vuoto.

Quello che devo fare è creare un backup dei file che non possa subire l'effetto di un cryptolocker

La mia strategia infatti si compone in questo modo:
-Sync del gestionale sul Nas (che in caso di azione di malintenzionati può anche essere infettato tanto non sarà importante)
-Il NAS dovrà creare copie di backup inaccessibili da remoto! <<---Questo è il mio problema attuale e vorrei capire se è possibile risolverlo.
La mia idea quindi era di configurare il nas in modo da “esser pronto” ad eseguire le operazioni di backup tramite uno “start” lanciato da remoto.
Questo è ovviamente possibile nel caso di webserver/sistemi linux (se viene scritto tutto a mano su misura).
Vi faccio un esempio semplicissimo:
Creo uno script che copia un file in un altra cartella in php
exec(‘Copy c:\file d:\’)
Lo metto nel webserver, lo apro da remoto e il gioco è fatto (senza usare nessuna autenticazione perchè lo script è quello e non potrà essere modificato)
Non so se ho reso l'idea.

Quindi partendo dai file che sono già presenti sul nas come potrei ottenere ciò?

Vi ringrazio enormemente per l'aiuto e il tempo dedicatomi!!
 
Last edited:

proto

Patron
Joined
Sep 28, 2015
Messages
269
il senso degli snapshot
su questo io ti invito a leggere la documentazione di ZFS.
in breve: sono delle "istantanee" del sistema e non sono una tipologia o una metodologia di backup e non lo sostituiscono affatto.
questa è la premessa, avevo detto che sono una "sorta", ma solo ad un livello molto superficiale e soprattutto "temporaneo".

il problema virus/malware: la disinfezione la devi fare a priori. se mandi in backup il file banana.exe che contiene un malware e non lo sottoponi prima a scansione te lo porterai dietro per i secoli a venire. e qui ZFS non ci azzecca molto...
fai in modo di fare scansione AV prima di inviare i files. se vuoi usare un'ulteriore barriera di protezione attivi la scansione anche sul NAS e usi almeno un paio di AV diversi.

Non so se ho reso l'idea.
ed è un modo insicuro quello di lanciare senza alcun tipo di auth dei comandi di sistema...

-Sync del gestionale sul Nas (che in caso di azione di malintenzionati può anche essere infettato tanto non sarà importante)
-Il NAS dovrà creare copie di backup inaccessibili da remoto! <<---Questo è il mio problema attuale e vorrei capire se è possibile risolverlo.

mi sembra che su questo punto ti abbiamo risposto...
la sync tu la fai tramite FTP, @glauco ti proponeva rsync, e condivido.
il task di snapshots lo attivi a fine "sync" tramite comandi di API, se proprio devi, ma a questo punto te lo sconsiglio vivamente se intendi lanciare comandi da un server che tu stesso ritieni non importante.
meglio ancora se te ne freghi e imposti gli snapshots ogni tot ore anche nei giorni di chiusura, perché sono a "costo zero" e imposti su una macchina client un controllo per verificare il listato degli snapshots. macchina solo accessibile a te.

che altro si puo' dire?
 

squalo

Dabbler
Joined
Jul 24, 2019
Messages
22
su questo io ti invito a leggere la documentazione di ZFS.
in breve: sono delle "istantanee" del sistema e non sono una tipologia o una metodologia di backup e non lo sostituiscono affatto.
questa è la premessa, avevo detto che sono una "sorta", ma solo ad un livello molto superficiale e soprattutto "temporaneo".
Bene è un istantanea di tutti i file, quindi non dovrebbe "incrementarsi" bensì dovrebbe generare un nuovo snapshot completo di tutti i file (come avevo immaginato). Ergo giornalmente comunque avrei la modifica di pochissimi kb di file (il gestionale a 00.00 aggiorna qualche file) quindi avrei la generazione di nuovi snapshot anche se sono cambiati pochi kb insignificanti! Correggetemi se sbaglio

il problema virus/malware: la disinfezione la devi fare a priori. se mandi in backup il file banana.exe che contiene un malware e non lo sottoponi prima a scansione te lo porterai dietro per i secoli a venire. e qui ZFS non ci azzecca molto...
fai in modo di fare scansione AV prima di inviare i files. se vuoi usare un'ulteriore barriera di protezione attivi la scansione anche sul NAS e usi almeno un paio di AV diversi.
Il mio problema non sono i virus... ma la possibilità di essere infettati da un cryptovirus (il cui risultato è diverso dell'essere infettati da un trojan, un malware o uno spyware)


ed è un modo insicuro quello di lanciare senza alcun tipo di auth dei comandi di sistema...
WHAT??? Quello che intendo io è un insieme di comandi semplici prestabiliti, al di fuori di quelli non puo essere eseguito nulla perchè non si ha alcun accesso al nas (è come se stessi aprendo una pagina internet per intenderci! Quindi viene eseguito solo il codice contenuto nella pagina ed è MOLTOOO SICURO). In questo modo un malintenzionato avrà solo la possibilità di avviare ulteriori snapshot/backup/o qualsiasi comando che avrò prestabilito io senza poter interagire in alcun modo
[/QUOTE]

mi sembra che su questo punto ti abbiamo risposto...
la sync tu la fai tramite FTP, @glauco ti proponeva rsync, e condivido.
Questo è ininfluente
il task di snapshots lo attivi a fine "sync" tramite comandi di API, se proprio devi, ma a questo punto te lo sconsiglio vivamente se intendi lanciare comandi da un server che tu stesso ritieni non importante.
Cosa intendi per "se intendi lanciare comandi da un server che tu stesso ritieni non importante"
Provo a spiegarmi meglio: io sincronizzo i file tramite FTP su di un HD nel FreeNAS (potrei sia prelevarli dal nas utilizzando l'auth del Server sia viceversa ovvero dal Server passo i file al FreeNAS tramite auth). Ma questa sincronizzazione non ha una reale importanza se non quella di essere utilizzata per la creazione di backup! Quindi qualora un cryptolocker dovesse criptare i file anche se questi venissero sincronizzati sul NAS non mi importerebbe nulla perchè avrei molteplici backup che non possono essere stati infettati! Spero che stavolta mi sia spiegato bene

meglio ancora se te ne freghi e imposti gli snapshots ogni tot ore anche nei giorni di chiusura, perché sono a "costo zero" e imposti su una macchina client un controllo per verificare il listato degli snapshots. macchina solo accessibile a te.
che altro si puo' dire?
Non ho capito cosa intendi per "imposti su una macchina client un controllo per verificare il listato degli snapshot" (a che pro? cioe perchè dovrei leggermi gli snapshot effettuati con un altra macchina accessibile solo a me? non ha senso)

GRAZIE
 

proto

Patron
Joined
Sep 28, 2015
Messages
269
ti va di fare uno schema semplice di come vorresti far interagire i sistemi?
 

glauco

Guru
Joined
Jan 30, 2017
Messages
524
Ciao @squalo .
Con gli snapshot ottieni lo scopo di avere un sistema a prova di ransomware perché se un giorno dovessi scoprire che i dati del gestionale sono stati criptati e sincronizzati con FreeNAS, basta che ripulisci il PC infetto, su FreeNAS fai un rollback dell'ultimo snapshot con i dati corretti e poi sincronizzi da FreeNAS al PC.
Perché non li provi, così capisci come funzionano?
 

squalo

Dabbler
Joined
Jul 24, 2019
Messages
22
ti va di fare uno schema semplice di come vorresti far interagire i sistemi?
Ho allegato lo schema spero si capisca meglio
Ciao @squalo .
Con gli snapshot ottieni lo scopo di avere un sistema a prova di ransomware perché se un giorno dovessi scoprire che i dati del gestionale sono stati criptati e sincronizzati con FreeNAS, basta che ripulisci il PC infetto, su FreeNAS fai un rollback dell'ultimo snapshot con i dati corretti e poi sincronizzi da FreeNAS al PC.
Perché non li provi, così capisci come funzionano?
Sisi, ma io ho ben capito cosa siano e come si utilizzino ma non ne ho mai avuto bisogno!
Il mio problema è che dovrei creare un task in cui indico solo il da farsi senza specificare quando farlo, è poi dovrei attivarlo da remoto
 

Attachments

  • Immagine.png
    Immagine.png
    65.8 KB · Views: 376

glauco

Guru
Joined
Jan 30, 2017
Messages
524
dovrei creare un task in cui indico solo il da farsi senza specificare quando farlo, è poi dovrei attivarlo da remoto
@squalo , è molto più semplice di quello che pensi!
Ti colleghi a FreeNAS via ssh e lanci il comando per fare lo snapshot. La sintassi di base è zfs snapshot dataset@snapshotname .

Per farlo in modo rapido, è sempre valido il consiglio che ti ho dato nel mio primo post:
Se vuoi lanciare i comandi manualmente anziché in maniera programmata, io ho trovato un'ottima soluzione nell'app per Android Juice SSH, che permette, con un solo tap, di loggarsi via ssh e lanciare un "frammento", cioè uno o più comandi/script.

Consiglio la lettura della man page del comando zfs: https://www.freebsd.org/doc/handbook/zfs-zfs.html
 

squalo

Dabbler
Joined
Jul 24, 2019
Messages
22
@squalo , è molto più semplice di quello che pensi!
Ti colleghi a FreeNAS via ssh e lanci il comando per fare lo snapshot. La sintassi di base è zfs snapshot dataset@snapshotname .

Per farlo in modo rapido, è sempre valido il consiglio che ti ho dato nel mio primo post:


Consiglio la lettura della man page del comando zfs: https://www.freebsd.org/doc/handbook/zfs-zfs.html
Ma in questo modo sono costretto ad inserire i dati di accesso della shell ssh del nas nello script, che è quello che vorrei evitare!
 
Top