18 astuces de sécurité et de durcissement du serveur Web Apache

Le serveur Web Apache est l’un des serveurs Web les plus populaires et largement utilisés pour héberger des fichiers et des sites Web. Il est facile à installer et à configurer pour répondre à vos besoins de hébergement. Cependant, les réglages par défaut ne sont pas sûrs et ne offrent pas la protection nécessaire que votre site a besoin.

Dans ce guide, nous examinons certaines des astuces et recommandations pour hardéner le serveur Apache que vous pouvez mettre en œuvre pour renforcer la sécurité de votre serveur Web.

1. Comment cacher la version d’Apache et les informations sur le système d’exploitation

Par défaut, le serveur Web Apache affiche sa version si vous naviguez à travers une URL incorrecte d’un site Web. Vous trouverez ci-dessous un exemple d’une page d’erreur indiquant que la page est introuvable sur le site. La dernière ligne indique la version d’Apache, le système d’exploitation hôte, l’adresse IP et le port sur lequel il écoute.

Show Apache Version Info

Il n’est jamais une bonne idée de afficher les informations sur votre serveur Web car cela peut constituer un cadeau pour les hackers pendant leur mission de reconnaissance. Pour ajouter une couche de sécurité et rendre plus difficile l’accès pour les hackers, il est recommandé de cacher les informations sur le serveur Web.

Pour ce faire, ouvrez le fichier de configuration Apache par défaut sur les distributions basées sur Debian.

$ sudo vim /etc/apache2/apache2.conf

Pour les systèmes basés sur RHEL tels que RHEL, Fedora, CentOS, Rocky et AlmaLinux.

$ sudo vim /etc/httpd/conf/httpd.conf

Ajoutez les lignes suivantes à la fin du fichier.

ServerTokens Prod
ServerSignature Off

Enregistrez les modifications et redémarrez le serveur web Apache.

$ sudo systemctl restart apache2   [On Debian, Ubuntu and Mint]
$ sudo systemctl restart httpd     [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]

Chargez maintenant le site et, cette fois, les informations du serveur web ne seront pas affichées.

Check Apache Version Info

2. Désactiver l’affichage des répertoires dans Apache

Par défaut, Apache permet l’affichage des répertoires, et les visiteurs pourraient voir tous les fichiers ou répertoires que vous pourriez avoir dans votre répertoire Document Root.

Pour illustrer cela, nous allons créer un répertoire appelé test.

$ sudo mkdir -p /var/www/html/test

Ensuite, nous allons naviguer dans le répertoire et créer quelques fichiers.

$ cd /var/www/html/test
$ sudo touch app.py main.py

Maintenant, si nous accédons à l’URL, http://localhost/test nous pourrons voir l’affichage des répertoires.

Disable Apache Directory Listing

Pour désactiver l’affichage des répertoires, allez dans le fichier de configuration principale d’Apache et recherchez l’attribut ‘Directory‘. Définissez le paramètre ‘Options‘ sur '-Indexes' comme indiqué.

<Directory /opt/apache/htdocs>
Options -Indexes
</Directory>

Rechargez Apache, et cette fois, lorsque vous visitez l’URL, les répertoires ne seront plus affichés.

Disable Directory Listing in Apache

3. Mettre régulièrement à jour Apache

Il est toujours recommandé de maintenir toutes vos applications à jour, car les dernières applications sont livrées avec des correctifs de bogues et des correctifs de sécurité qui traitent les vulnérabilités sous-jacentes présentes dans les anciennes versions des logiciels.

En tant que tel, il est recommandé de mettre régulièrement à niveau vos applications vers leurs dernières versions.

$ sudo apt update && sudo apt upgrade [On Debian, Ubuntu and Mint]
$ sudo dnf upgrade                    [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
Update System Packages

4. Utiliser le chiffrement HTTPS sur Apache

Apache utilise par défaut le protocole HTTP, qui est un protocole faible et non sécurisé sujet à l’écoute. Pour améliorer la sécurité de votre site et, plus encore, améliorer le classement SEO de Google, envisagez de chiffrer votre site à l’aide d’un certificat SSL.

Ce faisant, cela bascule le protocole HTTP par défaut en HTTPS, le rendant ainsi plus difficile pour quiconque d’intercepter et de déchiffrer la communication envoyée de et vers le serveur.

Découvrez comment sécuriser le serveur web Apache en utilisant le certificat SSL Let’s Encrypt sur Linux.

5. Activer la sécurité de transport strict HTTP (HSTS) pour Apache

En plus de chiffrer votre site web avec un certificat TLS/SSL, envisagez de mettre en œuvre le mécanisme de sécurité web HSTS sur HTTPS.

HTTP Strict Transport Security (HSTS) est un mécanisme de politique qui protège les sites web contre les attaques de type homme du milieu et le détournement de cookies. Cela se produit lorsque les attaquants rétrogradent le protocole HTTPS vers le protocole HTTP non sécurisé.

HSTS permet au serveur web de déclarer strictement que les navigateurs web ne doivent interagir avec lui que via HTTPS, et jamais via le protocole HTTP.

Pour activer HSTS, assurez-vous que votre site web utilise le protocole HTTPS et dispose d’un certificat TLS/SSL valide.

Ensuite, activez le module des en-têtes pour Apache:

$ sudo a2enmod headers

Ensuite, rechargez Apache pour appliquer les modifications.

$ sudo systemctl restart apache2

Ensuite, accédez au fichier de configuration du virtual host de votre domaine.

$ sudo vim /etc/apache2/sites-available/mydomain.conf

Ensuite, ajoutez cette ligne à l’intérieur du bloc <VirtualHost *:443>:

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

Cela ressemble à ceci.

<VirtualHost *:443>
        # .....
        # ....
        Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</VirtualHost>

Le paramètre max-age indique aux navigateurs web d’accéder à votre site uniquement via HTTPS pour la prochaine année (31536000 = 1 an).

Enfin, redémarrez Apache pour que la politique HSTS prenne effet.

$ sudo systemctl restart apache2

6. Activer HTTP/2 sur Apache

En 2015, HTTP/2 a été publié, qui est une nouvelle version du protocole HTTP visant à résoudre plusieurs problèmes auxquels les créateurs de HTTP/1.1 n’avaient pas prévu.

Alors que HTTP/1.1 est encore largement utilisé, il est associé à des problèmes de performance liés à l’utilisation de multiples connexions TCP pour traiter plusieurs demandes du navigateur, ce qui entraîne une surcharge importante des ressources côté client, conduisant à une dégradation des performances réseau.

Avec l’évolution de la complexité et des fonctionnalités des applications, HTTP/2 a été créé pour résoudre les lacunes de HTTP/1.1, notamment les en-têtes HTTP longs, les vitesses de chargement des pages web lentes et la dégradation générale des performances.

HTTP/2 offre une meilleure protection et confidentialité que son prédécesseur. Tout aussi important, il améliore les performances grâce à l’utilisation de flux de données multiplexés. Avec HTTP/2, une seule connexion TCP assure une utilisation efficace de la bande passante, même lors de la transmission de plusieurs flux de données.

Découvrez comment activer HTTP/2 sur le serveur web Apache en utilisant :

7. Restreindre l’Accès aux Répertoires Sensibles dans Apache

Une autre mesure de sécurité que vous pourriez prendre est de limiter l’accès aux répertoires pouvant contenir des informations sensibles telles que les données utilisateur, les journaux et les fichiers de configuration.

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/html

    # Other virtual host settings

    <Directory /var/www/html/sensitive_directory>
        Require all denied
    </Directory>
</VirtualHost>

Dans la configuration ci-dessus, la directive Require all denied refuse l’accès à toute personne essayant d’accéder aux fichiers dans /répertoire_sensible.

Enregistrez les modifications et quittez le fichier. Puis redémarrez Apache pour que les modifications prennent effet.

8. Désactivez la directive ServerSignature dans Apache

La directive ServerSignature dans le fichier de configuration d’Apache ajoute un pied de page aux documents générés par le serveur contenant des informations sur la configuration de votre serveur web telles que la version et le système d’exploitation sur lequel il fonctionne. Exposer des détails cruciaux sur votre serveur web à des acteurs malveillants augmentera considérablement les chances d’une attaque.

Pour éviter l’exposition de telles informations, vous devez désactiver cette directive dans le fichier de configuration d’Apache :

ServerSignature Off

Enregistrez les modifications et redémarrez une fois de plus Apache pour que les changements prennent effet.

$ sudo systemctl restart apache2

9. Définir la directive ‘ServerTokens’ sur ‘Prod’

La directive ‘ServerTokens‘ contrôle les informations envoyées par le serveur, y compris la version d’Apache (version majeure et mineure), le système d’exploitation et le type de serveur web utilisé.

La quantité minimale d’informations que vous voudriez exposer publiquement est que le serveur web est Apache. Tout le reste ne ferait qu’exposer votre serveur à des attaques potentielles. Par conséquent, il est recommandé de définir la directive ‘ServerTokens‘ dans le fichier de configuration d’Apache sur ‘prod‘.

ServerTokens Off

Comme toujours, enregistrez les modifications et assurez-vous de redémarrer Apache.

10. Sécuriser Apache avec Fail2ban

Fail2ban est une application de prévention des intrusions open-source qui protège les systèmes Linux contre les menaces externes, y compris les attaques par déni de service (DoS) et par force brute. Il fonctionne en surveillant constamment les journaux système à la recherche d’activités malveillantes et en interdisant les hôtes correspondant à des modèles imitant un comportement d’attaque.

Fail2ban peut être configuré pour protéger Apache contre les attaques par déni de service en surveillant constamment les journaux Apache pour les tentatives de connexion échouées et en bannissant temporairement les adresses IP offensantes.

Jetez un œil à comment installer Fail2ban sur Linux en utilisant :

11. Désactiver les Modules Inutiles

Les modules Apache sont simplement des programmes chargés pour étendre les fonctionnalités du serveur web. Les fonctions étendues par les modules incluent l’authentification de base, le caching de contenu, le chiffrement, la sécurité, etc.

Il est toujours recommandé de désactiver tous les modules qui ne sont pas actuellement utilisés pour minimiser les risques de devenir victime d’une attaque.

Pour voir tous les modules activés, exécutez la commande

$ apache2ctl -M
View Apache Modules

Pour vérifier si un module spécifique est activé, par exemple, le module rewrite, exécutez la commande.

$ apache2ctl -M | grep rewrite
Check Apache Module

Pour désactiver le module, exécutez la commande :

$ sudo a2dismod rewrite 
Disable Apache Module

12. Utiliser les Modules mod_security et mod_evasive pour Sécuriser Apache

Vous pouvez activer les modules mod_security et mod_evasive pour sécuriser Apache contre les attaques de force brute ou les attaques par déni de service (DDoS).

  • Le module mod_security agit comme un pare-feu d’application web (WAF) et bloque le trafic suspect et indésirable vers votre site.
  • Le module mod_evasive protège votre serveur contre les attaques de force brute et les attaques par déni de service (DoS).

Lisez-en plus sur la façon de protéger Apache en utilisant les modules mod_security et mod_evasive.

13. Services Indésirables Restreints dans Apache

Pour sécuriser davantage Apache, envisagez de désactiver certains services tels que les liens symboliques et l’exécution CGI s’ils ne sont pas actuellement nécessaires. Par défaut, Apache suit les liens symboliques, nous pouvons désactiver cette fonctionnalité ainsi que la fonctionnalité -Includes et CGI en une seule ligne.

Pour ce faire, ajoutez la ligne '-ExecCGI -FollowSymLinks -Includes' pour la directive ‘Options’ dans la section ‘Directory‘.

<Directory /your/website/directory>
Options -ExecCGI -FollowSymLinks -Includes
</Directory>

Cela peut également être réalisé au niveau d’un répertoire. Par exemple, ici, nous désactivons les Inclusions et l’exécution des fichiers Cgi pour le répertoire “/var/www/html/mydomain1”.

<Directory "/var/www/html/mydomain1">
	Options -Includes -ExecCGI
</Directory>

Enregistrez les modifications et redémarrez Apache.

14. Limiter la Taille de Téléchargement de Fichier dans Apache

Une autre façon de sécuriser votre serveur web est de limiter la taille totale du corps de la requête HTTP envoyée au serveur web par un client. Vous pouvez le définir dans le contexte du serveur, par répertoire, par fichier ou par emplacement.

Par exemple, si vous souhaitez autoriser le téléchargement de fichiers vers un répertoire spécifique, disons le répertoire /var/www/domain.com/wp-uploads, et limiter la taille du fichier téléchargé à 4M = 4194304 octets, ajoutez la directive suivante à votre fichier de configuration Apache ou au fichier .htaccess.

<Directory "/var/www/domain.com/wp-uploads">
	LimitRequestBody  4194304
</Directory>

Sauvegardez les modifications et n’oubliez pas de redémarrer Apache.

Vous pouvez le configurer dans le contexte du serveur, par répertoire, par fichier ou par emplacement. La directive prévient les comportements de requêtes client anormaux qui peuvent parfois prendre la forme d’une attaque par déni de service (DoS).

15. Activer la journalisation dans Apache

La journalisation fournit tous les détails sur les requêtes client et toute autre information concernant les performances de votre serveur web. Cela fournit des informations utiles en cas de problème. Activer les journaux Apache, notamment dans les fichiers d’hôte virtuel, vous permet de localiser un problème en cas de dysfonctionnement du serveur web.

Pour activer la journalisation, vous devez inclure le module mod_log_config, qui fournit deux principales directives de journalisation.

  • ErrorLog – Spécifie le chemin du fichier journal des erreurs.
  • CustomLog – Crée et formate un fichier journal.

Vous pouvez utiliser ces attributs dans un fichier d’hôte virtuel dans la section d’hôte virtuel pour activer la journalisation.

<VirtualHost 172.16.25.125:443>
        ServerName example.com
        DocumentRoot /var/www/html/example/
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

La directive {APACHE_LOG_DIR} dans les systèmes Debian est définie comme /var/log/apache2.

16. Exécuter Apache en tant qu’utilisateur et groupe séparés

Exécuter Apache en tant qu’utilisateur et groupe distincts est une pratique de sécurité courante. En le faisant, vous pouvez isoler le processus du serveur web des autres processus système et minimiser les dommages potentiels en cas de compromission du serveur web.

Tout d’abord, vous voudrez créer un nouvel utilisateur et un groupe spécifiquement pour Apache.

$ sudo groupadd apachegroup
$ sudo useradd -g apachegroup apacheuser

Ensuite, vous devrez modifier le fichier de configuration d’Apache pour spécifier le nouvel utilisateur et le nouveau groupe.

User apacheuser
Group apachegroup

Étant donné que vous modifiez l’utilisateur et le groupe sous lesquels Apache s’exécute, vous devrez peut-être mettre à jour la propriété des répertoires et des fichiers Web pour vous assurer qu’Apache peut toujours les lire.

$ sudo chown -R apacheuser:apachegroup /var/www/html

Après avoir apporté ces modifications, redémarrez Apache pour les appliquer :

$ sudo systemctl restart httpd      # For RHEL/CentOS
$ sudo systemctl restart apache2    # For Debian/Ubuntu

17. Protéger contre les attaques DDOS et renforcer la sécurité

Il est vrai que vous ne pouvez pas protéger entièrement votre site Web contre les attaques DDoS. Cependant, voici quelques directives qui peuvent vous aider à atténuer et à gérer ces attaques.

  • TimeOut – Cette directive vous permet de spécifier la durée pendant laquelle le serveur attendra que certains événements se terminent avant de renvoyer une erreur. La valeur par défaut est de 300 secondes. Pour les sites susceptibles d’être attaqués par des DDoS, il est conseillé de maintenir cette valeur basse. Cependant, le paramètre approprié dépend largement de la nature des demandes que votre site Web reçoit. Remarque : Un délai court peut entraîner des problèmes avec certains scripts CGI.
  • MaxClients – Cette directive définit la limite du nombre de connexions pouvant être traitées simultanément. Toutes les nouvelles connexions dépassant cette limite seront mises en file d’attente. Elle est disponible dans les MPM Prefork et Worker. La valeur par défaut est 256.
  • KeepAliveTimeout – Cette directive spécifie la durée pendant laquelle le serveur attendra une demande ultérieure avant de fermer la connexion. La valeur par défaut est de 5 secondes.
  • LimitRequestFields – Cette directive définit une limite sur le nombre de champs d’en-tête de requête HTTP acceptés par les clients. La valeur par défaut est 100. Si des attaques DDoS se produisent en raison d’un nombre excessif d’en-têtes de requête HTTP, il est recommandé de réduire cette valeur.
  • LimitRequestFieldSize – Cette directive définit une limite de taille pour l’en-tête de requête HTTP.

18. Effectuer des analyses régulières de vulnérabilité

Un autre moyen de sécuriser votre serveur web est de réaliser régulièrement des tests de balayage de vulnérabilité. Cela permet d’identifier les failles de sécurité potentielles qui pourraient être exploitées par des pirates pour accéder à des fichiers sensibles ou injecter des logiciels malveillants.

Les outils d’analyse de vulnérabilités permettent également de signaler les paramètres de configuration non sécurisés et d’aider à l’audit de la conformité. Les outils populaires d’analyse de vulnérabilités incluent Acutenix, Nessus, Nexpose, Sucuri, et bien d’autres encore.

Conclusion

Voici quelques conseils de renforcement d’Apache que vous pouvez mettre en œuvre sur votre serveur web pour fournir une couche de protection supplémentaire et empêcher les intrusions.

Source:
https://www.tecmint.com/apache-security-tips/