Sauvegarder ses données de manière chiffrée sur un stockage en ligne

Sauvegarder ses données de manière chiffrée sur un stockage en ligne

On ne le dira jamais assez, mais sauvegarder ses données est un élément essentiel dès lors qu'on y attache une certaine importance. Mais savoir les restaurer aussi ! Il n'est pas rare de se dire "oui je suis tranquille je sauvegarde mes données" et le jour où il y en a besoin... C'est le drâme. Le sauvegarde ne tournait plus de puis X temps ou bien le jeu de données est corrompu ou inexploitable.

cloud storage

Cependant, il y a souvent des freins quand on veut pratiquer de la sauvegarde à titre personnel, notamment à cause d'idées reçues. "C'est cher", "c'est compliqué", "j'ai pas confiance dans le prestataire", etc.

Au travers de ce petit tutoriel sans grande prétention, je vais vous détailler la solution que j'ai mise en oeuvre pour mon besoin personnel. Celle-ci s'articule sur des outils libres et utilise un Public Cloud (celui d'OVH edans le cas présent) pour y stocker les données de manière chiffrée. Elle n'est en aucun cas une vérité absolue et je suis preneur de tout retour permettant d'améliorer celle-ci.

Dans cet article, le chiffrement des données sera effectué à la source et le prestataire de stockage ne verra que de la bouillie illisible. C'est un ordre important dans les étapes, car par défaut nous considérerons que le prestataire est potentiellement faillible (piratage, etc). Beaucoup de stockages en ligne proposent de chiffrer les données, mais ce n'est qu'à postériori une fois celles-ci envoyées chez eux. La maîtrise du chiffrement me paraît un élément essentiel dans cette démarche. De plus, n'oubliez pas que les services gratuits se financent en exploitant ce que vous leur donnez pour vendre du profil publicitaire. La sauvegarde et la vie privée sont deux notions intimement liées (au même titre que la confidentialité dans le cas d'une entreprise) qu'il ne faut pas sacrifier sur l'autel du prix supposé gratuit ou attractif.

Les composants techniques

La sauvegarde est gérée par Duplicati, un logiciel libre disponible sur Linux, Windows et MacOS. Il est développé en .NET et tourne sous Linux avec Mono. Il supporte une belle liste de connecteurs avec différents Cloud Publics mais aussi des interfaces plus traditionnelles telles que les disques externes, NAS, FTP, SFTP, etc. Dans notre pile d'outils, c'est lui qui gèrera le chiffrement des données et l'exécution de la sauvegarde vers le stockage en ligne.

duplicati1 Capture prise du site officiel

Dans mon cas, le stockage passe par l'offre d'OVH Public Cloud et son service ObjectStorage. Le Cloud Public OVH est basé sur OpenStack et utilise donc la technologie Swift de ce dernier. Ce service a bien évidemment un coût : 0.01€ HT/mois à partir du premier giga-octet consommé. L'envoi des données vers le service est inclus dans l'offre, par contre la récupération est payante au même tarif : 0.01€ HT du Go récupéré. Pour vous donner une idée, j'utilise environ 180Go de stockage et paye un peu moins de 2€ par mois.

RClone servira de connecteur avec l'ObjectStorage.

Quelques points de montage NFS ou des rsync sur le serveur qui héberge Duplicati pour qu'il fasse l'envoi vers le stockage en ligne.

Parenthèse : Stockage "chaud" ou stockage "froid" ?

Lorsqu'on commence à jouer avec ce genre de service, deux notions vous arrivent rapidement dans la tronche : le stockage "chaud" ou "froid". Explications.

Le stockage chaud signifie que le support que vous louez permet la récupération immédiate de la donnée. La disponibilité est garantie dès que vous en avez besoin.

Le stockage froid (offre Cloud Archive pour rester chez OVH) signifie que la donnée n'est pas disponible immédiatement lorsque vous en faites la demande. En effet, l'architecture derrière ce type de rétention éclate la donnée au sein d'une série de supports avec de la parité à gogo pour garantir son intégrité. Il faut donc laisser le temps au système de reconstruire la donnée pour vous la restituer. Pour ceux que ça intéresse de creuser, Scaleway a écrit un article très complet sur l'architecture derrière son offre.

Concrètement, la différence se situe dans votre besoin en terme de disponibilité et de coût. En effet, le stockage à chaud coûte généralement plus cher au mois, mais l'envoi est gratuit. Le stockage à froid coût moins cher sur la durée, mais l'envoi et la récupération sont facturés.

Comparaison des deux offres OVH (non je n'ai aucune affinité avec eux, c'est juste que j'utilise leur service et n'ai pas à m'en plaindre, je vous laisse le soin de choisir le prestataire correspondant le mieux à votre besoin) :

Offre Coût HT mensuel Coût HT Envoi Coût HT Récup
Object Storage 0.01€/Go Inclus 0.01€/Go
Cloud Archive 0.002€/Go 0.01€/Go 0.01€/Go

Dans mon cas j'ai préféré l'Object Storage car :

  • Pas de coût à l'envoi, mon estimation de différentiel n'avait pas spécialement été intéressante en raison d'une volumétrie vite changeante (les joies de la photo et des RAW :) )
  • Pas de délai de récupération, important pour tester une restauration

N'ayant pas de recul sur la mise en oeuvre de la solution proposée dans ce billet sur du stockage froid, j'éviterai toute référence à ce mode pour ne pas vous embrouiller.

Installer Duplicati

J'installe Duplicati sur une machine utilisant Fedora, mais les étapes sont sensiblement les mêmes pour une autre distribution Linux. Au début j'avais tenté CentOS (toutes mes machines serveur sont avec) mais l'installation de Mono était assez fastidieuse sur cette distribution. J'ai donc utilisé l'édition server de Fedora. Accessoirement, une interface graphique sur le serveur sera utile pour lancer la première fois l'outil avec le navigateur. Ensuite, une connexion ssh avec redirection de port permettra d'y accéder sans avoir besoin d'exposer son port en permanence.

Pour se faire, il suffit de se rendre sur la page Downloads de Duplicati et récupérer le RPM Fedora / RedHat. Et l'installer avec dnf.

dnf install https://updates.duplicati.com/beta/duplicati-2.0.5.1-2.0.5.1_beta_20200118.noarch.rpm

Maintenant il vous suffit d'aller le chercher dans le menu d'applications et il démarrera alors son serveur et sera accessible depuis la barre des tâches.

duplicati2

En cliquant sur l'icône et "Open", il ouvre l'interface de gestion via votre navigateur Web.

duplicati3 J'ai déjà quelques jobs :)

Dans un premier temps je vous suggère d'aller dans Menu => Paramètres. Nous allons personnaliser un peu l'outil.

Au delà de la couleur de l'interface (je préfère la sombre), je vous invite à protéger l'interface par mot de passe pour ajouter une couche de sécurité. Les outils comme Keepass sont vos amis pour ce genre de chose !

Duplicati est opérationnel, nous pouvons passer à la suite.

Créer un container Object Storage chez OVH Public Cloud

Je passerai l'étape d'inscription et compagnie, surtout que vous pouvez choisir le Provider qui vous convient. Dans l'interface de gestion, aller dans Storage => Object Storage. Cliquer ensuite sur "Créer un conteneur"

Ici, vous pouvez choisir la localisation du container de données. L'une des règles est d'éviter de mettre tous ses oeufs dans le même panier. Si par exemple votre serveur est à Francfort, vous mettrez le Storage à Gravelines. (petit rappel de géographie : Francfort est en Allemagne et Gravelines dans le nord de la France, près de Calais)

Dans mon exemple je suis parti au Canada. Mais c'est un peu extrême, tabernacle ! L'une des notions les plus importantes quand on parle de Cloud Public est la latence. Privilégiez les datacenters les plus proches de vos infrastructures pour éviter d'avoir l'impression que ça rame.

objectostorage1

Type de container privé. Le mode statique est là pour utiliser l'object storage comme serveur de contenu. Le mode public ne possède pas de contrôle d'accès. Dans notre cas on évitera d'exposer les données aux quatre vents.

objectostorage2

On donne ensuite un nom au container et voilà.

objectostorage3

Le container apparaît maintenant dans l'interface. On va pouvoir dire à Duplicati de l'utiliser.

objectostorage4

Rclone pour s'interfacer avec l'ObjectStorage

Cette étape est potentiellement facultative si vous utilisez un provider nativement supporté par Duplicati. Rclone est un utilitaire similaire à la commande rsync de Linux qui supporte notamment les stockages Cloud et par API tels que celui que j'utilise.

Rclone est normalement déjà installé, mais si nécessaire il est dans le dépôts de Fedora.

dnf install rclone

Les étapes sont décrites dans la doc d'OVH mais reprenons les étapes.

Dans la console de gestion, aller dans Users & Roles. Créer un nouvel utilisateur et lui attribuer le rôle "ObjectStore operator".

user

user 2

Votre utilisateur apparaîtra dans l'interface de gestion, prenez soin de sauvegarder le mot de passe dans un Keepass vous allez en avoir besoin. Cliquez maintenant sur les trois petits points à droite et demandez un fichier de config rclone. Choisissez le bon datacenter et validez.

user 3

L'outil va vous proposer de télécharger un fichier rclone.sh, récupérez-le et ouvre-le dans un éditeur de texte pour voir ce qu'il contient.

# Copy the config entry below in your rclone configuration file.
# Use 'rclone config file' to find which configuration file rclone uses.
# You can also use 'rclone --config <file>' directly.
[BackupStorage]
type = swift
env_auth = false
auth_version = 3
auth = https://auth.cloud.ovh.net/v3/
endpoint_type = public
tenant_domain = default
tenant = ........................
domain = default
user = user-xxxxxxxxxxxxxxxxxxxxxxx
key = <PASSWORD>
region = BHS

Remplacez la valeur "key" par le mot de passe que vous avez obtenu à la création de l'utilisateur. Alors oui, un mot de passe dans un fichier n'est jamais bon. Je n'ai pas encore expérimenté d'autres solutions pour le moment mais rclone semble disposer de possibilité de masquer l'info.

Mettez aussi à jour la region pour mettre le nom du datacenter où se trouve votre container.

Pour appliquer la configuration, il vous suffit de placer le fichier dans la home de l'utilisateur qui fait tourner Duplicati.

mkdir -p /home/userbackup/.config/rclone/
vi /home/userbackup/.config/rclone/rclone.conf

Coller le contenu dedans et sauvegarder.

En lançant la commande rclone config vous devriez voir la configuration apparaître.

[userbackup@backup rclone]$ rclone config 
Current remotes:

Name                 Type
====                 ====
BackupStorage        swift
local                local

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q>

La commande rclone lsd BackupStorage: (les deux points sont importants) permet de lister vos containers. BackupStorage est le nom de l'espace de stockage qu'OVH fourni.

[userbackup@backup ~]$ rclone lsd BackupStorage:
        0 2020-08-23 22:45:45         0 photos

Le premier champ montre la volumétrie utilisée, le second la date et heure de la requête, le quatrième le nombre d'objets, et le dernier le nom du container.

Pour tester un envoi manuel vers l'ObjectStorage, vous pouvez utiliser la commande suivante avec un fichier de votre choix.

rclone copy local:/chemin/vers/le/fichier BackupStorage:photos

Le fichier arrivera sur le container.

Configurer le job Duplicati

Si Duplicati est installé sur votre machine, vous pouvez le lancer via l'icône dans la barre des tâches en cliquant sur "Open". Ceci ouvrira votre navigateur à l'adresse de sa page d'administration. Si celui-ci est sur un serveur distant et que son port n'est pas ouvert sur l'extérieur (ce qui est recommandé), vous pouvez l'attaquer avec ssh.

ssh -L 8200:localhost:8200 <adresse de votre serveur>

Ensuite, lancez http://localhost:8200 dans votre navigateur favori.

Pour créer un job, cliquez sur "+ Ajouter une sauvegarde".

Sélectionnez "Configurer une nouvelle sauvegarde".

duplicati4

Nommez votre sauvegarde comme vous l'entendez. Etape la plus importante : générez vous-même une phrase secrète de chiffrement, ou alors laissez le en générer une. Dans tous les cas, sauvegardez bien cette clé dans un Keepass, elle sera essentielle pour déchiffrer vos données !

duplicati5

  • Destination : choisissez dans la liste du type de stockage "rclone".
  • Stockage local, indiquez "local".
  • Stockage distant, indiquez "BackupStorage" (qui est le nom de l'espace de stockage fourni par OVH, adaptez selon votre prestataire !).
  • Chemin d'accès distant : le nom du container dans l'ObjectStorage. Dans notre exemple : "photos"

Cliquez sur le bouton "Tester", celui-ci devrait retourner une connexion OK. Sinon, c'est qu'il y a un souci dans la conf rclone.

Concrètement, il s'agit là des mêmes informations que la commande rclone que nous avions testé. Il ne manque que le dossier d'origine à sauvegarder.

rclone copy local:/home/user/Pictures BackupStorage:photos

Ca tombe bien, c'est l'étape suivante. Indiquez ici l'emplacement de votre dossier source de sauvegarde.

duplicati6

Dans mon cas je sauvegarde différentes choses sur mon serveur : les données d'un Nextcloud, une base de données qui contient les schémas de mes différents outils, et mes mails. Dans le cas de la BDD et des mails, un script en local sur les serveurs effectue un dump + compression, ou un tar.gz du dossier. Il l'envoie ensuite via rsync au serveur de backup. Dans le cas du Nextcloud, la volumétrie étant plus élevée j'ai opté pour une solution plus efficiente sur l'usage disque en créant un point de montage pour Duplicati. Par contre, Nextcloud ayant une forte restriction d'accès aux données (logique), il convient d'avoir normalisé ses utilisateurs pour y accéder (mêmes UID, etc).

Dans notre exemple nous sauvegardons "~/Images".

duplicati7

Planification, indiquez la fréquence à laquelle vous voulez sauvegarder vos données.

duplicati8

Options. Ici vous définissez la taille des blocs sur le volume distant et la politique de rétention.

La taille des blocs signifie que Duplicati va (par défaut) éclater vos données dans des archives chiffrées de 50Mo. L'outil vous renvoie vers sa documentation pour comprendre l'impact en cas de changement. Personnellement je laisse la valeur par défaut.

Politique de rétention : plusieurs choix s'offrent à vous, et comme toujours, ça dépend.

ca depend ca depasse

Vous avez différentes options :

  • Conserver toutes les sauvegardes : Duplicati gardera des versions depuis la toute première générée. Autant dire que ça va exploser votre quota de disque (et donc le coût) si vous avez une forte volumétrie.
  • Supprimer les sauvegardes plus anciennes que.. : Vous pouvez indiquer un délai de péremption de vos données en nombre de jours, semaines, mois, années. (ex : supprimer un jeu de plus de 5 jours, peut être intéressant pour des données changeantes comme une base de données)
  • Conserver un nombre spécifique de sauvegardes : A chaque exécution du job, Duplicati gardera X exemplaires de votre sauvegarde et supprimera les précédents.
  • Rétention intelligente : Un planning de conservation où Duplication gardera à la fin au moins une sauvegarde hebdomadaire, une mensuelle, et une annuelle. Cela peut répondre à un risque de corruption avec le temps, mais ça va également alourdir l'espace disque.
  • Rétention personnalisée : Au travers d'une syntaxe spécifiée dans l'appli, vous pouvez définir votre propre politique.

Personnellement j'applique la politique suivante :

  • Base de données : je garde 3 versions
  • Nextcloud : je garde deux versions, sauvegarde mensuelle. Mon rythme de modification ne justifie pas une fréquence plus élevée, cela augmenterait mon coût pour rien. (la synchro locale permet d'encaisser une éventuelle perte du serveur)
  • Mails : j'ai appliqué la politique intelligente

Maintenant on peut sauvegarder le job et tester une exécution.

Tester le job

Sur la page "Poste de travail" de Duplicati, cliquez sur "Démarrer maintenant" pour le job de sauvegarde que vous venez de créer.

duplicati8

Dans mon exemple le job n'a qu'un seul fichier à envoyer, donc ça a été vite.

En allant sur l'interface de gestion de mon container, je constate qu'il contient désormais des fichiers. Dedans, nous retrouvons trois objets créés par Duplicati. Il s'agit d'archives chiffrées avec la clé mentionnée dans le job de sauvegarde. Nous y retrouvons également un index et une liste qui lui servent en interne. Ces fichiers sont inexploitables dès lors que la clé de chiffrement n'est pas divulguée.

duplicat9

Sauvegarder le job ... de sauvegarde

Maintenant qu'on a un job Duplicati qui marche, il serait dommage de perdre le paramétrage en cas de perte du serveur ou de la machine qui le porte. Pour se faire, Duplicati vous permet d'exporter une configuration.

Cliquez sur la flèche pointant vers le bas du nom du job de sauvegarde. Vous y retrouverez le détail.

duplicati10

Allez dans "Exporter".

Laissez coché le mode "vers un fichier" et sélectionnez "chiffrement de fichier". Générez une phrase secrète (que vous conserverez précieusement dans un Keepass) et validez l'export. Duplicati vous fera télécharger un fichier chiffré contenant la configuration de votre job. Pour ma part, je les stocke sur un autre container créé dans un autre datacenter pour les récupérer en cas de sinistre.

duplicati11

Tester une restauration

Développez le job de sauvegarde et choisissez "Restaurer". Automatiquement, Duplicati va vous retourner la liste des fichiers connus de l'index stocké sur le support distant. Il vous proposera de choisir le jeu de sauvegarde également.

duplicati7

Choisissez les fichiers à restaurer, l'écran suivant vous demandera quoi faire avec.

duplicati13

En résumé

Ce billet vous a proposé une mise en oeuvre possible de sauvegardes avec un outil très simple et efficace. Dans la mesure où je sauvegarde les données de serveurs, la couche technique est un peu plus complexe que pour une simple sauvegarde de données perso sur un ordinateur. A titre personnel, j'ai une autre implémentation de cet outil sur mon PC professionnel qui sauvegarde également ses données sur un stockage en ligne, chiffré de la même manière. Ici pas de serveur, l'outil est installé sur le PC et fait ses sauvegardes quotidiennement de manière transparente.

La couche rclone est notamment là parce que j'ai opté pour l'Object Storage d'OVH, mais Duplicati gère nativement plusieurs Cloud Providers du marché. Donc si vous restez parmi les gros opérateurs (Amazon, Google, Microsoft, Mega, Dropbox, etc) la configuration sera plus simple.

Encore une fois, cette solution n'est pas une vérité absolue et ne demande qu'à être améliorée avec le temps et l'expérience.