ITSkillsCenter
Cybersécurité

Sauvegarder ses données : stratégie 3-2-1 adaptée aux PME

3 دقائق للقراءة
Miniature - Sauvegarder ses données : stratégie 3-2-1 adaptée aux PME

Ce que vous saurez faire

  1. Règle 3-2-1 pour backups
  2. Restic + B2 chiffré
  3. PostgreSQL PITR
  4. Tests de restauration automatiques

Étape 1 — Règle 3-2-1-1-0

3 copies de chaque donnée critique
2 supports différents (disque + cloud)
1 copie hors site
1 copie offline/immuable (anti-ransomware)
0 erreur: chaque backup testé

Étape 2 — Inventaire

Critique         Fréquence   RPO      Rétention
Base de données  H+1         1h       90 jours
Fichiers users   J+1         24h      90 jours
Emails           J+1         24h      7 ans
Contrats PDF     temps réel  0        10 ans
Config           à changement 0       illimité
VMs système     J+7 + M+1   1 sem    1 an

Étape 3 — Rsync incrémental

#!/usr/bin/env bash
# /usr/local/bin/backup.sh
set -euo pipefail

HORODATAGE=$(date +%Y%m%d_%H%M)
DEST="/srv/backups/$HORODATAGE"
DERNIER="/srv/backups/dernier"

mkdir -p "$DEST"
rsync -aH --delete --link-dest="$DERNIER" \
  /srv/data/ "$DEST/"

ln -snf "$DEST" "$DERNIER"

# Rotation: 7 quotidiennes + 4 hebdo + 12 mensuelles
find /srv/backups -maxdepth 1 -type d -mtime +7 -name '2[0-9]*' \
  | sort | head -n -30 | xargs -r rm -rf

# Sync vers backup distant
rsync -aHz --delete /srv/backups/ backup@nas.itsc.sn:/volumes/itsc/

Étape 4 — Restic vers S3/B2

apt install -y restic

export RESTIC_REPOSITORY="s3:s3.amazonaws.com/itsc-backups-2026"
export RESTIC_PASSWORD="$(cat /etc/restic.pass)"
export AWS_ACCESS_KEY_ID=... AWS_SECRET_ACCESS_KEY=...

restic init
restic backup /srv/data /etc /home --tag quotidien --exclude-caches

# Rétention
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune

# Restauration
restic snapshots
restic restore latest --target /tmp/restore

Étape 5 — PostgreSQL dump chiffré

pg_dump --format=custom --compress=9 -d itsc \
  | age -r $(cat /etc/age.pub) \
  | aws s3 cp - "s3://itsc-backups/pg/$(date +%F).dump.age" \
    --sse AES256 --storage-class STANDARD_IA

Étape 6 — WAL archiving PITR

# postgresql.conf
wal_level = replica
archive_mode = on
archive_command = 'aws s3 cp %p s3://itsc-backups/pg-wal/%f --storage-class STANDARD_IA'
# Restauration point-in-time
pg_basebackup -D /data/restore -Xs -P
# recovery_target_time = '2026-04-22 14:23:00'

Étape 7 — Sauvegardes immuables (anti-ransomware)

# S3 Object Lock en mode COMPLIANCE
aws s3api put-object-lock-configuration --bucket itsc-backups \
  --object-lock-configuration '{
    "ObjectLockEnabled": "Enabled",
    "Rule": { "DefaultRetention": { "Mode": "COMPLIANCE", "Days": 30 } }
  }'

# Impossible de supprimer même avec compte AWS root

Étape 8 — Test mensuel automatique

#!/usr/bin/env bash
# /usr/local/bin/restore-test.sh
DOSSIER="/tmp/restore-test-$(date +%F)"
mkdir -p "$DOSSIER"
restic restore latest --target "$DOSSIER"

# Contrôle intégrité
EXPECTED=1500
ACTUAL=$(find "$DOSSIER" -type f | wc -l)

if [ "$ACTUAL" -lt "$EXPECTED" ]; then
  curl -X POST "$SLACK_WEBHOOK" \
    -d "{\"text\":\"ALERTE: $ACTUAL fichiers restaurés (attendus $EXPECTED)\"}"
fi

rm -rf "$DOSSIER"

Étape 9 — Log SQL backup

CREATE TABLE backup_log (
  id SERIAL PRIMARY KEY,
  ts TIMESTAMPTZ DEFAULT now(),
  type TEXT,              -- 'db', 'files', 'mail'
  status TEXT,            -- 'success', 'failure'
  duration_s INT,
  size_bytes BIGINT,
  destination TEXT,
  verified BOOLEAN DEFAULT false
);

-- Rapport hebdo
SELECT type,
  COUNT(*) FILTER (WHERE status = 'success') AS success,
  COUNT(*) FILTER (WHERE status = 'failure') AS failure,
  MAX(ts) AS last_backup
FROM backup_log
WHERE ts >= CURRENT_DATE - 7
GROUP BY type;

Étape 10 — Chiffrement avec age

age-keygen -o ~/.age/key.txt
# Publique: age1xxxxxx...

tar czf - /srv/data | age -r age1xxxxxx... > backup.tar.gz.age

# Restauration
age -d -i ~/.age/key.txt backup.tar.gz.age | tar xzf -

Coûts 1 To

Backblaze B2:         6 USD/mo
AWS S3 Standard-IA:   12,5 USD/mo
Hetzner Storage:      3,50 EUR/mo
Restic + B2:          6 USD + 0 bandwidth sortante (recommandé PME)

Plan 30 jours

  1. J1: cartographier données critiques
  2. J3: choisir outil (Restic + B2)
  3. J7: premier backup complet chiffré
  4. J14: rotation/rétention automatisées
  5. J21: restauration test réussie
  6. J30: monitoring Slack + runbook
Besoin d'un site web ?

Confiez-nous la Création de Votre Site Web

Site vitrine, e-commerce ou application web — nous transformons votre vision en réalité digitale. Accompagnement personnalisé de A à Z.

À partir de 250.000 FCFA
Parlons de Votre Projet
Publicité