GNU/Linux >> Linux Esercitazione >  >> Linux

Aggiungi solo backup con borg a un altro VPS o server dedicato

Questo tutorial mostrerà come eseguire il backup dei dati su un server, denominato server principale , su un altro host, qui denominato server di backup , con il programma di backup del software gratuito Borg . Il server di backup sarà configurato in modo tale che il server principale durante il normale utilizzo possa solo aggiungere nuovi dati e non eliminare o modificare i vecchi backup. Questa funzione di sola aggiunta, combinata con il fatto che i backup sono archiviati su un server separato in una posizione separata, rende i backup protetti dalla perdita di dati, ad esempio da incidenti naturali o da un attacco di hacker contro il server principale.

I prerequisiti per seguire questa guida sono usare Debian Stretch (9) o Debian Buster (10) e avere due server disponibili, un server principale da cui vengono presi i backup e un altro server di backup dove verranno archiviati gli archivi di backup. Questi due server dovrebbero trovarsi in posizioni separate per una protezione ottimale.

Questa guida inizierà con la configurazione sul server di backup nella prima sezione. Nella seconda sezione, configureremo il server principale, quindi eseguiremo un backup, un ripristino di prova e mostreremo come sfoltire manualmente i vecchi archivi di backup.

1 Configura il server di backup

1.1 Installa borg e crea un nuovo utente borgbackup

Sul server di backup (il server in cui devono essere archiviati i backup) installa Borg in un terminale root con questo comando:

apt install borgbackup

Quindi, scegli una password per l'utente borg che creeremo presto. (È obbligatorio avere una password per ogni utente, tuttavia questa password non verrà quasi mai utilizzata, poiché normalmente ci collegheremo al server di backup con una chiave SSH.) Se vuoi generare una password casuale di 64 caratteri usa questo comando :

< /dev/urandom tr -dc A-Za-z0-9 | head -c${1:-64};echo;

Copia la password per l'utente borg mostrata negli appunti e salvala in un luogo sicuro da qualche altra parte rispetto al server stesso.

Ora creeremo l'utente borgbackup:

adduser borgbackup

Quando ricevi una domanda sulla password, incolla la password che hai copiato in precedenza, premi Invio e quindi incolla nuovamente la password seguita da Invio. Non compilare nient'altro, basta premere Invio per rispondere alle seguenti domande.

1.2 Genera chiavi SSH per l'utente borgbackup

Ora dobbiamo diventare il nuovo utente con su:

su borgbackup
cd

Quindi, generiamo una nuova coppia di chiavi SSH per l'utente:

ssh-keygen -t ed25519

Dopo aver premuto Invio, riceverai una serie di domande. Lascia vuote le risposte, continua semplicemente a premere Invio più volte fino al termine del comando. Non impostare alcuna passphrase per la chiave, premi Invio anche su quella domanda.

1.3 Creare la directory di backup

Ora è il momento di creare la directory in cui verranno archiviati i backup, che nella terminologia borg è definita come repository borg . Chiameremo semplicemente la directory borgbackup, ma potresti invece scegliere di denominarla con il nome host del tuo server principale.

cd
mkdir borgbackup
chmod go-rwx borgbackup
chmod u+rwx borgbackup

2 Configura il server principale e come si connette al server di backup

2.1 Installa Borg

Ora passiamo dal lavorare sul server di backup al lavoro invece sul server principale.

Sul server principale (il server di cui vuoi fare i backup) installa Borg in un terminale root con questo comando:

apt install borgbackup

Successivamente avremo bisogno dell'indirizzo IP esterno del server principale (quello in cui ci troviamo). Si prega di copiare questo indirizzo IP in modo da averlo subito a disposizione. Se non ricordi l'indirizzo IP esterno del server principale, esegui questo comando per visualizzarlo:

wget -qO- http://ipecho.net/plain | xargs echo

2.2 Consenti al server principale di accedere al server di backup

Comandi che esegui sul server principale

Ora prepareremo l'autenticazione della chiave SSH in modo che sia possibile connettersi dal server principale al server di backup. Per prima cosa, usa questo comando per mostrare la chiave SSH pubblica dell'utente root sul server principale:

cat ~/.ssh/id_*.pub

Se hai una chiave pubblica SSH per root dovresti ora vedere questa chiave visualizzata. Copia la chiave negli appunti, dovrai incollarla in seguito in un file sul server di backup.

Se non vedi la chiave visualizzata, devi generare la coppia di chiavi. Ad esempio, esegui questo comando in questo caso:ssh-keygen -t ed25519 seguito da ripetute pressioni di Invio.

Ora, dobbiamo dire al server di backup di consentire l'accesso dal server principale (dove siamo in questo momento) con la chiave SSH pubblica. Per fare ciò, inserisci questo comando, ma prima sostituisci BACKUPHOSTNAME con il nome host del tuo server di backup:

ssh-copy-id -i ~/.ssh/id_*.pub [email protected]BACKUPHOSTNAME

Connettiti al server di backup

Ora dovrai inserire la password per l'utente borgbackup che hai creato nel passaggio 1.1. Fatto ciò, dovrebbe essere possibile accedere direttamente al server di backup come utente borgbackup senza alcuna password. Ora, verifica che ciò sia possibile digitando questo comando, sostituendo BACKUPHOSTNAME con il nome host del tuo server di backup:

ssh [email protected]BACKUPHOSTNAME

Comandi che esegui sul server di backup

Ora rafforzeremo ulteriormente la sicurezza limitando l'accesso solo dall'indirizzo IP del server principale utilizzando questa chiave.

Rimani sul server di backup ed esegui questo comando:

nano ~/.ssh/authorized_keys

Ora dovresti vedere una lunga riga che inizia con ssh. Verificare che il cursore si trovi all'inizio del file. Aggiungi i seguenti dati sulla stessa riga, prima della chiave ssh, ma prima sostituisci SERVERIPADDRESS con l'indirizzo IP del tuo server (che hai ricercato all'inizio di questa sezione):

from="SERVERIPADDRESS",command="borg serve --append-only --restrict-to-path /home/borgbackup/borgbackup/",no-pty,no-agent-forwarding,no-port-forwarding,no-X11-forwarding,no-user-rc 

Assicurati che ci sia uno spazio tra la sezione che hai aggiunto e la sezione preesistente che inizia con ssh che segue in seguito. Quindi salva il file con Ctrl+O ed esci con Ctrl+X. Ora abbiamo limitato l'accesso al server di backup in due modi. In primo luogo, è consentito l'accesso solo all'indirizzo IP del server principale. In secondo luogo, tramite l'opzione --append-only è consentito solo aggiungere dati al repository borg, ma non sono consentite cancellazioni e alterazioni.

Disconnettiti dal server di backup e torna al server principale

Esegui questo comando per uscire dal server di backup e tornare al server principale:

exit

2.3 Scegli una password per il repository borg

Un repository borg è la posizione in cui sono archiviati i backup. È protetto da una password del repository borg, che sai che devi scegliere. La password è necessaria per eseguire nuovi backup e accedere a quelli vecchi. Puoi creare tu stesso una password (scegli un minimo di 20 caratteri per una sicurezza ottimale) o generare casualmente una password lunga 64 caratteri con questo comando:

< /dev/urandom tr -dc A-Za-z0-9 | head -c${1:-64};echo;

Copia la password del repository borg negli appunti contrassegnandola e premendo Ctrl+C. È essenziale salvare la password del repository borg in un luogo sicuro perché senza questa password non puoi accedere ai tuoi backup! Quindi salva subito una copia della password borg da qualche altra parte che non sui tuoi server, ad esempio in un gestore di password (come KeePass) sul tuo computer.

2.4 Creare il repository borg

Nella terminologia Borg, la posizione in cui sono archiviati i backup è denominata borg repository . La password verrà ora impostata come variabile ambientale in preparazione alla creazione di questo repository. Sostituisci PASSWORD con la tua password attuale ed esegui il comando seguente come utente root del tuo server principale:

export BORG_PASSPHRASE='PASSWORD'

Crea il repository borg in questo modo, ma prima sostituisci BACKUPHOSTNAME con il nome host del tuo server di backup:

borg init -e repokey-blake2 [email protected]BACKUPHOSTNAME:/home/borgbackup/borgbackup/

Tutto è stato ora preparato per utilizzare borg per i backup, che sarà l'argomento della sezione seguente.

3 Backup dal server principale

3.1 Esegui il backup manualmente

Nell'esempio che segue, verrà eseguito il backup dell'intero sistema del server principale, ad eccezione di alcune directory che non sono rilevanti per il backup.

Assicurati di aver effettuato l'accesso come root sul tuo server principale prima di continuare. Innanzitutto, imposteremo la variabile ambientale per la password del repository borg tramite questo comando (sostituisci PASSWORD con la tua password effettiva del repository borg:

export BORG_PASSPHRASE='PASSWORD'

Quindi eseguiremo il seguente comando per eseguire un backup completo del sistema. Si prega di regolare le esclusioni di directory, quelle che iniziano con --exclude, in base alle proprie esigenze. Ad esempio, potresti voler aggiungere un'esclusione della directory /mnt aggiungendo --exclude=mnt Tieni presente che non dovresti inserire la prima barra nel modello di esclusione, ad es. scrivi mnt invece di /mnt. Devi anche cambiare il BACKUPHOSTNAME al nome host effettivo del server di backup. Dobbiamo prima eseguire un cd / comando, poiché borg normalmente avvia il backup dalla directory da cui viene eseguito.

cd / && borg create --stats --progress --compress lz4 [email protected]BACKUPHOSTNAME:/home/borgbackup/borgbackup/::`hostname`-`date +%Y-%m-%d-%H-%M-%S` ./ --exclude=dev --exclude=mnt/borgbackup -exclude=proc --exclude=run --exclude=root/.cache/ --exclude=sys --exclude=tmp && cd

La prima volta che viene eseguito il backup ci vorrà del tempo (fino a diverse ore se si dispone di una grande quantità di dati di cui eseguire il backup). Vedrai una riga di stato che aggiorna rapidamente esattamente quale file borg sta elaborando nel backup. Dalla seconda volta in poi i backup saranno molto più rapidi, poiché verranno trasmesse solo le modifiche dall'ultimo backup.

3.2 Pianifica il backup con cron

Ovviamente è meglio eseguire un backup automatico a intervalli regolari, piuttosto che doversi ricordare di eseguire backup manuali. Per fare ciò, creiamo prima uno script di shell che esegue il processo di backup, che poi modifichiamo con l'editor nano come utente root sul server principale:

touch /usr/local/bin/borgbackup.sh
chmod go-rwx /usr/local/bin/borgbackup.sh
chmod u+rwx /usr/local/bin/borgbackup.sh
nano /usr/local/bin/borgbackup.sh

Inserisci queste righe nel nuovo script della shell:

#!/bin/sh
export BORG_PASSPHRASE='PASSWORD'
cd / && borg create --stats --progress --compress lz4 [email protected]BACKUPHOSTNAME:/home/borgbackup/borgbackup/::`hostname`-`date +%Y-%m-%d-%H-%M-%S` ./ --exclude=dev --exclude=proc --exclude=run --exclude=root/.cache/ --exclude=mnt/borgmount --exclude=sys --exclude=tmp && cd

Devi sostituire PASSWORD con la password del tuo repository borg, sostituisci BACKUPHOSTNAME con il nome host del tuo server di backup e infine adatta i modelli di esclusione alle tue esigenze - potresti voler aggiungere --exclude=mnt per escludere la directory /mnt dal backup. Salva il file nell'editor nano premendo Ctrl+O, quindi esci con Ctrl+X.

Quindi, testa lo script eseguendolo dal terminale:

/usr/local/bin/borgbackup.sh

Per programmare un backup alle 02:00 ogni notte, aggiungi lo script della shell di backup che abbiamo appena creato a /etc/crontab :

nano /etc/crontab

Quindi aggiungi una nuova riga al crontab con il processo di backup:

# Backup via Borg to backup server 
00 02           * * *   root    /usr/local/bin/borgbackup.sh

4 Ripristina i file (mentre sei connesso al server principale)

4.1 Mostra un elenco di backup effettuati

Non si dispone di un sistema di backup funzionante fino a quando non si è verificato che è possibile ripristinare i dati dai backup. Pertanto il nostro prossimo passo è controllare il backup che abbiamo fatto in precedenza. Questo sarà fatto dal terminale di root sul server principale. Lo faremo montando l'archivio di backup come un file system aggiuntivo, ma prima controlleremo l'elenco dei backup effettuati creando uno script di shell come utente root sul tuo server principale:

touch /usr/local/bin/borglist.sh
chmod go-rwx /usr/local/bin/borglist.sh
chmod u+rwx /usr/local/bin/borglist.sh
nano /usr/local/bin/borglist.sh

Inserisci quanto segue nel nuovo script della shell, sostituendo PASSWORD con la password del repository borg e BACKUPHOSTNAME con il nome host del tuo server di backup:

#!/bin/sh
export BORG_PASSPHRASE='PASSWORD'
borg list -v [email protected]BACKUPHOSTNAME:/home/borgbackup/borgbackup/

Salva il file con Ctrl+O seguito da Ctrl+X. Quindi esegui lo script della shell in questo modo:

/usr/local/bin/borglist.sh

Ora dovresti vedere un elenco dei backup che sono stati effettuati. Se è stato eseguito il tuo primo backup, dovresti quindi vedere un elemento nell'elenco. Ora contrassegna e copia il nome dell'archivio negli appunti. Trovi il nome dell'archivio nella prima colonna, è composto dal nome host del tuo server principale seguito da data e ora, in questo formato:mainhostname-2019-01-31-12-59-59 .

3.4 Verifica/ripristino dei dati

Ora monteremo l'intero repository borg come montaggio del file system FUSE. Ciò significa che il repository borg, inclusi tutti i file di cui è stato eseguito il backup, diventa un filesystem, che possiamo attraversare e ispezionare tramite normali comandi come ls e cd.

Per poter montare facilmente il repository borg, creeremo una scorciatoia dei comandi sotto forma di script di shell. Crea e modifica lo script della shell in questo modo:

touch /usr/local/bin/borgmount.sh
chmod go-rwx /usr/local/bin/borgmount.sh
chmod u+rwx /usr/local/bin/borgmount.sh
nano /usr/local/bin/borgmount.sh

Quindi inserisci le righe sottostanti nello script schell, ma prima cambia la PASSWORD sotto alla password del tuo repository borg e cambia BACKUPHOSTNAME al nome host del tuo server di backup:

#!/bin/sh
mkdir -p /mnt/borgbackup
export BORG_PASSPHRASE='PASSWORD'
borg mount [email protected]BACKUPHOSTNAME:/home/borgbackup/borgbackup/ /mnt/borgbackup

Salva il file con Ctrl+O seguito da Ctrl+X. Quindi esegui lo script della shell in questo modo:

/usr/local/bin/borgmount.sh

Il repository borg dovrebbe ora essere montato in /mnt/borgbackup - puoi verificarlo usando cd e ls:

cd /mnt/borgbackup
ls

Ora dovresti vedere una directory in cui risiede il tuo backup. Vai in quella directory con cd (sostituisci DIRECTORYNAME con il nome della directory che vedi visualizzata come risultato del comando ls che hai appena inserito) e poi usa ls per vedere il contenuto:

cd DIRECTORYNAME
ls

Ora sarai in grado di vedere l'ultimo archivio (l'ultimo backup effettuato). Puoi confrontare con diff che il backup di un file è stato eseguito correttamente, ad esempio per /etc/fstab, con questo comando:

diff etc/fstab /etc/fstab

Se non ottieni alcun output da diff, i due file sono identici e il backup ha funzionato per quel file. Se invece hai modificato il file dall'ultimo backup vedrai quali righe differiscono nei file.

Se vuoi puoi ripristinare i file dal backup, semplicemente usando il comando cp per copiare i file dalla sottodirectory di /mnt/borgbackup in in cui ti trovi in ​​questo momento nel terminale.

Infine, creeremo uno script per smontare il borg fuse mount.

Crea e modifica lo script della shell in questo modo:

touch /usr/local/bin/borgumount.sh
chmod go-rwx /usr/local/bin/borgumount.sh
chmod u+rwx /usr/local/bin/borgumount.sh
nano /usr/local/bin/borgumount.sh

Quindi inserisci le righe seguenti nello script schell:

#!/bin/sh
cd ~
umount /mnt/borgbackup
rmdir /mnt/borgbackup

Salva il file con Ctrl+O seguito da Ctrl+X. Quindi esegui lo script della shell in questo modo:

/usr/local/bin/borgumount.sh

Il borg fuse mount è ora smontato e tu sei stato posizionato nella directory /root/ del terminale.

4 Elimina i vecchi backup (richiede l'accesso sia al backup che al server principale)

Ora dobbiamo passare avanti e indietro tra il server di backup e il server principale. Innanzitutto, iniziamo con i comandi sul server di backup.

Dopo un po', la dimensione dei backup può aumentare. Per motivi di sicurezza, non è consentito al server principale eliminare automaticamente i vecchi backup. Tuttavia, possiamo consentire temporaneamente la rimozione dei vecchi archivi di backup quando necessario, in modo da risparmiare spazio su disco nel server di backup.

Questo processo di rimozione è chiamato a potare nella terminologia borg. Il processo di sfoltimento inizia nel server di backup, consentendo l'accesso temporaneo in lettura-scrittura. Quindi ci colleghiamo al server principale per emettere il comando di potatura. Infine, accediamo nuovamente al server di backup per disabilitare l'accesso in lettura e scrittura in modo che i vecchi backup siano nuovamente protetti dall'eliminazione o dalla modifica.

4.1 Consenti accesso temporaneo in lettura+scrittura (fatto dal server di backup)

Ora lavoreremo sul server di backup.

Quindi connettiti al server di backup e accedi come root. Per consentire l'accesso in lettura e scrittura è necessario modificare il file /home/borgbackup/.ssh/authorized_keys sul server di backup. Emetti questi comandi per diventare l'utente di borgbackup, esegui un backup del file e quindi modifica il file con nano:

su borgbackup
cd
cp -a ~/.ssh/authorized_keys ~/.ssh/authorized_keys.bak
nano ~/.ssh/authorized_keys

Ora dovresti vedere nell'editor nano una lunga riga che inizia con from=. Taglia la linea premendo Ctrl+K, quindi premi Ctrl+U e ancora una volta Ctrl+U in modo da avere due linee identiche. Premere due volte il tasto Su sulla tastiera per posizionare il cursore sulla prima riga. Quindi digita un carattere # per commentare la prima riga. Quindi, premi il tasto Giù sulla tastiera per arrivare alla seconda riga. Qui, dovresti spostarti a destra con il tasto Destra sulla tastiera finché non ti trovi al primo - in --append-only. Quindi premere ripetutamente il tasto Canc per eliminare l'opzione --append-only . Il file dovrebbe assomigliare approssimativamente a questo, nota che abbiamo commentato la prima riga e che --append-only viene eliminato dalla seconda riga:

#from="SERVERIPADDRESS",command="borg serve --append-only --restrict-to-path /home/borgbackup/borgbackup/",no-pty,no-agent-forwarding,no-port-forwarding,no-X11-forwarding,no-user-rc ssh ... (the line continues) ...
from="SERVERIPADDRESS",command="borg serve --restrict-to-path /home/borgbackup/borgbackup/",no-pty,no-agent-forwarding,no-port-forwarding,no-X11-forwarding,no-user-rc ssh ... (the line continues) ..

Salva il file con Ctrl+O ed esci con Ctrl+X. Ora abbiamo abilitato l'accesso in lettura e scrittura al repository borg.

4.2 Elimina i vecchi backup (eseguiti dal server principale)

Ora, connettiti al server principale in una nuova finestra di terminale come utente root.

Ora creeremo uno script sul server principale per eliminare (ovvero rimuovere) i vecchi backup. Crea e modifica lo script della shell sul server principale in questo modo:

touch /usr/local/bin/borgprune.sh
chmod go-rwx /usr/local/bin/borgprune.sh
chmod u+rwx /usr/local/bin/borgprune.sh
nano /usr/local/bin/borgprune.sh

Quindi inserisci le righe sottostanti nello script della shell. Quindi sostituisci PASSWORD con la password del repository borg e BACKUPHOSTNAME con il nome host del tuo server di backup. È inoltre necessario modificare il numero di vecchi backup che si desidera conservare. In questo esempio, conserviamo 7 backup giornalieri, 4 backup settimanali e 12 backup mensili.

#!/bin/sh
export BORG_PASSPHRASE='PASSWORD'
borg prune --stats --progress [email protected]BACKUPHOSTNAME:/home/borgbackup/borgbackup/ --prefix `hostname`- --keep-daily=7 --keep-weekly=4 --keep-monthly=12

Premere Ctrl+O e Ctrl+X per salvare ed uscire dal file. Quindi, esegui lo script di sfoltimento che hai appena creato sul server principale:

/usr/local/bin/borgprune.sh

Questo comando richiederà del tempo (può durare fino a un paio d'ore), ma puoi vedere i progressi che fa lungo il percorso, in due passaggi per arrivare al 100%.

4.3 Non consentire l'accesso in lettura+scrittura (fatto dal server di backup)

Ora torniamo a lavorare sul server di backup.

Dopo che il comando prune è terminato sul server principale, ora ti connetti al server di backup come utente borgbackup e modifichi nuovamente il file /home/borgbackup/.ssh/authorized_keys per non consentire l'accesso in lettura+scrittura.

Fai così sul server di backup:

su borgbackup
cd
nano ~/.ssh/authorized_keys

Nell'editor nano, elimina il carattere # all'inizio della prima riga premendo il tasto Canc sulla tastiera. Quindi, premi il tasto Giù e inserisci un nuovo carattere # nella seconda riga. Dopo questo, il file dovrebbe assomigliare più o meno a questo:

from="SERVERIPADDRESS",command="borg serve --append-only --restrict-to-path /home/borgbackup/borgbackup/",no-pty,no-agent-forwarding,no-port-forwarding,no-X11-forwarding,no-user-rc ssh ... (the line continues) ...
#from="SERVERIPADDRESS",command="borg serve --restrict-to-path /home/borgbackup/borgbackup/",no-pty,no-agent-forwarding,no-port-forwarding,no-X11-forwarding,no-user-rc ssh ... (the line continues) ..

Salva il file con Ctrl+O ed esci con Ctrl+X. Ora abbiamo disabilitato l'accesso in lettura e scrittura al repository borg.

Ora i backup possono continuare normalmente, in modalità di sola aggiunta, e sei protetto dai tentativi di eliminazione dal server principale mirati ai backup archiviati sul server di backup.

4.4 Osservazioni finali

Ora hai creato un sistema di backup che è fuori sede e di sola aggiunta. Ciò significa che i backup sono protetti in due modi. In primo luogo, i backup sono protetti nel senso di essere fisicamente separati dal server principale. In secondo luogo e infine i backup già eseguiti sono protetti dai tentativi di alterazione dal server principale (tranne quando si decide esplicitamente di modificarli tramite sfoltimento manuale).


Linux
  1. Backup economici fuori sede di sola aggiunta con restic e Wasabi su Debian 10

  2. Come eseguire Ssh su un server utilizzando un altro server??

  3. Come configurare il backup nel server cPanel/WHM

  4. Condiviso vs VPS vs Hosting dedicato

  5. Cosa puoi fare con un VPS e un Cloud Server?

Come configurare un server di posta completo con IRedMail su Centos 7 VPS

Come configurare un server di posta completo con iRedMail su Ubuntu 18.04 VPS

Come installare e configurare Django su VPS Linux e Server Dedicato?

Come trasferire manualmente gli account cPanel da Hosting Condiviso a VPS/Server Dedicato?

come configurare l'autenticazione basata su chiave SSH in Linux VPS o server dedicato

Come controllare i parametri del server VPS con il comando Linux