Cet article fait partie d’une sĂ©rie :

Introduction

Vaste sujet que les sauvegardes !

C’est malheureusement une problĂ©matique trop souvent dĂ©laissĂ©e jusqu’au moment oĂč un incident nous ramĂšne tristement Ă  la rĂ©alitĂ©. Voici donc une petite sĂ©rie de posts pour prĂ©senter la nouvelle solution unifiĂ©e que j’ai rĂ©cemment dĂ©ployĂ© pour mon petit univers.

Une bonne stratĂ©gie de sauvegarde doit respecter le principe “3-2-1” 1 :

Ainsi, je souhaites que la solution respecte le schéma suivant :

Backup flowchart

Flux Description Périodicité
(1) 1Ăšre sauvegarde sur le NAS 2 de sauvegarde. Journalier
(2) 2Ăšme sauvegarde par copie depuis le NAS vers le disque USB. Semestriel
(3) Synchronisation de fichier. Pas vraiment de la sauvegarde, mais dans les faits, les principaux documents personnels sont présents dans ces 2 endroits. Temps réel

Pour cela, j’ai jetĂ© mon dĂ©volu sur le logiciel libre Restic.

Avantages Inconvénients
Chiffrement natif et reconnu comme correct 3 NĂ©cessite d’avoir le logiciel Restic pour accĂ©der aux sauvegardes, elles sont inexploitables sans cela
FacilitĂ© d’utilisation Pas d’interface graphique viable
Pluralité des destinations pour la sauvegarde
Capacité de restauration de fichier unitaire ou snaphot entier
CapacitĂ© de “monter” un snaphot pour naviguer dedans
Sauvegarde par block, donc uniquement les données modifiées sont envoyées, pas tout le fichier
Communauté: largement utilisé, aide disponible
Multi plate-forme (mĂȘme si seulement le cas Linux sera illustrĂ©)

Tout cela exiges quelques prérequis:

Note sur les performances :

Il ne s’agit donc pas d’une solution avec sauvegarde dans le “cloud”. Ainsi, il n’y pas de dĂ©pendance vis-Ă -vis d’un service tiers, mĂȘme si la solution technique utilisĂ©e le supporte. Ces guides peuvent donc ĂȘtre dĂ©clinĂ©s si besoin.

Cet article présente 3 options pour la mise en place du serveur de sauvegarde :

Les 3 sont tout Ă  fait viables, nĂ©anmoins, c’est la premiĂšre option qui a Ă©tĂ© retenu pour des raisons de performance (vitesse de transfert) et sĂ©curitĂ© (possibilitĂ© de redondance des disques).

Option 1: SFTP sur un serveur NAS (Synology)

Activation du service SSH

Le protocole SFTP se reposant sur SSH, celui-ci doit ĂȘtre activĂ©.

Activation de l’authentification par clĂ©

Comme vous ne pourrez pas entrer le mot de passe à chaque sauvegarde, il est nécessaire de permettre une authentification par clé.

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

Activer les home folders

Les sauvegardes seront conservĂ©es dans le home de l’utilisateur restic. Il faut ainsi activer la crĂ©ation des rĂ©pertoires home.

Pour cela,

Configurer le répertoire racine de SFTP

L’idĂ©e est ici de faire correspondre le rĂ©pertoire home prĂ©cĂ©demment activĂ© avec la racine SFTP pour l’utilisateur, ceci afin qu’il soit dans son environnement avec les bonnes permissions.

Pour cela,

Installer la clĂ© d’authentification

Comme vu prĂ©cĂ©demment, une authentification par clĂ© doit ĂȘtre mise en place.

Création et installation:

Ajustement des permissions :

$ chown restic:users /volume1/homes/restic/
$ chown restic:users /volume1/homes/restic/.ssh
$ chown restic:users  /volume1/homes/restic/.ssh/authorized_keys
$ chmod 755 /volume1/homes/restic/
$ chmod 700 /volume1/homes/restic/.ssh
$ chmod 600 /volume1/homes/restic/.ssh/authorized_keys

Il est dĂ©sormais possible de s’authentifier avec la clĂ©:

$ ssh -i <chemin/vers/la/clé> restic@<ip-serveur> -p <port-serveur>

Option 2: SFTP sur un serveur Debian

Ces Ă©tapes ont Ă©tĂ© rĂ©alisĂ©es avec un Raspberry Pi sous Raspbian 10 (dĂ©rivĂ© Debian), disposant d’un accĂšs SSH opĂ©rationnel.

Utilisateurs et répertoire de sauvegarde

  1. Créer un groupe pour les utilisateurs SFTP :
$ sudo groupadd sftp_users
  1. Créer un utilisateur restic (affecté au groupe sftp_users et sans accÚs shell) :
$ sudo useradd -g sftp_users -M -s /bin/false restic
$ sudo passwd restic 
  1. Créer le répertoire destinataire des sauvegardes :
$ sudo mkdir -p /srv/sftp/restic_bkp
  1. Ajuster la propriĂ©tĂ© de l’arborescence racine SFTP et du rĂ©pertoire de l’utilisateur restic :
$ sudo chown -R root:sftp_users /srv/sftp
$ sudo chown -R restic:sftp_users /srv/sftp/restic

Configuration SSH/SFTP

  1. Modifier la configuration du service SSH (/etc/ssh/sshd_config).

  2. Ajouter l’utilisateur restic Ă  la liste des utilisateurs autorisĂ©s (sans supprimer les utilisateurs dĂ©jĂ  prĂ©sents dans cette liste) :

AllowUsers restic
  1. Ajouter des rÚgles spécifiques pour les membres du groupe ftp-users (notamment la racine du serveur SFTP) :
Match Group sftp_users
        X11Forwarding no
        AllowTcpForwarding no
        ChrootDirectory /srv/sftp
        ForceCommand internal-sftp
  1. Indiquer le chemin pour la clĂ© publique d’authentification :
Match User restic
        AuthorizedKeysFile /etc/ssh/authorized_keys_%u
  1. DĂ©poser le fichier de clĂ© publique sur le serveur Ă  l’emplacement suivant: /etc/ssh/authorized_keys_restic

  2. Redémarrer le service pour prendre en compte les changements :

$ sudo systemctl restart ssh

Option 3: Restic REST server

Ces Ă©tapes ont Ă©tĂ© rĂ©alisĂ©es avec un Raspberry Pi sous Raspbian 10 (dĂ©rivĂ© Debian), disposant d’un accĂšs SSH opĂ©rationnel.

Installation des prérequis

L’utilisation du serveur REST Restic nĂ©cessite l’installation de quelques prĂ©requis:

  1. Via apt
$ sudo apt install git apache2-utils certbot
  1. Manuellement pour Go, voir https://www.digitalocean.com/community/tutorials/how-to-install-go-on-debian-10

Installation du serveur REST

  1. Récupérer les sources : git clone https://github.com/restic/rest-server.git

  2. Aller dans le répertoire nouvellement créé et lancer le build : $ CGO_ENABLED=0 go build -o rest-server ./cmd/rest-server

Pour plus de détail, voir le Github du projet : https://github.com/restic/rest-server

Ajout d’un utilisateur

Aller dans le rĂ©pertoire de destination des sauvegardes et crĂ©er l’utilisateur:

$ cd <chemin/des/sauvegardes>
$ sudo -u restic htpasswd -B -c .htpasswd *username*

Chiffrement TLS

Pour le chiffrement du flux HTTP utilisĂ© par le serveur REST, nous allons utiliser Let’s Encrypt.

GĂ©nĂ©ration d’un certificat TLS avec Let’s Encrypt en mode standalone et ajustement des permissions :

  1. Génération des certificats en mode standalone :
$ sudo certbot certonly --standalone
  1. CrĂ©ation d’un script qui redĂ©marrera le service rest-server aprĂšs chaque renouvellement de certificats pour leur prise en compte :
$ sudo sh -c 'printf "#!/bin/sh\nsystemctl restart rest-server.service\n" > /etc/letsencrypt/renewal-hooks/post/rest-server.sh'
  1. Ajustement des permissions :
$ sudo chmod 755 /etc/letsencrypt/renewal-hooks/post/rest-server.sh 
$ sudo chmod 755 -R /etc/letsencrypt/archive/
$ sudo chmod 755 -R /etc/letsencrypt/live/

CrĂ©ation d’un service systemd pour le serveur REST

  1. Copier le modÚle dans le répertoire des services systÚme :
$ sudo cp work/rest-server/examples/systemd/rest-server.service /etc/systemd/system/
  1. Et éditer le fichier comme ci-dessous :
[Unit]
Description=Rest Server
After=syslog.target
After=network.target

[Service]
Type=simple
User=restic
ExecStart=/usr/local/bin/rest-server --path <chemin/des/sauvegardes> --tls --tls-cert /etc/letsencrypt/live/<domain>/fullchain.pem --tls-key /etc/letsencrypt/live/<domain>/privkey.pem
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
  1. Enfin, recharger la liste des services et démarrer le service nouvellement créé :
$ sudo systemctl daemon-reload 
$ sudo systemctl start rest-server.service 

Sources