Introduction : La Sauvegarde comme Ultime Ligne de Défense
Ce guide technique détaille la mise en place d'une solution de sauvegarde résiliente aux ransomwares. Nous déploierons une architecture basée sur l'outil de sauvegarde chiffré Restic et une cible de stockage objet S3-native Artesca, en nous focalisant sur les permissions IAM granulaires, l'automatisation de production via `systemd`, et les procédures de restauration.
Section 1 : Configuration Fine de la Cible sur Artesca
La sécurité de la cible de stockage est la pierre angulaire de la stratégie. Nous appliquons le principe du moindre privilège via une politique IAM stricte.
- Création d'un Bucket avec Object Lock : Dans Artesca, créez un bucket dédié (ex: `prod-server-backups`). Activez Object Lock en mode Compliance pour la protection la plus forte. Définissez une période de rétention par défaut (ex: 15 jours).
- Politique IAM Restrictive : Créez un utilisateur S3 dédié (ex: `svc_restic`) et attachez-lui la politique IAM ci-dessous. Cette politique n'autorise que les actions strictement nécessaires à Restic pour fonctionner, et uniquement sur le bucket désigné.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::prod-server-backups" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::prod-server-backups/*" ] } ] } - Générez et stockez de manière sécurisée les clés d'accès (`Access Key` et `Secret Key`) pour cet utilisateur.
Section 2 : Déploiement d'un Script de Sauvegarde de Production
Sur le serveur à sauvegarder, nous créons un script robuste qui gère les dépendances, le logging et le verrouillage pour éviter les exécutions multiples.
Créez le script /usr/local/bin/backup_script.sh :
#!/bin/bash
set -euo pipefail # Scripting en mode strict
# Fichier de configuration contenant les variables d'environnement
CONFIG_FILE="/etc/restic/env.conf"
LOG_FILE="/var/log/restic_backup.log"
LOCK_FILE="/var/run/restic_backup.lock"
# --- Fonction de logging ---
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE"
}
# --- Verrouillage (pidfile/flock) pour éviter les exécutions concurrentes ---
exec 200>$LOCK_FILE
flock -n 200 || { log "ERREUR: Un backup est déjà en cours."; exit 1; }
# --- Exécution ---
log "Début du script de sauvegarde."
# Charger les variables d'environnement (identifiants, etc.)
if [ -f "$CONFIG_FILE" ]; then
source "$CONFIG_FILE"
else
log "ERREUR: Fichier de configuration $CONFIG_FILE introuvable."
exit 1
fi
# Vérification de l'accessibilité du dépôt
log "Vérification de l'accessibilité du dépôt..."
restic snapshots &> /dev/null || { log "ERREUR: Le dépôt Restic est inaccessible."; exit 1; }
log "Lancement de la sauvegarde..."
restic backup /var/www /etc /home/bruno --exclude-file=/etc/restic/exclude.conf --verbose >> "$LOG_FILE" 2>&1
log "Application de la politique de rétention..."
# Garder les 7 derniers jours, 4 dernières semaines, 6 derniers mois, 2 dernières années
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --keep-yearly 2 --prune >> "$LOG_FILE" 2>&1
log "Vérification de l'intégrité du dépôt..."
restic check >> "$LOG_FILE" 2>&1
log "Fin du script de sauvegarde."
exit 0
N'oubliez pas de rendre ce script exécutable : sudo chmod +x /usr/local/bin/backup_script.sh
Section 3 : Automatisation Fiable avec `systemd`
Nous utilisons un service et un timer `systemd` pour une exécution planifiée et contrôlée, supérieure à `cron` pour les services système.
- Création de l'unité de service (
/etc/systemd/system/restic-backup.service) :[Unit] Description=Service de sauvegarde Restic Wants=network-online.target After=network-online.target [Service] Type=simple ExecStart=/usr/local/bin/backup_script.sh User=root [Install] WantedBy=multi-user.target - Création de l'unité timer (
/etc/systemd/system/restic-backup.timer) :[Unit] Description=Lance le backup Restic tous les jours à 02h30 [Timer] # Exécution quotidienne à 02h30 du matin OnCalendar=*-*-* 02:30:00 # Ajoute une variation aléatoire de 10 minutes pour éviter de surcharger les systèmes RandomizedDelaySec=10m Persistent=true [Install] WantedBy=timers.target - Activation du timer :
sudo systemctl daemon-reload sudo systemctl enable --now restic-backup.timer sudo systemctl list-timers # Pour vérifier
Section 4 : Procédures de Restauration et de Validation
Une sauvegarde n'a de valeur que si elle est testée et restaurable. Restic offre des outils puissants pour cela.
- Lister les snapshots :
restic snapshots - Monter un snapshot comme un système de fichiers (lecture seule) : C'est idéal pour explorer les fichiers d'une sauvegarde sans tout restaurer.
mkdir /mnt/restore restic mount /mnt/restore # Vous pouvez maintenant naviguer dans /mnt/restore - Restaurer des fichiers ou des répertoires spécifiques :
# Restaurer le dernier snapshot de /etc/apache2 vers un répertoire temporaire restic restore latest --target /tmp/restore --path /etc/apache2 - Validation complète : Pour être absolument certain de l'intégrité des données, une vérification avec lecture des données depuis la cible S3 est recommandée périodiquement.
restic check --read-data