Sauvegardes à distance avec BackupPC

J’avais déjà fait un article sur les sauvegardes locales précédemment mais jamais sur les sauvegardes à distance.
Ca fait un petit bout de temps que j’ai envie que les sauvegardes de mes deux PC ainsi que de mon serveur OVH soit rapatriées automatiquement sur mon Raspberry pour deux raisons :

  • Laisser des sauvegardes en local ne sert à rien car si le disque a un soucis on perd les données et les sauvegardes
  • Quitte à avoir toutes mes sauvegardes à un seul endroit, je préfère qu’elles soient sur mon Raspberry situé chez moi et où moi seul ai accès plutôt que sur mon serveur OVH

Je sais qu’avoir toutes ses sauvegardes sur un seul disque n’est pas idéal car si le disque crame, je perd toutes mes sauvegardes. Mais ce ne sont pas des données ultra sensibles que je vais sauvegarder et il faudrait que je n’ai pas de bol pour que mon disque de sauvegarde crame en même temps que le disque d’un de mes deux PC ou de mon serveur OVH. Ca reste une sauvegarde de particulier.
Si vous faites des sauvegardes des données sensibles de votre entreprise ou des données perso que vous ne voulez absolument pas perdre, il est évident qu’il vous faudra dupliquer le disque de sauvegarde (et ne pas stocker les deux dans le même bâtiment) afin d’être paré au pire.

Pour faire tout ça, on ne va pas utiliser BackupManager mais BackupPC qui permet la sauvegarde à distance via ssh.

Dans cet article je ne vais aborder que la sauvegarde de mon serveur OVH (le client) vers mon Raspberry (le serveur de sauvegarde) car une fois qu’on a compris comment sauvegarder un serveur à distance, il suffit de répéter l’opération pour ajouter la sauvegarde d’un, deux, etc autres serveurs.
Comme Backuppc possède une interface web, il faut que vous ayez un serveur web fonctionnel.
De même, les deux machines, client et serveur, vont communiquer en ssh, il faut donc que vous ayez OpenSSH d’installé sur les deux machines.
Enfin, BackupPC permet l’envoi de mail indiquant le status des sauvegardes. Il faut donc que vos machines puissent envoyer des mails. A la fin de cet article j’ai indiqué comment configurer l’envoi de mail sur le Raspberry.

Commençons par la configuration du serveur de sauvegarde (mon Raspberry).

1) Configuration du serveur de sauvegarde

1.1) Configuration de BackupPC

On commence par la configuration du serveur de sauvegarde (le Raspberry). Pour installer BackupPC, rien de compliqué vu qu’il se trouve dans les dépôts Debian. Il vous suffit donc de taper la commande sudo aptitude install backuppc.
Si Apache n’est pas installé, il vous l’installera en même temps.

Lors de l’installation, une fenêtre debconf apparaîtra :

Appuyez sur Entrée.

Si vous n’avez pas de nom de domaine associé à votre Raspberry, il faudra taper l’adresse http://adresseipduraspberry/backuppc pour accéder à l’interface web de BackupPC. L’utilisateur est backuppc et le mot de passe est donné dans cette fenêtre. Ne vous embêtez pas à retenir le mot de passe, on le changera plus tard.
Appuyez sur Entrée et laissez l’installation se terminer.

Le premier truc à faire est de changer le mot de passe de backuppc. Tapez la commande suivante sudo htpasswd /etc/backuppc/htpasswd backuppc puis tapez le mot de passe que vous souhaitez deux fois. Mettez un mot de passe suffisamment robuste.

Vous pouvez maintenant vous connecter à l’interface web de BackupPC en allant à l’adresse http://adresseipduraspberry/backuppc. L’utilisateur est backuppc et le mot de passe celui que vous venez de choisir.
Si l’interface n’est pas en français, vous pouvez changer la langue depuis le menu Server → Edit config → CGI → Language

Allez dans le menu Serveur → Modifier les machines et ajoutez le client que vous voulez sauvegarder (mon serveur OVH dans mon cas) en cliquant sur Ajouter puis en mettant son nom de domaine ou adresse ip dans le champ « host » et « backup » dans le champ « user » (c’est l’utilisateur que l’on utilisera pour faire les sauvegardes une fois connecté au client via SSH).
Ne pas cocher la case « dhcp ». Une fois fait, sauvegardez.
Toujours dans le menu Serveur, allez dans le menu Courriel et dans le champ « EMailAdminUserName » remplacez  « backuppc » par l’adresse mail sur laquelle vous souhaitez recevoir les mails de backuppc. Cette modification s’applique à tous les clients et futurs clients.

Vous pouvez voir maintenant que si vous faites défiler le menu déroulant en haut à gauche, votre client est apparu dans la liste. Choisissez-le et allez dans le menu votreclient → Modifier la configuration → Horaire.

Ce qui nous intéresse ce sont les parties « Sauvegardes complètes », « Sauvegardes incrémentielles » et « Suspension ».
Voyons à quoi correspondent tout ces paramètres.

Pour la partie « Sauvegardes complètes » :

  • FullPeriod : durée en jour entre deux sauvegardes complètes. Valeur par défaut 6,97 jours : une sauvegarde complète sera faite une fois par semaine.
  • FullKeepCnt : nombre maximal de sauvegarde complète qui sera conservée. Valeur par défaut 1. La valeur idéale dépendra beaucoup du type de donnée que vous sauvegardez. Pour des photos de vacances 1 est très bien, pour des sauvegardes d’un code source (par exemple) il vaudrait mieux mettre plus.
  • FullKeepCntMin : nombre minimal de sauvegarde complète qui sera conservée. Valeur par défaut 1.
  • FullAgeMax : nombre de jour pendant lesquels sont conservées les sauvegardes complètes. Valeur par défaut 90 jours. Quelques soit l’ancienneté des sauvegardes complètes, le nombre de sauvegardes complètes restantes sera toujours au moins égale à FullKeepCntMin.
    Si FullPeriod multiplié par FullKeepCnt est supérieur à FullAgeMax, ce dernier paramètre sera automatiquement augmenté.

Pour la partie « Sauvegardes incrémentielles » :

  • IncrPeriod : durée en jour entre deux sauvegardes incrémentielle. Valeur par défaut 1 jour : une sauvegarde incrémentielle sera faite une fois par jour.
  • IncrKeepCnt : nombre maximal de sauvegarde incrémentielle qui sera conservée. Valeur par défaut 6. Idem que précédemment pour la valeur idéale.
  • IncrKeepCntMin : nombre minimal de sauvegarde incrémentielle qui sera conservée. Valeur par défaut 1.
  • IncrAgeMax : nombre de jour pendant lesquels sont conservées les sauvegardes incrémentielles. Valeur par défaut 30 jours. Quelques soit l’ancienneté des sauvegardes complètes, le nombre de sauvegardes complètes restantes sera toujours au moins égale à InrcKeepCntMin.
  • IncrLevels : indique le niveau depuis lequel la sauvegarde incrémentielle se basera. Une sauvegarde complète est de niveau 0. Si vous laissez ce paramètre à un 1, toutes les sauvegardes incrémentielles sauvegarderons les fichiers modifiés depuis la sauvegarde complète.
    Partons du principe que la sauvegarde complète est faites le dimanche et les sauvegardes incrémentielles chaque jour de la semaine. La sauvegarde du lundi contiendra tous les fichiers modifiés depuis dimanche, celle du mardi contiendra tous les fichiers modifiés depuis dimanche, etc.
    Si à la place de 1 vous mettez « [1, 2, 3, 4, 5, 6] », la sauvegarde du lundi sera de niveau 1, celle du mardi du niveau 2, etc jusqu’à samedi et donc la sauvegarde du lundi contiendra tous les fichiers modifiés depuis dimanche, celle du mardi contiendra tous les fichiers modifiés depuis lundi, celle du mercredi contiendra tous les fichiers modifiés depuis mardi, etc
  • IncrFill : si cette case est cochée, toutes les sauvegardes incrémentielles sont fusionnées en une seule sauvegarde au fur et à mesure qu’une nouvelle est créée. Désactivée par défaut.

Pour la partie « Suspension » :

  • BackupDisable : ce paramètre peut prendre trois valeurs :
    • 0 : les sauvegardes automatiques sont activées. Valeur par défaut.
    • 1 : les sauvegardes automatiques sont désactivées mais les demandes de sauvegardes manuelles depuis l’interface web sont toujours prises en compte.
    • 2 : les sauvegardes automatiques sont désactivées et les demandes de sauvegardes manuelles ne sont plus prises en compte.
  • BlackoutPeriods : horaire pendant lequel aucune sauvegarde n’est effectuée. Ceci permet d’éviter que la bande passante ou le processeur soient trop utilisés pendant les heures de bureau.
  • BlackoutBadPingLimit et BlackoutGoodCnt : sert à vérifier si un PC est toujours ou très souvent accessible. Si BackupPC arrive à pinger le client BlackoutGoodCnt fois, les sauvegardes se feront en dehors de la plage horaire définie par le paramètre BlackoutPeriods. A savoir, la tentative de ping se fait avant chaque sauvegarde (donc une seule fois par jour) et comme la valeur par défaut de BlackoutGoodCnt est 7, il faudra 7 jours avant que les sauvegardes sur ce client ne respecte la plage horaire de suspension.
    Au bout de BlackoutBadPingLimit (3 par défaut) mauvais ping, les sauvegardes se feront sans tenir compte de la plage horaire de suspension. Si un mauvais ping est détecté, un nouveau ping sera fait à la prochaine sauvegarde une heure après, il ne faut donc que 3 heures pour que les sauvegardes d’un client hors ligne arrêtent de respecter la plage de suspension. Après 3 mauvais ping il faut de nouveau attendre 7 jours pour espérer avoir 7 bon pings successifs.
    En mettant la valeur BlackoutGoodCnt à 0, les sauvegardes des clients se feront toujours en dehors de plage horaire de suspension. En mettant une valeur négative, les sauvegardes des clients ne tiendront plus en compte la plage horaire d’exclusion.

Maintenant, allez dans le menu Xfer.
Dans XferMethod, choisir « Rsync ».
RsyncShareName indique le répertoire qui sera sauvegardé. La valeur par défaut est « / », il sauvegardera donc l’intégralité du disque. Vous pouvez indiquez plusieurs répertoire.
Dans BackupFilesOnly, il faut indiquer les sous-répertoires que vous souhaitez sauvegarder en indiquant le répertoire principal auquel il se réfère.
Par exemple, si dans RsyncShareName vous avez mis « /etc » et « /var » et que vous voulez sauvegarder l’intégralité du répertoire « /etc » mais uniquement « /var/mail » et « /var/www », dans BackupFilesOnly il vous faudra ajouter le ShareName « /var » et ensuite y associer les répertoires « /mail » et « /www ». Une autre méthode est de mettre dans RsyncShareName « /var/www » et « /var/mail » au lieu de « /var »
BackupFilesExclude fonctionne pareil que BackupFilesOnly mais permet d’exclure des sous-répertoires. Il faut également associer ces sous-répertoires à un ShareName.

Toujours dans le menu Xfer, dans RsyncClientCmd, remplacez $sshPath -q -x -l root $host $rsyncPath $argList+ par $sshPath -l backup $host nice -n 19 sudo $rsyncPath $argList+.
Dans RsyncClientRestoreCmd remplacez $sshPath -q -x -l root $host $rsyncPath $argList+ par $sshPath -l backup $host nice -n 19 sudo $rsyncPath $argList+.
Par défaut, backuppc essaye de se connecter au client en SSH en utilisant le compte root du client. Sur la plupart des distributions, la connexion SSH en root est désactivée car considérée comme trop dangereuse. On va donc plutôt utiliser le compte « backup » présent par défaut sur les distributions Debian et dérivées.
On rajoute « sudo » afin qu’il est accès à tous les répertoires et « nice -n 19 » afin de donner une priorité assez basse à rsync pour ne pas trop impacter le client lors des sauvegardes.
Si vous n’utilisez pas le port 22 pour le SSH (il est très courant de modifier ce port pour des questions de sécurité), il vous faudra ajouter -p portssh juste après $sshPath.

Enfin, allez dans le menu « Paramètres de sauvegarde » et modifiez la valeur de « PingMaxMsec » en mettant 200 au lieu de 20. C’est le délai de ping maximum toléré par BackupPC pour accepter de faire une sauvegarde. Le problème c’est qu’en connexion ssh c’est pas évident d’avoir toujours moins de 20ms de ping.

Sauvegardez les modifications et dans le menu Serveur → Options d’administration, cliquez sur le bouton « Recharger »

Par défaut, BackupPC va également faire des sauvegardes sur le serveur de sauvegarde en utilisant la méthode « Tar » et en sauvegardant le répertoire /etc. Vous pouvez le voir en sélectionnant « localhost » dans la liste et en allant dans le menu Xfer.
Si vous voulez garder cette sauvegarde, il va falloir faire une modification car l’utilisateur « backuppc » n’a pas des droits suffisants pour sauvegarder le répertoire /etc. Vous allez donc vous retrouver avec une erreur « Tar 512 ».
Pour remédier à ce problème, on va autoriser l’utilisateur backuppc à utiliser Tar en mode root sans avoir à rentrer de mot de passe. Ouvrez le fichier « /etc/sudoers » et ajoutez la ligne backuppc ALL=NOPASSWD: /bin/tar. Rechargez sudo avec la commande sudo systemctl restart sudo.
Dans le menu Xfer du localhost, modifiez le champ TarClientCmd en remplaçant /usr/bin/env LC_ALL=C $tarPath -c -v -f - -C $shareName --totals par /usr/bin/sudo LC_ALL=C $tarPath -c -v -f - -C $shareName+ --totals.

Sauvegardez puis rechargez la configuration. La sauvegarde sera stockée dans le répertoire /var/lib/backuppc/pc/localhost par défaut.

Maintenant que tout est configuré du côté de BackupPC, on va passer au SSH

1.2) Configuration du SSH

Comme je le disais plus tôt, le serveur de sauvegarde et les clients vont communiquer via une connexion SSH. On va donc mettre en place une communication SSH à base de clé.

Dans la console, tapez cette commande pour vous connecter avec le compte backuppc : sudo -i -u backuppc

On va générer la clé avec la commande ssh-keygen -t rsa -b 4096 . La clé va être stockée dans le répertoire /var/lib/backuppc/.ssh/id_rsa par défaut. Acceptez cette localisation.
Ne rentrez pas de passphrase, BackupPC n’a rien pour les gérer.
Tapez la commande cat /var/lib/backuppc/.ssh/id_rsa.pub pour afficher le contenu de la clé.

Tapez exit pour revenir à l’utilisateur normal.

On en a enfin terminé avec la configuration du serveur de sauvegarde, on va pouvoir passer à la configuration du client (mon serveur OVH), qui va être beaucoup plus rapide.

2) Configuration du client

On a configuré la connexion SSH serveur/client en utilisant le compte « backup » du client, mais par défaut ce compte ne peut pas être utilisé en SSH. On va modifier ça. Ouvrez le fichier /etc/passwd.
Vous devriez avoir la ligne suivante : backup:x:34:34:backup:/var/backups:/usr/sbin/nologin. Remplacez-la par backup:x:34:34:backup:/var/backups:/bin/sh.

Le home de l’utilisateur est « /var/backups ». Créez le dossier .ssh dans le répertoire « /var/backups » avec la commande sudo mkdir /var/backups/.ssh.
Puis créez le fichier « /var/backups/.ssh/authorized_keys » avec la commande sudo nano /var/backups/.ssh/authorized_keys et collez dans ce fichier la clé SSH créé sur le serveur (le contenu du fichier /var/lib/backuppc/.ssh/id_rsa.pub qui doit ressembler à ça : ssh-rsa AAAAB3Nza...== backuppc@serveur.

Il va falloir qu’on autorise l’utilisateur « backup » à accéder à tous les répertoires que vous souhaitez sauvegarder. Pour ça, on va l’autoriser à lancer le programme rsync en root sans utiliser de mot de passe.
Ouvrez le fichier « /etc/sudoers » et ajoutez la ligne backup ALL=NOPASSWD: /usr/bin/rsync. Rechargez sudo avec la commande sudo systemctl restart sudo.

Il faut quand même que vous vous rendiez bien compte que dans le cas théorique où un pirate arrive à voler cette clé SSH, il pourra exécuter rsync en mode root sur le client. Même si le risque est assez faible, ça reste un risque.

Normalement, on en a fini avec la configuration. On n’a plus qu’à tester tout ça.

3) Test de sauvegarde

Pour commencer, on va vérifier que la connexion SSH fonctionne.

Aller sur la console du serveur de sauvegarde et tapez la commande sudo -i -u backuppc pour utiliser le compte « backuppc ».
Ensuite, tapez la commande ssh backup@ipduclient. Si vous utilisez un port autre que le 22, il vous faut rajouter « -p numéroduport » après « ssh ».
Il vous sera demandé si vous voulez ajouter l’hôte du client à la liste des hôtes de confiance, tapez « yes ».
Vous devriez maintenant être connecté au client.

Il ne nous reste plus qu’à tester la sauvegarde. Dans l’interface de BackupPC, choisissez le client dans la liste et cliquez sur « Démarrer la sauvegarde complète » puis validez. La sauvegarde manuelle va se lancer, vous n’avez plus qu’à attendre qu’elle se termine pour voir d’éventuelles erreurs.

4) Sauvegarde des bases de données MySQL

BackupPC ne permet pas la sauvegarde de bases de données. Si vous souhaitez sauvegarder des bases MySQL, il y a un moyen très simple, installez AutoMySQLBackup (disponible dans les dépôts Debian).
Il n’y a rien à configurer après installation.

AutoMySQLBackup va faire un dump (sauvegarde) de chacune de vos base et va les stocker dans le répertoire /var/lib/automysqlbackup. Il va faire une sauvegarde chaque jour (stockée dans le dossier daily), chaque semaine (stockée dans le dossier weekly) et chaque mois (stockée dans le dossier monthly).
Pour récupérer ces sauvegardes avec BackupPC, il vous suffit de mettre /var/lib/automysqlbackup dans la liste des répertoires à sauvegarder.

 

Sources :
https://doc.ubuntu-fr.org/backuppc
https://doc.ubuntu-fr.org/automysqlbackup

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.