Cet article fait partie d’une sĂ©rie :
- Sauvegardes #1 â Introduction et serveur de sauvegarde đŸ
- Sauvegardes #2 â Sauvegardes de serveurs avec Restic đ
- Sauvegardes #3 â Sauvegardes de PC avec Restic đ»
- Sauvegardes #4 â Sauvegardes de bases MySQL/MariaDB avec Restic đïž
- Sauvegardes #5 â Sauvegardes d’annuaire OpenLDAP avec Restic đïž
- Sauvegardes #6 â Sauvegardes de bases PostgreSQL avec Restic đïž
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 :
- Les données sont répliquées au moins 3 fois (p.e. leur source, le serveur de sauvegarde, et une copie supplémentaire sur un disque USB),
- Ces réplications sont réalisées sur au moins 2 stockages différents,
- Elles sont stockées à minima sur 1 site distant.
Ainsi, je souhaites que la solution respecte le schéma suivant :

| 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:
- Un serveur (Backup NAS) ayant une capacité de stockage adéquate,
- Une bonne bande passante sur chaque site,
- Un disque dur externe pour faire une copie des sauvegardes,
- Une personne de confiance chez qui positionner le serveur de sauvegarde (site distant).
Note sur les performances :
- Ressources : les protocoles de chiffrement (SFTP ou HTTPS) du canal de communication entre la machine Ă sauvegarder et le serveur de sauvegarde sont particuliĂšrement consommateurs en ressources. Il est donc nĂ©cessaire de faire attention au choix du matĂ©riel pour ce serveur. Par exemple, un Raspberry Pi d’ancienne gĂ©nĂ©ration (B+) ne convient pas.
- Réseaux : une bonne passante permet également limiter le temps de sauvegarde.
- Un temps rĂ©duit de sauvegarde est important, car il permet de rĂ©duire les risques de collisions (lancement d’une sauvegarde alors que la prĂ©cĂ©dente n’est pas terminĂ©e) ou de corruptions (si des modifications sont opĂ©rĂ©es sur les fichiers pendant la sauvegarde).
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 :
- Un NAS Synology, avec le service SFTP activé,
- Un serveur SFTP standard (sur Raspberry Pi),
- Un serveur REST Restic (sur Raspberry Pi).
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Ă©.
- Se connecter Ă l’interface Web du Synology.
- Aller dans
Control panel > Terminal & SNMP. - Cocher la case
Enable SSH service, et modifier le port par dĂ©faut si vous le souhaitez (Ă bien notĂ© pour plus tard). - CrĂ©er un utilisateur dĂ©diĂ© pour la sauvegarde (restic) et l’ajouter dans le groupe Administrators. En effet, seuls les utilisateurs de ce groupe peuvent accĂ©der au service SSH.
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é.
- Se connecter en SSH (
$ ssh restic@<ip-serveur> -p <port-serveur>- si port par dĂ©faut modifiĂ© plus haut) - Modifier la configuration du service SSH pour autoriser l’authentification par clĂ© (
/etc/ssh/sshd_config) - DĂ©-commenter les lignes suivantes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
- Redémarrer le service SSH pour prendre en compte les modifications
$ synoservicectl --restart sshd- Ou desactiver et reactiver depuis l’interface web du NAS
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,
- Aller dans Control Panel > User > Advanced > User Home.
- Cocher la case
Enable home service. - Sélectionner la
Location(par dĂ©faut il choisit le Volume 1, ce qui devrait convenir si vous n’en avez qu’un, sinon ajuster).
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,
- Aller dans Control Panel > File Services > FTP > General / Advanced Settings > Security Settings
- Cocher la case
Change user root directories - Aller dans Select User > Add
- SĂ©lectionner l’utilisateur restic, et cocher la case
User home
Installer la clĂ© d’authentification
Comme vu prĂ©cĂ©demment, une authentification par clĂ© doit ĂȘtre mise en place.
Création et installation:
- Générer la paire de clé depuis la machine source avec la commande suivante :
ssh-keygen -t rsa - Copier la clé publique sur le NAS :
ssh-copy-id -i <chemin/vers/la/clé> -p <port-serveur> restic@<ip-serveur>
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
- Créer un groupe pour les utilisateurs SFTP :
$ sudo groupadd sftp_users
- 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
- Créer le répertoire destinataire des sauvegardes :
$ sudo mkdir -p /srv/sftp/restic_bkp
- 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
-
Modifier la configuration du service SSH (
/etc/ssh/sshd_config). -
Ajouter l’utilisateur restic Ă la liste des utilisateurs autorisĂ©s (sans supprimer les utilisateurs dĂ©jĂ prĂ©sents dans cette liste) :
AllowUsers restic
- 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
- Indiquer le chemin pour la clĂ© publique d’authentification :
Match User restic
AuthorizedKeysFile /etc/ssh/authorized_keys_%u
-
DĂ©poser le fichier de clĂ© publique sur le serveur Ă l’emplacement suivant:
/etc/ssh/authorized_keys_restic -
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:
- Via
apt
$ sudo apt install git apache2-utils certbot
- Manuellement pour Go, voir https://www.digitalocean.com/community/tutorials/how-to-install-go-on-debian-10
Installation du serveur REST
-
Récupérer les sources :
git clone https://github.com/restic/rest-server.git -
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*
B–> utilisation de l’algorithme bcrypt pour la gĂ©nĂ©ration du mot de passec–> pour crĂ©er un nouveau fichier.htpasswd, l’option peut ĂȘtre omise pour l’ajout d’un utilisateur supplĂ©mentaire
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 :
- Génération des certificats en mode standalone :
$ sudo certbot certonly --standalone
- CrĂ©ation d’un script qui redĂ©marrera le service
rest-serveraprĂš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'
- 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
- 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/
- 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
- Enfin, recharger la liste des services et démarrer le service nouvellement créé :
$ sudo systemctl daemon-reload
$ sudo systemctl start rest-server.service
Sources
- https://flatpacklinux.com/2020/01/07/configure-the-ssh-server-on-your-synology-nas/
- https://silica.io/using-ssh-key-authentification-on-a-synology-nas-for-remote-rsync-backups/
-
https://www.backblaze.com/blog/the-3-2-1-backup-strategy/ ↩︎
-
NAS - Network Attached Storage, serveur de stockage. ↩︎
-
https://restic.readthedocs.io/en/latest/070_encryption.html ↩︎