Dernière Mise à Jour: Décembre 2025
Version Debian: Debian 13 « Trixie » (Stable actuelle)
Date de Sortie: 9 août 2025
Support Sécurité: Jusqu’au 9 août 2028 (Complet) + 2 ans LTS = 5 ans au total
1. Mises à Jour de Sécurité APT & Gestion des Paquets
Commandes Officielles de Mise à Jour de Sécurité
# Mettre à jour la liste des paquets
sudo apt update
# Mettre à niveau tous les paquets (sécurité + mises à jour régulières)
sudo apt upgrade
# Lister les mises à niveau disponibles
sudo apt list --upgradable
# Mettre à niveau un paquet spécifique uniquement
sudo apt install [nom-du-paquet]
Configuration des Mises à Jour de Sécurité Automatiques
Installer unattended-upgrades:
sudo apt install unattended-upgrades
sudo dpkg-reconfigure unattended-upgrades
Activer les timers de mise à jour automatique:
sudo systemctl enable --now apt-daily.timer
sudo systemctl enable --now apt-daily-upgrade.timer
Fichiers de Configuration:
- Configuration principale:
/etc/apt/apt.conf.d/50unattended-upgrades - Planification auto-upgrade:
/etc/apt/apt.conf.d/20auto-upgrades - Configuration personnalisée (optionnel):
/etc/apt/apt.conf.d/52unattended-upgrades-local
Configuration des Sources de Sécurité
Pour Debian 13 (Trixie) – Ajouter à /etc/apt/sources.list:
deb https://deb.debian.org/debian-security trixie-security main contrib
Pour Debian 12 (Bookworm) – Ajouter à /etc/apt/sources.list:
deb https://deb.debian.org/debian-security bookworm-security main contrib
Outils de Redémarrage des Services Post-Mise à Jour
# Installer les outils de détection de redémarrage des services
sudo apt install debian-goodies needrestart
# Vérifier quels services nécessitent un redémarrage après mise à jour
sudo checkrestart
# needrestart s'exécute automatiquement après apt upgrade
Ressources Sécurité
2. Configuration du Pare-feu UFW pour WordPress
Installation
sudo apt install ufw
Politiques par Défaut (Bonne Pratique de Sécurité)
# Définir les politiques par défaut AVANT d'activer UFW
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw default deny routed
Fichier de configuration: /etc/default/ufw
Ports Essentiels pour WordPress
CRITIQUE: Autoriser SSH EN PREMIER pour éviter le verrouillage sur les serveurs distants.
# Méthode 1: Par numéro de port
sudo ufw allow 22/tcp # SSH (DOIT être en premier sur serveurs distants)
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
# Méthode 2: Par nom de service
sudo ufw allow ssh # Port 22
sudo ufw allow http # Port 80
sudo ufw allow https # Port 443
# Méthode 3: SSH avec limitation de débit (recommandé)
sudo ufw limit 22/tcp # Limite le débit des connexions SSH
Activer UFW
# Vérifier l'état d'UFW avant activation
sudo ufw status verbose
# Activer le pare-feu
sudo ufw enable
# Vérifier la configuration
sudo ufw status numbered
Commandes de Gestion Courantes
# Afficher l'état
sudo ufw status verbose
# Afficher les règles numérotées
sudo ufw status numbered
# Supprimer une règle par numéro
sudo ufw delete [numéro]
# Désactiver UFW
sudo ufw disable
# Réinitialiser UFW aux valeurs par défaut
sudo ufw reset
Référence des Ports pour WordPress
3. Configuration du Durcissement SSH
Fichiers de Configuration
/etc/ssh/sshdconfig/etc/ssh/sshdconfig.d/.conf/var/log/auth.log (Debian/Ubuntu)Paramètres Recommandés pour sshdconfig
Éditer la configuration:
sudo nano /etc/ssh/sshdconfig
Paramètres de Sécurité Critiques:
# Désactiver la connexion root
PermitRootLogin no
# Désactiver l'authentification par mot de passe (utiliser clés SSH uniquement)
PasswordAuthentication no
PubkeyAuthentication yes
# Désactiver les mots de passe vides
PermitEmptyPasswords no
# Restreindre à des utilisateurs spécifiques (choisir l'une)
AllowUsers utilisateur1 utilisateur2
# OU restreindre à des groupes
AllowGroups ssh-users
# Changer le port SSH par défaut (optionnel mais recommandé)
Port 2222
# Limiter les tentatives d'authentification
MaxAuthTries 3
# Déconnecter si aucune connexion réussie
LoginGraceTime 30
# Désactiver le transfert X11 (si non nécessaire)
X11Forwarding no
# Utiliser la séparation des privilèges
UsePrivilegeSeparation yes
# Taille minimale de clé RSA (OpenSSH 8.6+)
RequiredRSASize 3072
Algorithmes Cryptographiques Modernes (Standards 2025):
# Algorithmes d'échange de clés
KexAlgorithms sntrup761x25519-sha512@openssh.com,curve25519-sha256,curve25519-sha256@libssh.org,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512
# Chiffrements
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes256-ctr
# Algorithmes MAC
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512,hmac-sha2-256
Test & Application des Modifications
# Tester la configuration pour les erreurs de syntaxe (CRITIQUE - faire ceci en premier)
sudo sshd -t
# Redémarrer le service SSH
sudo systemctl restart sshd
# Vérifier l'état du service SSH
sudo systemctl status sshd
Configuration de l’Authentification par Clé SSH
# Générer une paire de clés SSH (sur la machine locale)
ssh-keygen -t ed25519 -C "votreemail@exemple.com"
# OU pour RSA (minimum 4096 bits)
ssh-keygen -t rsa -b 4096 -C "votreemail@exemple.com"
# Copier la clé publique sur le serveur
ssh-copy-id utilisateur@ipserveur
# Définir les permissions correctes sur le serveur
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorizedkeys
Authentification à Deux Facteurs (Optionnel)
# Installer Google Authenticator
sudo apt install libpam-google-authenticator
# Configurer pour l'utilisateur
google-authenticator
Ajouter à /etc/pam.d/sshd:
auth required pamgoogleauthenticator.so
Mettre à jour /etc/ssh/sshdconfig:
ChallengeResponseAuthentication yes
4. Configuration de Fail2ban pour WordPress
Installation
sudo apt install fail2ban
Structure des Fichiers de Configuration
Répertoire: /etc/fail2ban/
Fichiers & Répertoires Clés:
/etc/fail2ban/fail2ban.conf – Configuration principale de fail2ban/etc/fail2ban/fail2ban.local – Paramètres fail2ban personnalisés (créer celui-ci)/etc/fail2ban/jail.conf – Configurations des prisons (NE PAS éditer)/etc/fail2ban/jail.local – Paramètres de prison personnalisés (créer celui-ci)/etc/fail2ban/jail.d/ – Fichiers de configuration de prison additionnels/etc/fail2ban/filter.d/ – Définitions des filtres/etc/fail2ban/action.d/ – Configurations des actionsConfiguration Initiale
# Copier les configurations par défaut vers les fichiers locaux
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local
Configuration du Filtre WordPress
Créer le fichier de filtre: /etc/fail2ban/filter.d/wordpress.conf
[Definition]
# Détecter les tentatives de connexion WordPress
failregex = ^ . "POST /wp-login.php
^ . "POST /xmlrpc.php
^ . "POST ./wp-comments-post.php
ignoreregex =
Filtre complet alternatif:
[Definition]
failregex = .POST.(wp-login.php|xmlrpc.php)
. GET.wlwmanifest.xml
ignoreregex =
Configuration de la Prison WordPress
Ajouter à /etc/fail2ban/jail.local:
Pour Nginx:
[wordpress]
enabled = true
port = http,https
filter = wordpress
logpath = /var/log/nginx/access.log
/var/log/nginx/error.log
maxretry = 3
findtime = 600
bantime = 3600
action = iptables-multiport[name=wordpress, port="http,https"]
Pour Apache:
[wordpress]
enabled = true
port = http,https
filter = wordpress
logpath = /var/log/apache2/access.log
/var/log/apache2/error.log
maxretry = 3
findtime = 600
bantime = 3600
action = iptables-multiport[name=wordpress, port="http,https"]
Configuration de la Prison SSH
Protection SSH standard (ajouter à /etc/fail2ban/jail.local):
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
findtime = 600
bantime = 3600
Protection SSH agressive (alternative):
[sshd-aggressive]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 2
findtime = 300
bantime = 86400
Définitions des Paramètres
true pour activer la prisonExemples de Configuration Courante
Modéré (recommandé pour WordPress):
maxretry = 3
findtime = 600 # 10 minutes
bantime = 3600 # 1 heure
Agressif (environnements haute sécurité):
maxretry = 2
findtime = 300 # 5 minutes
bantime = 86400 # 24 heures
Permissif (développement/tests):
maxretry = 5
findtime = 1200 # 20 minutes
bantime = 1800 # 30 minutes
Tests & Gestion
# Tester le filtre contre le fichier de log
sudo fail2ban-regex /var/log/nginx/access.log /etc/fail2ban/filter.d/wordpress.conf
# Démarrer fail2ban
sudo systemctl start fail2ban
# Activer fail2ban au démarrage
sudo systemctl enable fail2ban
# Vérifier l'état de fail2ban
sudo systemctl status fail2ban
# Vérifier l'état d'une prison spécifique
sudo fail2ban-client status wordpress
sudo fail2ban-client status sshd
# Lister toutes les prisons actives
sudo fail2ban-client status
# Bannir manuellement une IP
sudo fail2ban-client set wordpress banip 192.168.1.100
# Débannir manuellement une IP
sudo fail2ban-client set wordpress unbanip 192.168.1.100
# Recharger la configuration de fail2ban
sudo fail2ban-client reload
# Redémarrer le service fail2ban
sudo systemctl restart fail2ban
Cibles Spécifiques à WordPress
wp-login.php: Page de connexion admin WordPress (cible d’attaque principale)
xmlrpc.php: Point d’accès API XML-RPC (vulnérable à la force brute via system.multicall)
wp-comments-post.php: Soumission de commentaires (peut être vecteur de spam)
Protection Avancée de xmlrpc.php
Option 1: Bloquer via Nginx (ajouter au bloc server):
location ~ /xmlrpc.php$ {
deny all;
}
Option 2: Bloquer via Apache .htaccess:
Order Deny,Allow
Deny from all
5. Stratégies & Outils de Sauvegarde
Outils de Sauvegarde Recommandés pour Debian
Rsync (Sauvegarde au Niveau Fichiers)
Installation:
sudo apt install rsync
Fonctionnalités Clés:
Commande de Sauvegarde WordPress de Base:
# Sauvegarder les fichiers WordPress vers un serveur distant
rsync -avz --delete /var/www/html/ utilisateur@serveur-sauvegarde:/backups/wordpress/
# Sauvegarde avec motifs d'exclusion
rsync -avz --exclude 'wp-content/cache/' --exclude '.log' /var/www/html/ /backup/wordpress/
# Test à blanc (tester sans transfert réel)
rsync -avz --dry-run /var/www/html/ /backup/wordpress/
Options Rsync Expliquées:
-a: Mode archive (préserve permissions, horodatages, liens symboliques)-v: Sortie verbeuse-z: Compresser pendant le transfert--delete: Supprimer les fichiers dans la destination qui n’existent pas dans la sourceDuplicity (Sauvegarde Incrémentale Chiffrée)
Installation:
sudo apt install duplicity
Fonctionnalités Clés:
Utilisation de Base:
# Sauvegarde complète vers serveur SSH distant
duplicity /var/www/html/ sftp://utilisateur@serveur-sauvegarde//backups/wordpress/
# Sauvegarde incrémentale
duplicity --no-encryption /var/www/html/ file:///backup/wordpress/
# Restaurer depuis sauvegarde
duplicity restore sftp://utilisateur@serveur-sauvegarde//backups/wordpress/ /var/www/html/
# Lister les fichiers de sauvegarde
duplicity list-current-files sftp://utilisateur@serveur-sauvegarde//backups/wordpress/
Outils de Sauvegarde Additionnels
tar + gzip (Compression simple):
sudo apt install tar gzip
# Créer une archive compressée
tar -czf wordpress-backup-$(date +%Y%m%d).tar.gz /var/www/html/
# Extraire l'archive
tar -xzf wordpress-backup-20251218.tar.gz
Bacula (Solution de sauvegarde d’entreprise):
sudo apt install bacula-server bacula-client
Stratégie de Sauvegarde WordPress
Quoi Sauvegarder
1. Fichiers WordPress:
/var/www/html/ (ou votre répertoire d’installation WordPress)wp-content/cache/, fichiers temporaires, .log2. Base de Données:
# Sauvegarder la base de données MySQL WordPress
mysqldump -u [nomutilisateur] -p [nombasedonnees] > wordpress-db-$(date +%Y%m%d).sql
# Sauvegarde avec compression
mysqldump -u [nomutilisateur] -p [nombasedonnees] | gzip > wordpress-db-$(date +%Y%m%d).sql.gz
# Restaurer la base de données
mysql -u [nomutilisateur] -p [nombasedonnees] < wordpress-db-20251218.sql
3. Fichiers de Configuration:
/etc/nginx/ ou /etc/apache2//etc/php//fpm/ (configurations PHP-FPM)/etc/letsencrypt/ (certificats SSL)Exemple de Script de Sauvegarde Automatisé
Créer: /usr/local/bin/wordpress-backup.sh
#!/bin/bash
BACKUPDIR="/backups/wordpress"
WPDIR="/var/www/html"
DBNAME="wordpressdb"
DBUSER="wordpressuser"
DBPASS="yourpassword"
DATE=$(date +%Y%m%d-%H%M%S)
# Créer le répertoire de sauvegarde
mkdir -p $BACKUPDIR
# Sauvegarder les fichiers
rsync -az --delete $WPDIR/ $BACKUPDIR/files-$DATE/
# Sauvegarder la base de données
mysqldump -u $DBUSER -p$DBPASS $DBNAME | gzip > $BACKUPDIR/db-$DATE.sql.gz
# Supprimer les sauvegardes de plus de 30 jours
find $BACKUPDIR -type f -mtime +30 -delete
echo "Sauvegarde terminée: $DATE"
Définir les permissions & planifier:
# Rendre exécutable
sudo chmod +x /usr/local/bin/wordpress-backup.sh
# Ajouter à crontab (quotidien à 2h du matin)
sudo crontab -e
# Ajouter la ligne:
0 2 * /usr/local/bin/wordpress-backup.sh >> /var/log/wordpress-backup.log 2>&1
Bonnes Pratiques de Sauvegarde
Destinations de Sauvegarde Hors Site
s3://nom-bucket/chemin/gs://nom-bucket/chemin/6. Mesures de Sécurité Additionnelles
Permissions de Fichiers pour WordPress
# Définir la propriété correcte
sudo chown -R www-data:www-data /var/www/html/
# Définir les permissions des répertoires
sudo find /var/www/html/ -type d -exec chmod 755 {} ;
# Définir les permissions des fichiers
sudo find /var/www/html/ -type f -exec chmod 644 {} ;
# Sécuriser wp-config.php
sudo chmod 600 /var/www/html/wp-config.php
Outils de Surveillance de Sécurité
# Installer les outils d'audit de sécurité
sudo apt install lynis rkhunter chkrootkit
# Exécuter un audit de sécurité Lynis
sudo lynis audit system
# Scanner pour rootkits
sudo rkhunter --check
sudo chkrootkit
Surveillance des Logs
Fichiers de logs importants:
/var/log/auth.log - Logs d'authentification (SSH, sudo)/var/log/syslog - Logs système/var/log/nginx/access.log - Accès web Nginx/var/log/nginx/error.log - Erreurs Nginx/var/log/apache2/access.log - Accès web Apache/var/log/fail2ban.log - Activité Fail2ban# Surveiller les logs en temps réel
sudo tail -f /var/log/auth.log
sudo tail -f /var/log/nginx/access.log
# Rechercher les tentatives de connexion échouées
sudo grep "Failed password" /var/log/auth.log
# Installer un outil d'analyse de logs
sudo apt install logwatch
Liste de Contrôle du Durcissement Système
7. Commandes de Référence Rapide
Mises à Jour Système
sudo apt update && sudo apt upgrade -y
sudo apt autoremove
sudo reboot # Si le noyau a été mis à jour
Pare-feu
sudo ufw status verbose
sudo ufw enable/disable
sudo ufw allow/deny [port]
SSH
sudo systemctl restart sshd
sudo systemctl status sshd
sudo sshd -t # Tester la config
Fail2ban
sudo fail2ban-client status
sudo fail2ban-client status [nom-prison]
sudo fail2ban-client reload
sudo systemctl restart fail2ban
Services
sudo systemctl status [service]
sudo systemctl start/stop/restart [service]
sudo systemctl enable/disable [service]
Logs
sudo tail -f /var/log/auth.log
sudo journalctl -u ssh -f
sudo journalctl -u fail2ban -f
8. Documentation Officielle & Ressources
Ressources Officielles Debian
Versions Actuelles de Debian
Ressources Communautaires
Listes de Diffusion Sécurité
Informations de Version
Version de l'Aide-Mémoire: 1.0
Dernière Mise à Jour: 18 décembre 2025
OS Cible: Debian 13 (Trixie) / Debian 12 (Bookworm)
Vérifié: Toutes les commandes et configurations vérifiées par rapport à la documentation officielle
Sources:
Notes
IMPORTANT: Toujours maintenir une session SSH ouverte lors de la modification des paramètres du pare-feu ou SSH pour éviter le verrouillage. Tester tous les changements dans un environnement de staging en premier.