Préambule

Putain, j’avais jamais fait de préambule.
J’ai commencé à m’intéresser au backup il y a plusieurs années. J’ai un synology qui fait des backups locaux avec Time Machine et avec l’outil intégré de Windows.
Toutes mes photos sont sur un disque dur externe en raid et sont aussi backupé sur le synology. Par contre, si un jour il y a le feu chez moi, je perds tout.

Je me suis donc intéressé à faire des backups hors site. Plusieurs méthodes :

  1. un disque dur externe qu’on entrepose ailleurs, et une fois par mois (plus ou moins), on fait une copie.
  2. un serveur de backup

J’ai choisi l’option 2, ça me permet de faire ça depuis chez moi, en une seule ligne de commande.

Qu’est-ce que le stockage à froid ?

C’est un espace de stockage, en cloud, qui sert à entreposer des fichiers. Pour accéder aux fichiers, il faut entre 1 minutes et 12 heures pour les dégeler. Autant dire que c’est nickel pour du backup sans contrainte de remise en service rapide.
Pour mon cas, c’est parfait, ce stockage ne me sert que « au cas ou ».

A l’inverse, il existe du stockage à chaud, c’est pour des accès immédiats aux fichiers et pour travailler dessus. Ce n’est absolument pas le même tarif.

L’offre OVH

Je n’ai pas d’actions chez eux, ils ont une offre assez intéressante : Cloud Archive.
On paie à la consommation (upload/download et espace de stockage) :

  • Trafic entrant : 0,01 € HT/Go
  • Trafic sortant : 0,01 € HT/Go
  • 0,002 € HT/mois/Go

Je trouve ça pas cher du tout…

Duplicity

Duplicity permet de backuper un dossier en créant des fichiers tar chiffrés, découpés en volumes et de les envoyer sur un serveur distant.
Il utilise plusieurs protocoles pour communiquer avec les serveurs :

  • Amazon S3
  • DropBox
  • ftp
  • Google Drive
  • IMAP
  • local filesystem
  • Microsoft Azur
  • Rackspace Cloudfiles
  • rsync
  • ssh/scp
  • SwiftStack
  • WebDAV
  • … (je n’ai pas tout mis)

Vous pouvez retrouver toute la documentation de duplicity sur leur site.

Pourquoi utiliser Duplicity ?

Vu que l’on va envoyer des données sur un cloud, mieux vaut que ces données soient chiffrées au cas où l’espace de stockage soit compromis.
Je ne tiens pas à ce que mes photos se retrouvent à nues sur Internet.

L’autre intérêt est aussi que Duplicity va faire un « diff » et n’envoyer que les données modifiées ou ajoutées depuis la dernière sauvegarde.
On économise donc de la bande passante.

L’offre d’OVH proposant une API OpenStack Swift, c’est ce que j’ai utilisé pour gérer mes backups avec Duplicity.

Installation de Duplicity

Si vous êtes sous Debian / Ubuntu :

apt-get install duplicity

Si vous êtes sous MacOS :

brew install duplicity

Et ensuite on install les packages pour OpenStack avec pip :

pip install python-swiftclient python-keystoneclient

Génération des clés

Pour sécuriser les transactions, nous allons générer deux clés. Une pour signer et une pour chiffrer.

Génération de la clé pour chiffrer

gpg --gen-key

Je vous laisse le soin de renseigner les valeurs. Je crois que j’ai mis le plus de bits possible et que je n’ai pas mis de date d’expiration.
Sauvegardez bien votre passphrase

Génération de la clé pour signer

gpg --gen-key

Idem que précédemment, donnez lui un autre nom et une passphrase différente.

On a donc maintenant deux clés pour notre backup, une pour signer et une pour chiffrer. On peut vérifier avec la commande gpg --list-keys :

hawking:Downloads jihaisse$ gpg --list-keys
/Users/jihaisse/.gnupg/pubring.gpg
----------------------------------
pub 8192R/32DB8A93 2017-03-26
uid Backup Encryption <user@example.com>
sub 8192R/A8DDF912 2017-03-26

pub 8192R/0DE8C83D 2017-03-26
uid Backup Signing <user@example.com>
sub 8192R/0EE44080 2017-03-26

Faites une sauvegarde de ces clés. Comme le fait remarquer Raphaël dans les commentaires :

Si OVH perd ton serveur, ce qui peut arriver, et qu’il n’y a pas de backup des clés, alors tu ne pourras jamais récupérer les données perdues. La sauvegarde des clés n’est donc pas une option.

gpg --export-secret-keys -a 0DE8C83D > signing.asc
gpg --export-secret-keys -a A8DDF912 > encryption.asc

Pour les réimporter ensuite, c’est avec la commande gpg --import

Création de l’espace de stockage

Dans votre compte OVH, commandez une offre cloud, puis créez un conteneur dans l’onglet « Stockage »

Donnez lui un nom et choisissez une région.

On en profite pour ajouter un utilisateur OpenStack qui nous sera utile plus tard.

Une fois l’utilisateur créé, cliquez sur l’icone « clé à molette » pour télécharger le fichier de configuration OpenStack « openrc.sh »
Dans ce fichier se trouvent des informations qui nous servirons plus tard.

Création du script de backup

Maintenant que l’on a nos clés et que Duplicity est installé ainsi que le client Swift, on va créer le script.

Il nous faut 6 variables pour nous connecter via OpenStack :

  • SWIFT_USERNAME : Identifiant de l’utilisateur OpenStack que l’on a créé précédement
  • SWIFT_PASSWORD : Mot de passe de l’utilisateur OpenStack
  • SWIFT_AUTHURL : URL de l’API
  • SWIFT_AUTHVERSION : Numéro de version de l’API
  • SWIFT_TENANTNAME : Identifiant que vous allez trouver dans le fichier openrc.sh
  • SWIFT_REGIONNAME : Région que vous avez configuré pour votre conteneur

Une fois que vous avez tout ça, c’est très simple (j’ai passé deux jours dessus pour réussir à trouver tous les identifiants qu’il fallait)

Le script :

#!/bin/bash
enc_key=A8DDF912
sign_key=0EE44080
src="/Volumes/Photos/Mes Photos/"
dest="swift://backup_photos"

# OpenStack
export SWIFT_USERNAME="FXXkttJQahTD"
export SWIFT_PASSWORD="xxxxxx"
export SWIFT_AUTHURL="https://auth.cloud.ovh.net/v2.0/"
export SWIFT_AUTHVERSION="2"
export SWIFT_TENANTNAME="xxxxxx"
export SWIFT_REGIONNAME="SBG3"

# GnuPG
export PASSPHRASE="UnSuperMotDePasse"
export SIGN_PASSPHRASE="UnAutreSuperMotDePasse"

duplicity --verbosity notice \
        --encrypt-key "$enc_key" \
        --sign-key "$sign_key" \
        --num-retries 3 \
        --asynchronous-upload \
        --cf-backend swift \
        --volsize 100 \
         "${src}" "${dest}"
         
unset SWIFT_USERNAME SWIFT_PASSWORD SWIFT_AUTHURL SWIFT_AUTHVERSION SWIFT_TENANTNAME SWIFT_REGIONNAME PASSPHRASE SIGN_PASSPHRASE

Explications

  • enc_key : clé de chiffrement que l’on a généré précédemment
  • sign_key : clé de signature
  • src : dossier à backuper
  • dest : où on backup. Remplacez backup_photos par le nom du container que vous avez créé
  • SWIFT_USERNAME : Identifiant de l’utilisateur OpenStack que l’on a créé précédement
  • SWIFT_PASSWORD : Mot de passe de l’utilisateur OpenStack
  • SWIFT_AUTHURL : URL de l’API
  • SWIFT_AUTHVERSION : Numéro de version de l’API
  • SWIFT_TENANTNAME : Identifiant que vous allez trouver dans le fichier openrc.sh
  • SWIFT_REGIONNAME : Région que vous avez configuré pour votre conteneur
  • PASSPHRASE : Le mot de passe de la clé de chiffrement
  • SIGN_PASSPHRASE : Le mot de passe de la clé de signature

Enregistrez le fichier et changez les permissions pour le rendre executable :

chmod +x backup.sh

Il ne reste qu’à lancer le script.
Je vous conseille de tester avec un dossier contenant peu de fichiers pour vérifier que la connexion se fait bien et que duplicity envoi bien les fichiers.

Ressources

Les liens utiles qui m’ont servi pour créer ce script :