Recherche de site Web

18 Conseils de sécurité et de renforcement du serveur Web Apache


Le serveur Web Apache est l'un des serveurs Web les plus populaires et les plus utilisés pour l'hébergement de fichiers et de sites Web. Il est facile à installer et à configurer pour répondre à vos besoins d’hébergement. Cependant, les paramètres par défaut ne sont pas sécurisés pour offrir la protection indispensable dont votre site a besoin.

Dans ce guide, nous examinons certains des trucs et astuces de renforcement du serveur Apache que vous pouvez mettre en œuvre pour renforcer la sécurité de votre serveur Web.

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

Par défaut, le serveur Web Apache affiche sa version au cas où vous parcourriez la mauvaise URL d'un site Web. Vous trouverez ci-dessous un exemple de 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.

Ce n’est jamais une bonne idée d’afficher les informations de votre serveur Web car cela peut être un bon cadeau pour les pirates dans leur mission de reconnaissance. Pour ajouter une couche de sécurité et rendre la tâche plus difficile aux pirates informatiques, il est recommandé de masquer les informations du 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]

Rechargez maintenant le site et, cette fois-ci, les informations du serveur Web ne seront pas affichées.

2. Désactivez la liste des répertoires dans Apache

Par défaut, Apache autorise la liste des répertoires, et les visiteurs peuvent voir tous les fichiers ou répertoires que vous pourriez avoir dans votre répertoire Racine du document.

Pour démontrer 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 la liste du répertoire.

Pour désactiver la liste des répertoires, accédez au fichier de configuration principal d'Apache et recherchez l'attribut « Répertoire ». Définissez le paramètre « Options » sur '-Indexes' comme indiqué.

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

Rechargez Apache, et cette fois-ci, lorsque vous visiterez l'URL, les répertoires ne seront plus affichés.

3. Mettre régulièrement à jour Apache

Il est toujours recommandé de maintenir toutes vos applications à jour, car les dernières applications sont accompagnées de corrections de bugs et de correctifs de sécurité qui corrigent les vulnérabilités sous-jacentes présentes dans les anciennes versions logicielles.

Il est donc recommandé de mettre régulièrement à jour 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]

4. Utilisez le cryptage HTTPS sur Apache

Apache, par défaut, utilise le protocole HTTP, un protocole faible et non sécurisé, sujet aux écoutes clandestines. Pour améliorer la sécurité de votre site et, plus encore, améliorer votre classement Google SEO, pensez à crypter votre site à l'aide d'un certificat SSL.

Ce faisant, il fait passer le protocole HTTP par défaut à HTTPS, rendant ainsi plus difficile pour quiconque d'intercepter et de déchiffrer les communications envoyées dans les deux sens depuis le serveur.

Découvrez comment sécuriser le serveur Web Apache à l'aide de Let's Encrypt SSL sous Linux.

  • Comment sécuriser Apache avec le certificat SSL Let's Encrypt sur RHEL
  • Comment sécuriser Apache avec le certificat SSL gratuit Let's Encrypt sur Ubuntu et Debian

5. Activez HTTP Strict Transport Security (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 en plus de HTTPS.

HTTP Strict Transport Security (HSTS) est un mécanisme de politique qui protège les sites Web contre les attaques de l'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 exécute HTTPS et dispose d'un certificat TLS/SSL valide.

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

sudo a2enmod headers

Rechargez ensuite Apache pour appliquer les modifications.

sudo systemctl restart apache2

Ensuite, accédez au fichier de configuration de l'hôte virtuel de votre domaine.

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

Ensuite, ajoutez cette ligne dans le bloc  :

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 en utilisant HTTPS pendant l'année suivante (31536000=1 an).

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

sudo systemctl restart apache2

6. Activez HTTP/2 sur Apache

En 2015, HTTP/2 a été publié. Il s'agit d'une nouvelle version du protocole HTTP qui cherche à résoudre de multiples problèmes que les créateurs de HTTP/1.1 n'avaient pas prévus.

Bien que HTTP/1.1 soit encore largement utilisé, il est associé à des problèmes de performances liés à l'utilisation de plusieurs connexions TCP pour traiter plusieurs requêtes du navigateur, ce qui entraîne une surcharge de ressources élevée du côté client. conduisant à une dégradation des performances du réseau.

À mesure que les applications gagnaient en complexité et en fonctionnalités, HTTP/2 a été créé pour résoudre les lacunes de HTTP/1.1, notamment les longs en-têtes HTTP, les vitesses de chargement lentes des pages Web et les performances générales. dégradation.

HTTP/2 offre plus de protection et de confidentialité que son prédécesseur. L’amélioration des performances grâce à l’utilisation de flux de données multiplexés est tout aussi importante. Avec HTTP/2, une seule connexion TCP garantit 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 :

  • Comment activer HTTP/2 dans Apache sur Ubuntu

7. Restreindre l'accès aux répertoires sensibles dans Apache

Une autre mesure de sécurité que vous pouvez prendre consiste à limiter l'accès aux répertoires susceptibles de contenir des informations sensibles telles que des données utilisateur, des journaux et des 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, Require all refusé refuse l'accès à toute personne essayant d'accéder aux fichiers dans /sensitive_directory.

Enregistrez les modifications et quittez le fichier. Redémarrez ensuite Apache pour que les modifications prennent effet.

8. Désactivez la directive ServerSignature dans Apache

La directive ServerSignature du fichier de configuration Apache ajoute un pied de page aux documents générés par le serveur qui contiennent des informations sur la configuration de votre serveur Web, telles que la version et le système d'exploitation sur lequel il s'exécute. Exposer des détails cruciaux sur votre serveur Web à des acteurs malveillants augmentera considérablement les risques d’attaque.

Pour empêcher l'exposition de ces informations, vous devez désactiver cette directive dans le fichier de configuration Apache :

ServerSignature Off

Enregistrez les modifications et redémarrez Apache pour que les modifications prennent effet.

sudo systemctl restart apache2

9. Définissez 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 en cours d'exécution.

La moindre quantité d’informations que vous voudriez exposer au public est que le serveur Web est Apache. Toute autre chose 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 Apache sur « prod ».

ServerTokens Off

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

10. Sécurisez Apache avec Fail2ban

Fail2ban est une application open source de prévention des intrusions qui protège les systèmes Linux contre les menaces externes, notamment les attaques DoS et par force brute. Il fonctionne en surveillant constamment les journaux du système pour détecter les activités néfastes et en interdisant les hôtes qui correspondent à des modèles qui imitent un comportement d'attaque.

Fail2ban peut être configuré pour protéger Apache contre les attaques DoS en surveillant constamment les journaux Apache pour détecter les tentatives de connexion infructueuses et en interdisant temporairement les adresses IP incriminées.

Découvrez comment installer Fail2ban sur Linux en utilisant :

  • Comment utiliser Fail2ban pour sécuriser votre serveur Linux

11. Désactivez 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, la mise en cache du contenu, le cryptage, la sécurité, etc.

Il est toujours recommandé de désactiver tous les modules qui ne sont actuellement pas utilisés afin de minimiser les risques d'être victime d'une attaque.

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

apache2ctl -M

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

apache2ctl -M | grep rewrite

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

sudo a2dismod rewrite 

12. Utilisez 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 par force brute ou les attaques 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 la force brute et les attaques par déni de service (DoS).

En savoir plus sur la façon de protéger Apache à l'aide des 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 requis. Par défaut, Apache suit les liens symboliques, on peut désactiver cette fonctionnalité ainsi que la fonctionnalité -Includes et CGI sur une seule ligne.

Pour ce faire, ajoutez la ligne '-ExecCGI -FollowSymLinks -Includes' pour la directive 'Options' dans la section 'Répertoire'.

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

Cela peut également être réalisé au niveau du répertoire. Par exemple, ici, nous désactivons les exécutions de fichiers Include et 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 fichiers dans Apache

Une autre façon de sécuriser votre serveur Web consiste à limiter la taille totale du corps de la requête HTTP envoyée au serveur Web depuis 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, dites le répertoire /var/www/domain.com/wp-uploads et limitez la taille du fichier téléchargé à 4 Mo.=4194304Bytes, ajoutez la directive suivante à votre fichier de configuration Apache ou à votre fichier .htaccess.

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

Enregistrez les modifications et n'oubliez pas de redémarrer Apache.

Vous pouvez le définir dans le contexte du serveur, par répertoire, par fichier ou par emplacement. La directive évite tout comportement anormal de demande client qui peut parfois être une forme d'attaque par déni de service (DoS).

15. Activer la journalisation dans Apache

La journalisation fournit tous les détails sur les demandes des clients et toute autre information relative aux performances de votre serveur Web. Cela fournit des informations utiles en cas de problème. L'activation des journaux Apache, en particulier dans les fichiers d'hôte virtuel, vous permet d'identifier un problème en cas de problème avec le serveur Web.

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

  • 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 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 le chemin /var/log/apache2.

16. Exécutez Apache en tant qu'utilisateur et groupe distincts

Exécuter Apache en tant qu'utilisateur et groupe distincts est une pratique de sécurité courante. Ce faisant, vous pouvez isoler le processus du serveur Web des autres processus système et minimiser les dommages potentiels si le serveur Web est compromis.

Tout d’abord, vous souhaiterez 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 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 exécutés par Apache, vous devrez peut-être mettre à jour la propriété des répertoires et des fichiers Web pour garantir qu'Apache peut toujours les lire.

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

Après avoir effectué 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 les attaques DDOS et le renforcement

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

  • TimeOut – Cette directive vous permet de spécifier la durée pendant laquelle le serveur attendra la fin de certains événements avant de renvoyer une erreur. La valeur par défaut est de 300 secondes. Pour les sites sensibles aux attaques DDoS, il est conseillé de maintenir cette valeur faible. Cependant, le paramètre approprié dépend en grande partie de la nature des demandes reçues par votre site Web. Remarque : Un délai d'expiration faible peut entraîner des problèmes avec certains scripts CGI.
  • MaxClients – Cette directive définit la limite du nombre de connexions pouvant être servies simultanément. Toute nouvelle connexion au-delà de cette limite sera mise en file d'attente. Il 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 requête 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 la requête HTTP.

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

Une autre façon de protéger votre serveur Web consiste à effectuer régulièrement des tests d’analyse des vulnérabilités. Cela permet d'identifier les failles de sécurité potentielles qui pourraient être exploitées par des pirates informatiques pour accéder à des fichiers sensibles ou injecter des logiciels malveillants.

Les outils d'analyse des vulnérabilités aident également à signaler les paramètres de configuration non sécurisés et facilitent l'audit de conformité. Les outils d'analyse des vulnérabilités populaires incluent Acutenix, Nessus, Nexpose, Sucuri et bien d'autres.

Conclusion

Voici quelques-uns des 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.