Installation et sécurisation du site web Drupal

installer configurer et sécuriser CMS drupal

Introduction

Drupal est un système de gestion de contenu (CMS) open-source populaire utilisé pour construire des sites Web et des applications Web. Avec son architecture modulaire et ses milliers de modules complémentaires, Drupal est hautement flexible et personnalisable. Cependant, comme toute application Web complexe, Drupal nécessite une configuration et un durcissement appropriés pour assurer la sécurité.

Ce guide vous guidera à travers l’installation de Drupal 10 from scratch dans un environnement Linux. Il couvrira également les mesures de sécurité essentielles pour verrouiller l’accès et se protéger contre les vulnérabilités Web courantes. À la fin, vous disposerez d’un site Drupal prêt pour le développement avec une base de sécurité solide.

Conditions préalables

Avant d’installer Drupal, assurez-vous que votre serveur Linux répond aux exigences suivantes :

  • Ubuntu 20.04 ou supérieur
  • Serveur Web Apache 2
  • MySQL 5.7 ou supérieur OU MariaDB 10 ou supérieur
  • PHP 7.3 ou supérieur avec les extensions requises
  • Composer – Gestionnaire de dépendances pour PHP
  • Répertoires accessibles en écriture pour Drupal et ses fichiers

Assurez-vous également que vous disposez d’un domaine ou sous-domaine disponible qui pointe vers l’adresse IP de votre serveur.

Connectez-vous en tant qu’utilisateur non root avec des privilèges sudo pour effectuer l’installation.

Étape 1 – Installer la pile LAMP

Drupal nécessite la pile Linux, Apache, MySQL/MariaDB, PHP (LAMP) pour fonctionner. Utilisez les commandes suivantes pour installer ces composants :

$ sudo apt update
$ sudo apt install apache2 mariadb-server php php-mysql php-json php-gd php-mbstring php-xml php-curl

Installez d’autres extensions PHP requises :

$ sudo apt install php-zip php-soap php-gd  

Activez les modules Apache nécessaires à Drupal :

$ sudo a2enmod rewrite headers env dir mime

Sécurisez l’installation de MySQL :

$ sudo mysql_secure_installation

Démarrez les services MySQL et Apache :

$ sudo systemctl start mysql
$ sudo systemctl start apache2

Vérifiez qu’Apache fonctionne correctement en accédant au domaine ou à l’adresse IP de votre serveur dans votre navigateur. Vous devriez voir la page Apache par défaut.

Étape 2 – Télécharger Drupal

Tout d’abord, accédez à la page de téléchargement de Drupal et obtenez la dernière version de Drupal 10 :

$ cd /tmp
$ wget https://www.drupal.org/download-latest/tar.gz 

Extrayez le fichier tar.gz dans le répertoire racine Web d’Apache :

$ sudo tar -xvf drupal-10*.tar.gz -C /var/www/html

Le répertoire extrait sera nommé quelque chose comme drupal-10.1.6. Renommez-le simplement drupal :

$ sudo mv /var/www/html/drupal-10.1.6 /var/www/html/drupal

Définissez la propriété sur l’utilisateur du serveur Web :

$ sudo chown -R www-data:www-data /var/www/html/drupal 

Ajustez les autorisations de fichier :

$ sudo chmod -R 775 /var/www/html/drupal

Les fichiers Drupal 10 sont désormais en place et prêts pour l’installation.

Étape 3 – Créer une base de données MySQL

Connectez-vous à l’invite MySQL :

$ mysql -u root -p

Créez une base de données et un utilisateur pour Drupal :

CREATE DATABASE drupal10db;
CREATEUSER'drupal10user'@'localhost' IDENTIFIED BY'DBpa55word';
GRANTALLON drupal10db.*TO'drupal10user'@'localhost';  
exit

Remplacez ‘DBpa55word’ par un mot de passe sûr.

Cela crée un utilisateur de base de données dédié avec tous les privilèges pour la base de données Drupal.

Étape 4 – Configurer le virtual host Apache

Créez la configuration du virtual host Drupal :

$ sudo nano /etc/apache2/sites-available/drupal10.conf

Ajoutez ce qui suit, en mettant à jour les chemins/domaines si nécessaire :

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot "/var/www/drupal10/web"
    ServerName drupal10.example.com
    <Directory /var/www/drupal10/web>
        Options FollowSymlinks
        AllowOverride All
        Require all granted
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/drupal10-error.log
    CustomLog ${APACHE_LOG_DIR}/drupal10-access.log combined
</VirtualHost>

Activez le nouveau virtual host et redémarrez Apache :

$ sudo a2ensite drupal10.conf
$ sudo systemctl restart apache2

Étape 5 – Installer Drupal

Accédez à votre domaine dans un navigateur Web et commencez l’installation de Drupal 10.

Sélectionnez la langue puis choisissez le profil d’installation Standard.

Sur la page Vérifier les exigences, assurez-vous que tous les éléments sont cochés. Résoudre les problèmes énumérés.

Pour la configuration de base de données, utilisez la base de données MySQL, l’utilisateur et le mot de passe créés précédemment.

** IMPORTANT : Désactiver l’envoi des statistiques d’utilisation pour contribuer aux améliorations de Drupal. Cela permet de protéger la confidentialité.

Créez un nom de site, un utilisateur administrateur par défaut et un mot de passe fort.

Attendez la fin de l’installation, puis connectez-vous avec l’utilisateur administrateur.

Le site Drupal de base est désormais installé et prêt pour le développement !

Étape 6 – Configurer les paramètres de sécurité

Après l’installation, il est important de passer en revue les paramètres liés à la sécurité et d’appliquer les meilleures pratiques pour verrouiller Drupal.

Dans la barre latérale Administration, accédez à Configuration > Système > Paramètres de base du site, puis sous Contenu de la page d’accueil, définissez la page d’accueil pour qu’elle soit une page vierge.

Toujours sous Système, accédez à Cron et activez la gestion Cron. Ceci est nécessaire pour les tâches planifiées.

Dans la section Création de contenu, accédez à Formats de texte et configurez :

  • Restreindre les balises HTML
  • Désactiver le format d’entrée JavaScript

Cela permet de prévenir les problèmes de XSS lorsque les utilisateurs publient du contenu.

Ensuite, sous Média, désactivez la source Fichiers locaux. Configurez plutôt le stockage cloud pour les téléchargements comme S3 ou équivalent.

Sous Configuration > Média > Système de fichiers, définissez la méthode de téléchargement par défaut sur Fichiers accessibles en privé.

Pour plus de sécurité, dans Configuration > Paramètres des médias, définissez le chemin du système de fichiers public sur private://

Cela empêche d’accéder aux chemins de fichiers téléchargés directement via l’URL du site.

Dans Configuration > Système > Système de fichiers, assurez-vous que le chemin du système de fichiers public sites/default/files est défini sur private://

Cela empêche d’accéder aux ressources de fichiers du site directement via l’URL du site.

Sous Configuration > Système > Journalisation et erreurs, activez la journalisation verbose de la base de données, les tentatives de connexion infructueuses et les erreurs de page introuvable.

Toujours sous Journalisation et erreurs, cliquez sur URLs propres Assurez-vous que la case “Activer les URLs propres” est cochée. Cela améliore le référencement.

Faites défiler vers le bas jusqu’à la section Optimisation de la bande passante et activez les éléments suivants :

  • Agrégation des fichiers CSS
  • Agrégation des fichiers JavaScript
  • Optimiser les fichiers CSS
  • Optimiser les fichiers JavaScript

Cela réduit les requêtes et améliore les performances.

Dans Configuration > SEO, commencez par définir un titre de page d’accueil par défaut du site,

Sous Optimisation pour les moteurs de recherche, cochez la case “Générer des métadonnées” Activez les URLs propres et le favicon globe.

Pour les médias sociaux, configurez les options Facebook et Twitter.

Dans Configuration > Système > PHP, définissez le répertoire de téléchargement en dehors de la racine Web sur sites/default/files/private

Cela empêche d’accéder aux fichiers téléchargés directement via le chemin d’URL.

Définissez Taille maximale des publications et Taille maximale des fichiers téléchargés en fonction des besoins du site.

Important : Pour appliquer les modifications ci-dessus, vous pouvez :

  1. Utiliser la ligne de commande Drush
    drush cr
  2. OU accédez directement à l’URL /update.php par exemple example.com/update.php

Cela effacera les caches et reconstruira les routes pour que les modifications prennent effet.

Étape 7 – Vérifier les autorisations

Comme Drupal nécessite un accès en écriture à certains répertoires, les autorisations doivent être correctement configurées en fonction des principes de privilège minimum.

Vérifiez que les autorisations en écriture sont définies uniquement sur les répertoires requis :

$ sudo chown -R www-data:www-data /var/www/drupal10/web/sites/default
$ sudo find /var/www/drupal10/web/sites/default -type d -exec chmod 775 {} \;
$ sudo find /var/www/drupal10/web/sites/default -type f -exec chmod 664 {} \;

Définissez les autorisations recommandées du système de fichiers :

$ sudo find /var/www/drupal10/web -type d -exec chmod 755 {} \;  
$ sudo find /var/www/drupal10/web -type f -exec chmod 644 {} \;

Sécuriser le fichier settings.php :

$ sudo chmod 444 /var/www/drupal10/web/sites/default/settings.php 

Une revue constante des autorisations de fichiers est importante pour éviter les paramètres par défaut non sécurisés.

Étape 8 – Sécuriser la base de données

Comme la base de données stocke des données sensibles, prenez des précautions pour éviter la perte ou le vol de données :

  • Évitez d’utiliser l’utilisateur root de la base de données. Accordez plutôt des privilèges limités à l’utilisateur Drupal.
  • Définissez un mot de passe fort pour les utilisateurs MySQL avec une longueur > 12 chars et des caractères spéciaux.
  • N’exposez pas la base de données au réseau public. Mettez-la plutôt dans un sous-réseau privé au lieu de DMZ ou de sous-réseau public.
  • Activez le proxy inverse MySQL pour ajouter une couche de sécurité supplémentaire pour le trafic de base de données.
  • Effectuez des sauvegardes fréquentes et testez les restaurations.

Suivez les meilleures pratiques en matière de sauvegarde :

  • Planifiez des dumps de bases de données quotidiens
  • Sauvegardez les fichiers et le code du site Web
  • Stockez les sauvegardes séparément de la racine Web
  • Chiffrez les fichiers de sauvegarde
  • Testez la restauration sur l’environnement de staging.

Cela protège contre la perte de données en cas d’erreurs utilisateur, de crashs système ou d’attaques de rançongiciel.

Étape 9 – Sécuriser le serveur Web

Comme le serveur Apache sera exposé à Internet, il nécessite des protections solides :

Désactiver les modules inutilisés pour réduire la surface d’attaque :

$ sudo a2dismod status actions alias autoindex 

Configurez le pare-feu d’application Web (WAF) mod_security pour filtrer le trafic :

$ sudo apt install modsecurity libapache2-mod-security2
$ sudo nano /etc/modsecurity/modsecurity.conf  

Activez le moteur de règles mod_security :

SecRuleEngine On

Proxyez le trafic via un pare-feu d’application Web (WAF) pour une inspection approfondie des paquets :

$ sudo apt install mod_security crudini
$ crudini --set /etc/modsecurity/modsecurity.conf \ 
  owasp.crs components.response.body_access false
$ sudo systemctl restart apache2

Utilisez HTTPS avec un certificat SSL valide pour activer le chiffrement. Redirigez tout le trafic vers la version HTTPS.

Durcissez le site avec des en-têtes de sécurité supplémentaires :

$ sudo nano /etc/apache2/sites-available/drupal10.conf
Header set X-Frame-Options "SAMEORIGIN" 
Header set X-XSS-Protection "1; mode=block"
Header set X-Content-Type-Options "nosniff"  
Header set Referrer-Policy "same-origin"
Header always append X-Frame-Options SAMEORIGIN

Enregistrez le fichier et redémarrez Apache.

Cela permet de se protéger contre les attaques XSS, clickjacking et MIME courantes.

Pour les performances, activez la mise en cache des ressources statiques par le navigateur :

<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|webp|js|css|swf)(\.gz)?$">  
Header set Cache-Control "max-age=604800, public"
</FilesMatch>

604800 secondes = 1 semaine. Cela évite de re-télécharger des ressources inchangées.

Surveillez les journaux de trafic du site pour détecter les anomalies indiquant des attaques. Mettre en œuvre l’analyse et l’alerte des journaux.

Restez à jour sur les avis de sécurité Drupal et appliquez les derniers correctifs.

Étape 10 – Automatiser le cron de Drupal

Cron gère les tâches planifiées comme la mise en cache, les mises à jour, l’optimisation des données.

Option 1 – Exécuter cron manuellement

Activez l’accès crontab pour l’utilisateur du serveur Web :

$ sudo crontab -u www-data -e 

Ajoutez une entrée cron :

* * * * * /usr/bin/php /var/www/drupal10/web/core/scripts/cron.sh >> /var/www/drupal10/cron.log

Option 2 – Cron automatisé

Utilisez le module Drupal Queue Cron pour déclencher cron sans accès d’administrateur système

$ composer require drupal/queue_cron
$ drush en -y queue_cron

Ajustez les paramètres cron dans l’interface utilisateur Drupal à admin/config/system/cron.

Option 3 – Utiliser le daemon cron système

$ sudo systemctl edit cron

Collez :

[Service]
User=www-data

Enregistrez et quittez.

$ sudo systemctl restart cron  

Cela exécute les tâches cron en tant qu’utilisateur du serveur web.

Ajustez les paramètres cron dans l’interface utilisateur Drupal à admin/config/system/cron.

Étape 11 – Maintenance continue

Configurez des tâches régulières pour assurer la sécurité à long terme :

  • Consultez les journaux – Analysez les journaux Apache/Drupal pour détecter les signes d’attaques
  • Appliquez les mises à jour – Corrigez rapidement les problèmes de sécurité de Drupal core, modules contribués, PHP, système d’exploitation
  • Consultez les autorisations – Corrigez les paramètres par défaut non sécurisés
  • Sauvegardez les données – Automatisez les sauvegardes quotidiennes de base de données et de fichiers vers un emplacement alternatif
  • Testez la restauration – Vérifiez l’intégrité des sauvegardes ; testez les restaurations sur le site de staging
  • Renouvelez le certificat SSL – Utilisez le renouvellement automatique pour éviter l’expiration/les avertissements
  • Surveillez le site – Utilisez la détection d’intrusion et les pare-feu pour être alerté des attaques

Conclusion

Avec ces étapes, vous disposez désormais d’une installation Drupal 10 sécurisée, optimisée pour les performances, avec des protections contre les vulnérabilités courantes.

Veillez à suivre les meilleures pratiques de sécurité à l’avenir pour que votre site Drupal reste durci au fil du temps. Activez la journalisation/la surveillance et appliquez une stratégie de “défense en profondeur” avec plusieurs couches de sécurité.

Restez vigilant face aux menaces émergentes en suivant les avis de sécurité Drupal. Automatisez les correctifs pour ne manquer aucune mise à jour critique.

Avec un durcissement et une maintenance proactifs, vous pouvez développer en toute confiance les fonctionnalités de votre site Drupal tout en gardant l’arrière-plan verrouillé contre les intrus.

Laisser un commentaire