Ce guide vous accompagne à travers les étapes essentielles pour renforcer votre serveur pour Drupal 11.x. Vous apprendrez quoi faire, pourquoi c'est important, et comment implémenter chaque mesure de sécurité efficacement.
Pourquoi le renforcement de la sécurité du serveur est plus important que vous ne le pensez pour le CMS Drupal
Les vulnérabilités du serveur créent plusieurs vecteurs d'attaque qui contournent complètement votre sécurité Drupal. Les attaquants peuvent :
- Accéder directement à votre base de données
- Injecter du code malveillant dans vos fichiers
- Voler des données sensibles avant qu'elles n'atteignent Drupal
- Utiliser votre serveur pour attaquer d'autres systèmes
Le rapport de sécurité Drupal 2024 a montré que 73% des sites Drupal compromis avaient des vulnérabilités au niveau du serveur, non au niveau de l'application. Cela signifie que votre première ligne de défense n'est pas votre configuration Drupal—c'est la configuration de votre serveur.
Étape 1 : Maintenir à jour votre pile logicielle Drupal
Commencez par vos fondations : les logiciels obsolètes sont la cible la plus facile pour les attaquants.
Mettre à jour le cœur Drupal et les modules de sécurité
Vérifiez les mises à jour chaque semaine, pas chaque mois. Configurez les notifications automatiques :
# Activer les notifications de mise à jour dans Drupal drush pm:enable update drush updatedb
Supprimez toujours les modules et thèmes inutilisés. Chaque composant installé augmente votre surface d'attaque, même s'il est désactivé.
Maintenir votre pile logicielle serveur
Utilisez les versions de support à long terme (LTS) quand c'est possible :
- Ubuntu 24.04 LTS ou RHEL 9 pour votre OS
- PHP 8.2 ou 8.3 (évitez les versions plus anciennes)
- MariaDB 10.11 ou PostgreSQL 15
- Nginx 1.24 ou Apache 2.4.57
Configurez les mises à jour de sécurité automatiques pour votre OS :
# Ubuntu/Debian sudo apt install unattended-upgrades sudo dpkg-reconfigure unattended-upgrades # CentOS/RHEL sudo yum install yum-cron sudo systemctl enable yum-cron
Étape 2 : Implémenter le certificat SSL HTTPS et les en-têtes de sécurité
Installer les certificats SSL/TLS pour Drupal
Utilisez Let's Encrypt pour des certificats gratuits ou achetez des certificats commerciaux pour les sites d'affaires :
# Installer Certbot sudo apt install certbot python3-certbot-nginx # Obtenir le certificat sudo certbot --nginx -d votredomaine.com -d www.votredomaine.com
Configurer les en-têtes de sécurité pour les sites Drupal
Ajoutez ces en-têtes à votre configuration Nginx :
server { listen 443 ssl http2; server_name votredomaine.com; # En-têtes de sécurité add_header X-Frame-Options "SAMEORIGIN" always; add_header X-Content-Type-Options "nosniff" always; add_header X-XSS-Protection "1; mode=block" always; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline';" always; add_header Referrer-Policy "strict-origin-when-cross-origin" always; }
Testez vos en-têtes en utilisant Mozilla Observatory pour vous assurer qu'ils fonctionnent correctement.
Étape 3 : Sécuriser l'accès utilisateur et l'authentification pour l'admin Drupal
Activer l'authentification à deux facteurs pour Drupal
Installez le module TFA pour les comptes administrateurs :
composer require drupal/tfa drush en tfa
Configurez-le pour exiger l'A2F pour tous les utilisateurs avec des rôles administratifs.
Définir des politiques de mots de passe robustes dans Drupal
Utilisez le module Password Policy :
composer require drupal/password_policy drush en password_policy
Configurez les exigences minimales :
- 12 caractères minimum
- Mélange de majuscules, minuscules, chiffres et symboles
- Aucun mot de passe courant ou mot du dictionnaire
- Aucune réutilisation des 5 derniers mots de passe
Limiter les permissions utilisateur dans le CMS Drupal
Révisez les rôles utilisateur mensuellement. Supprimez les permissions que les utilisateurs n'utilisent pas activement. Créez des rôles spécifiques pour différentes tâches au lieu de donner à tout le monde un accès administratif.
Étape 4 : Renforcer les permissions de fichiers et répertoires pour les sites Drupal
Définir les permissions de fichiers correctes pour Drupal
Vos fichiers Drupal nécessitent des permissions spécifiques pour fonctionner de manière sécurisée :
# Définir les permissions de fichiers find /var/www/html -type f -exec chmod 644 {} \; # Définir les permissions de répertoires find /var/www/html -type d -exec chmod 755 {} \; # Sécuriser les fichiers sensibles chmod 400 /var/www/html/sites/default/settings.php chmod 400 /var/www/html/sites/default/services.yml
Empêcher l'exécution PHP dans les répertoires de téléversement
Ajoutez ceci à votre fichier .htaccess dans le répertoire files :
Require all denied
Pour Nginx, ajoutez ceci à votre bloc serveur :
location ~* ^/sites/.*/files/.*\.php$ { deny all; }
Déplacer les fichiers privés hors de la racine web
Configurez le stockage de fichiers privés hors de votre répertoire web :
// Dans settings.php $settings['file_private_path'] = '/var/drupal/private';
Créez le répertoire et définissez les permissions :
sudo mkdir -p /var/drupal/private sudo chown www-data:www-data /var/drupal/private sudo chmod 755 /var/drupal/private
Étape 5 : Configurer la sécurité du serveur web pour l'hébergement Drupal
Désactiver les listes de répertoires
Pour Apache, ajoutez ceci à votre configuration :
Options -Indexes
Pour Nginx :
autoindex off;
Restreindre l'accès aux fichiers Drupal sensibles
Bloquez l'accès aux fichiers administratifs de Drupal :
# Apache .htaccess Require ip 127.0.0.1 Require ip ::1
# Nginx location ~ ^/(cron|install|update|authorize)\.php$ { allow 127.0.0.1; allow ::1; deny all; try_files $uri =404; fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; fastcgi_index index.php; include fastcgi_params; }
Étape 6 : Renforcer la configuration PHP pour la performance Drupal
Désactiver les fonctions PHP dangereuses
Modifiez votre fichier php.ini :
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
Définir les directives de sécurité pour PHP
expose_php = Off allow_url_fopen = Off allow_url_include = Off enable_dl = Off display_errors = Off log_errors = On max_execution_time = 30 max_input_time = 30 memory_limit = 256M upload_max_filesize = 10M post_max_size = 10M
Configurer Open Basedir pour Drupal
Restreignez PHP à votre répertoire Drupal :
open_basedir = /var/www/html:/tmp:/var/tmp
Étape 7 : Sécuriser la configuration de votre base de données Drupal
Créer un utilisateur de base de données restreint pour Drupal
N'utilisez pas l'utilisateur root pour Drupal. Créez un utilisateur spécifique avec des permissions minimales :
CREATE USER 'drupal_user'@'localhost' IDENTIFIED BY 'mot_de_passe_fort_ici'; CREATE DATABASE drupal_db; GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, LOCK TABLES ON drupal_db.* TO 'drupal_user'@'localhost'; FLUSH PRIVILEGES;
Lier la base de données à localhost
Dans votre configuration MySQL (/etc/mysql/mysql.conf.d/mysqld.cnf) :
bind-address = 127.0.0.1
Changer le préfixe de table par défaut
Dans votre settings.php Drupal :
$databases['default']['default']['prefix'] = 'dp_';
Cela rend les attaques par injection SQL plus difficiles en obscurcissant les noms de tables standards.
Étape 8 : Configurer la sécurité réseau pour le serveur Drupal
Configurer un pare-feu pour l'hébergement Drupal
Configurez UFW (Uncomplicated Firewall) sur Ubuntu :
sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow 22/tcp # SSH sudo ufw allow 80/tcp # HTTP sudo ufw allow 443/tcp # HTTPS sudo ufw enable
Renforcer l'accès SSH pour le serveur Drupal
Modifiez /etc/ssh/sshd_config :
Port 2222 # Changer du défaut 22 PermitRootLogin no PasswordAuthentication no PubkeyAuthentication yes MaxAuthTries 3 ClientAliveInterval 300 ClientAliveCountMax 2
Installez et configurez Fail2ban pour bloquer les tentatives de force brute :
sudo apt install fail2ban sudo systemctl enable fail2ban sudo systemctl start fail2ban
Étape 9 : Implémenter la surveillance et la journalisation pour la sécurité Drupal
Configurer la journalisation centralisée
Configurez rsyslog pour collecter tous les événements de sécurité :
# Dans /etc/rsyslog.d/50-drupal.conf local0.* /var/log/drupal.log
Installer les outils de surveillance de sécurité
Configurez la surveillance d'intégrité des fichiers avec AIDE :
sudo apt install aide sudo aide --init sudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db
Créez une tâche cron quotidienne pour vérifier les changements :
# Ajouter au crontab 0 2 * * * /usr/bin/aide --check
Surveiller les tentatives de connexion échouées dans Drupal
Utilisez le module Login Security :
composer require drupal/login_security drush en login_security
Configurez-le pour bloquer les adresses IP après 5 tentatives échouées.
Étape 10 : Automatiser les sauvegardes et la récupération pour les sites Drupal
Configurer les sauvegardes Drupal automatisées
Créez un script de sauvegarde qui s'exécute quotidiennement :
#!/bin/bash # backup-drupal.sh DATE=$(date %Y%m%d_%H%M%S) BACKUP_DIR="/var/backups/drupal" DRUPAL_ROOT="/var/www/html" DB_NAME="drupal_db" DB_USER="drupal_user" DB_PASS="votre_mot_de_passe" mkdir -p $BACKUP_DIR # Sauvegarder la base de données mysqldump -u$DB_USER -p$DB_PASS $DB_NAME | gzip > $BACKUP_DIR/db_$DATE.sql.gz # Sauvegarder les fichiers tar -czf $BACKUP_DIR/files_$DATE.tar.gz -C $DRUPAL_ROOT sites/default/files # Garder seulement les 7 derniers jours de sauvegardes find $BACKUP_DIR -name "*.gz" -mtime 7 -delete
Tester vos sauvegardes Drupal
Créez un environnement de staging et testez régulièrement la restauration des sauvegardes. Une sauvegarde que vous ne pouvez pas restaurer ne vaut rien.
Erreurs courantes de sécurité Drupal à éviter
Exécuter les services en tant que root : Utilisez toujours des utilisateurs dédiés avec des permissions minimales.
Ignorer les fichiers journaux : Configurez la surveillance des journaux et révisez-les régulièrement.
Utiliser les ports par défaut : Changez SSH et autres ports de service des valeurs par défaut.
Ignorer les mises à jour de sécurité : Appliquez les correctifs de sécurité dans les 24-48 heures suivant leur publication.
Permissions de fichiers faibles : Auditez et corrigez régulièrement les permissions de fichiers.
Vos prochaines étapes pour le renforcement du serveur Drupal
- Auditez votre configuration actuelle en utilisant le module Security Review
- Implémentez ces changements graduellement pour éviter de briser votre site
- Testez chaque changement dans un environnement de staging d'abord
- Documentez votre configuration de sécurité pour référence future
- Configurez les alertes de surveillance pour les événements de sécurité
- Planifiez des révisions de sécurité régulières mensuellement
La sécurité du serveur n'est pas une configuration ponctuelle—c'est un processus continu. Commencez par les éléments les plus critiques (HTTPS, mises à jour et sauvegardes) et travaillez le reste systématiquement. Votre site Drupal sera beaucoup plus sécurisé avec une fondation de serveur correctement renforcée.
Rappelez-vous : la meilleure stratégie de sécurité combine plusieurs couches de protection. Aucune mesure unique ne vous protégera de toutes les menaces, mais implémenter ces étapes ensemble crée un système de défense robuste qui rend votre site Drupal une cible beaucoup plus difficile pour les attaquants.