02 Installation d’un serveur web Apache

Dans cette article, l’installation d’un serveur Web Apache se fera sous Ubuntu 22.04 LTS (Long Time Support) disponible à cette adresse https://ubuntu.com/download/server. Nous ne détaillerons pas l’installation de Ubuntu.

Il existe deux principales méthodes pour installer le serveur web Apache sur Ubuntu :

  1. Installation via les paquets officiels de la distribution : Cette méthode est la plus simple et la plus couramment utilisée. Elle permet d’installer Apache en utilisant le gestionnaire de paquets APT, garantissant ainsi une installation rapide et une intégration aisée avec le système. Cependant, elle peut limiter l’utilisateur à la version d’Apache disponible dans les dépôts officiels d’Ubuntu.
  2. Compilation à partir des sources : Cette approche offre une flexibilité accrue, permettant d’installer la version la plus récente d’Apache ou de personnaliser les options de compilation selon des besoins spécifiques. Néanmoins, elle est plus complexe et nécessite une gestion manuelle des dépendances et des mises à jour.

Installation d’Apache via APT

Pour découvrir et installer Apache en utilisant le gestionnaire de paquets APT sur Ubuntu, Nous suivrons les étapes ci-dessous :

  1. Mise à jour de l’index des paquets : Avant toute installation, il est recommandé de mettre à jour l’index local des paquets pour s’assurer que le système dispose des dernières informations sur les versions disponibles. Exécutons la commande suivante :
belkacem@apache:~$sudo apt update

Installation du paquet Apache : Après la mise à jour, installons Apache en exécutant :

belkacem@apache:~$sudo apt install apache2 apache2-utils -y

Cette commande télécharge et installe Apache et les utilitaires d’Apache ainsi que toutes les dépendances requises.

En listant les processus en cours sur la machine, nous voyons qu’il est en exécution.

belkacem@apache:~$sudo ps aux | grep apache2
processus Apache en cours d'éxecution

Le serveur Web ecoute sur le port 80 par défaut. Le client enverra une requête depuis un port dynamique, le serveur recevra cette requête sur le port 80, il doit par conséquent écouter ce port pour qu’il puisse y répondre.

Fonctionnement port d'une requête http

Les fichiers de configuration d’un serveur Web Apache

Lors de l’installation, une liste de répertoire a été créé dans /etc/apache2/. Nous pouvons voir cette liste de répertoires en exécutant la commande suivante :

belkacem@apache:~$sudo ls -l /etc/apache2/ | egrep "^d"
repertoires d'un serveur Web Apache

Ses répertoires contiendront les configurations des futurs site internet.

  • sites-available :  contient les fichiers de configuration des sites disponibles
  • sites-enabled : contient des liens symboliques vers les configurations, dans site-available, des sites activés
  • conf-available : contient les fichiers de configuration des autres services disponibles
  • conf-enabled : contient des liens symboliques vers les configurations, dans conf-available, des autres services activés
  • mods-available : contient les fichiers de configuration des modules d’Apache disponibles
  • mods-enabled : contient des liens symboliques vers les configurations, dans mods-available, des modules activés

Tous ces fichiers vont venir alimenter le fichier apache2.conf.

Fichier de configuration apache2.conf

Le fichier de configuration principal d’Apache2, nommé « apache2.conf », centralise les paramètres du serveur. En l’éditant, nous observons qu’il inclut, via des directives « IncludeOptional », les configurations des répertoires précédemment mentionnés, permettant une organisation modulaire et hiérarchisée des réglages.

belkacem@apache:~$sudo cat /etc/apache2/apache2.conf | grep IncludeOptional

La directive « IncludeOptional » dans la configuration d’Apache permet d’inclure des fichiers supplémentaires de manière conditionnelle. Contrairement à la directive « Include », qui génère une erreur si le fichier spécifié n’existe pas, « IncludeOptional » ignore silencieusement les fichiers manquants. Par exemple, l’instruction « IncludeOptional conf-enabled/*.conf » inclura tous les fichiers avec l’extension .conf présents dans le répertoire conf-enabled, sans provoquer d’erreur si aucun fichier ne correspond au motif.

Les directives

La configuration d’Apache repose sur des directives spécifiques qui définissent le comportement du serveur pour différents répertoires et fichiers. Pour configurer le serveur Apache afin qu’il applique des directives spécifiques à un répertoire, on utilise la section <Directory>.

Directive /var/www/ dans un serveur WEN Apache

Options Indexes FollowSymLinks :

  • Indexes : Active l’affichage de la liste des fichiers si aucun fichier index (comme index.html) n’est présent dans le répertoire.
  • FollowSymLinks : Autorise le serveur à suivre les liens symboliques présents dans le répertoire.

AllowOverride None : Empêche l’utilisation de fichiers .htaccess pour surcharger les directives définies dans le fichier de configuration principal pour ce répertoire.

Require all granted : Accorde l’accès à tous les utilisateurs aux fichiers et sous-répertoires du répertoire spécifié.

Les modules

Apache HTTP Server est conçu de manière modulaire pour s’adapter à une variété d’utilisations. Il intègre des modules statiques, compilés directement dans le noyau du serveur, et des modules dynamiques, chargés au besoin. Pour répertorier tous les modules activés, exécutez la commande suivante :

belkacem@apache:~$sudo apache2ctm -M

Cette commande affiche la liste des modules actuellement chargés par Apache, en précisant pour chacun s’il est statique ou dynamique.

Liste module Serveur Web Apache

La liste des modules est disponible dans le répertoire «/etc/apache2/mods-available ».

Pour voir la liste des modules partagés c’est-à-dire marqué par (shared), il faudra lister le contenu du répertoire « /etc/apache2/mods-enabled/ ».

Liste modules serveur Apache partagés

Si nous y regardions de plus près, nous constaterions que le nombre de module partagé et le nombre de fichier portant l’extension load, sera le même.

belkacem@apache:~$ echo -e "- nombre de fichier dans mods_enable : $(ls -1 /etc/apache2/mods-enabled/ | grep "load"| wc -l )\n- nombre de module chargé dans Apache : $(apache2ctl -M | grep "shared" | wc -l)"
lister le nombre de module activé

Installer un module

Nous installons un module dynamique lorsque nous ajoutons un module à Apache. Un module statique, quant à lui, est directement intégré aux binaires d’Apache. Pour installer un module statique, nous devons recompiler Apache. Nous décrivons ici les étapes nécessaires pour ajouter une fonctionnalité qui réduit les risques de déni de service et d’attaques par force brute. Le module utilisé pour cet objectif est « mod_evasive ». Nous débutons par l’installation de ce module.

belkacem@apache:~$sudo apt install libapache2-mod-evasive -y

Une fois le module installé, il est chargé par défaut. Pour s’en assurer, il nous suffira de lister les modules et de recherche le mot clé « evasive ».

belkacem@apache:~$sudo apache2ctl -M | grep evasive
belkacem@apache:~$sudo apache2ctl -M | grep evasive
verification mod_evasive Serveur Web Apache

Configurons ce module, en créant un fichier portant l’extension « .conf ». Précédemment, nous avons vu que les fichiers de configuration des modules sont é créer dans le répertoire « /etc/apache2/mods-available/ »

belkacem@apache:~$sudo vim /etc/apache2/mods-available/evasive.conf
<IfModule mod_evasive24.c>
   # Configuration globale
   DOSHashTableSize 2048
   DOSPageCount 10
   DOSSiteCount 50
   DOSPageInterval 1
   DOSSiteInterval 1
   DOSBlockingPeriod 10
   # Configuration pour les requêtes HTTP
   DOSSystemCommand "sudo /usr/local/bin/block_ip %s"
   DOSLogDir "/var/log/mod_evasive"
   DOSWhitelist 127.0.0.1
   # Configuration pour les tentatives d'authentification
   DOSEmailNotify admin@domain.tld
   DOSLogOnly On
   DOSWhiteList /etc/apache2/mods-available/mod-evasive/whitelist
</IfModule>

Nous créerons un fichier qui contiendras les adresses IP qui ne sont pas concerné par les restrictions du module « evasive ».

belkacem@apache:~$ sudo mkdir /etc/apache2/mods-available/mod-evasive
belkacem@apache:~$ sudo vim /etc/apache2/mods-available/mod-evasive/whitelist
# Liste blanche pour mod_evasive
# Adresses IP à ignorer
127.0.0.1
10.0.0.1
# Noms d'hôte à ignorer
Localhost
client.apache.dev

Activons maintenant le module

belkacem@apache:~$ sudo a2enmod evasive

Pour que cette configuration soit prise en considération par Apache, nous devons installer recharger le configuration Apache ou redémarrer le service apache2

belkacem@apache:~$ sudo apache2ctl restart
Une image contenant texte, graphiques vectoriels Description générée automatiquement

Bon à savoir

Le module evasive à lui seul, ne peut pas offrir une garantie d’efficacité de 100% contre toutes les attaques par déni de service, il convient de l’adjoindre à d’autres mesure de sécurité (Service de protection anti-DDOS, utilisation d’un équilibreur de charge, limiter la bande passante, surveillances des journaux, etc)