Aide-Mémoire Sécurité WordPress VPS Debian – Informations Vérifiées
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é Fail2banSurveiller 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.