← Retour au portail

Fiche 9 - Apache2 – Installation, configuration et sécurisation

Installer et configurer le serveur web Apache2 sur Debian 13, comprendre sa structure, ses commandes essentielles et les bonnes pratiques de sécurisation.

Intermédiaire — SISR 1ère année ⏱️ 25 min 📁 Administration système

🎯 Objectifs de la fiche

  1. Installation d'Apache2 — apt install, démarrage et vérification du service
  2. Structure des fichiers de configuration — /etc/apache2, sites-available, mods-available
  3. Commandes essentielles — a2ensite, a2dissite, a2enmod, apachectl
  4. Page par défaut et test — Vérifier que le serveur répond
  5. Sécurisation de base — Masquer la version, désactiver les modules inutiles, HTTPS

Prérequis

Un serveur Debian 13 avec accès root ou sudo. Connexion réseau fonctionnelle. Connaître les commandes de base Linux (nano, systemctl, apt).

1. Installation d'Apache2

sudo apt update && sudo apt install apache2 -y
sudo systemctl enable --now apache2
sudo systemctl status apache2
💡 Apache2 démarre automatiquement après l'installation. Pour vérifier qu'il répond, ouvrez un navigateur et tapez l'IP du serveur — vous devriez voir la page par défaut Debian Apache2.
# Tester localement depuis le serveur
curl -I http://localhost

# Vérifier le port d'écoute
ss -tlnp | grep apache2

2. Structure des fichiers de configuration

Toute la configuration d'Apache2 se trouve dans /etc/apache2. Voici l'organisation des dossiers :

CheminContenuRôle
/etc/apache2/apache2.confFichier de configuration principalParamètres globaux du serveur
/etc/apache2/ports.confPorts d'écouteDéfinit sur quels ports Apache écoute (80, 443)
/etc/apache2/sites-available/Fichiers de VirtualHost disponiblesUn fichier .conf par site
/etc/apache2/sites-enabled/Liens symboliques vers les sites actifsCe qui est réellement chargé par Apache
/etc/apache2/mods-available/Modules disponiblesModules installés mais pas forcément actifs
/etc/apache2/mods-enabled/Liens symboliques vers les modules actifsModules chargés au démarrage
/etc/apache2/conf-available/Configurations supplémentaires disponiblesEx: charset, security, localized-error-pages
/etc/apache2/conf-enabled/Configurations supplémentaires activesLiens symboliques actifs
/var/www/html/Répertoire web par défautRacine du site web par défaut
/var/log/apache2/Journaux Apacheaccess.log et error.log

3. Commandes essentielles Apache2

CommandeRôleExemple
a2ensiteActive un VirtualHost (crée un lien symbolique)sudo a2ensite monsite.conf
a2dissiteDésactive un VirtualHostsudo a2dissite monsite.conf
a2enmodActive un module Apachesudo a2enmod rewrite
a2dismodDésactive un module Apachesudo a2dismod status
a2enconfActive un fichier de configuration supplémentairesudo a2enconf security
a2disconfDésactive un fichier de configuration supplémentairesudo a2disconf serve-cgi-bin
apachectl configtestVérifie la syntaxe de la configurationsudo apachectl configtest
apachectl -tAlias de configtestsudo apachectl -t
# Après tout changement de configuration, tester puis recharger
sudo apachectl configtest   # doit afficher "Syntax OK"
sudo systemctl reload apache2

# Redémarrer complètement (si un module a été ajouté)
sudo systemctl restart apache2
⚠️ Toujours exécuter apachectl configtest avant de recharger Apache. Une erreur de syntaxe dans un fichier de configuration peut rendre le serveur inaccessible.

4. Modules utiles

ModuleCommande d'activationUtilité
rewritesudo a2enmod rewriteRéécriture d'URL (nécessaire pour WordPress, Laravel, etc.)
sslsudo a2enmod sslSupport HTTPS/TLS
headerssudo a2enmod headersManipulation des en-têtes HTTP (sécurité)
deflatesudo a2enmod deflateCompression gzip des réponses (performances)
proxysudo a2enmod proxyReverse proxy (rediriger vers un autre serveur)
proxy_httpsudo a2enmod proxy_httpProxy HTTP (souvent utilisé avec proxy)
statussudo a2enmod statusPage de statut Apache (à désactiver en production)

5. Journaux Apache2

# Suivre les accès en temps réel
sudo tail -f /var/log/apache2/access.log

# Suivre les erreurs en temps réel
sudo tail -f /var/log/apache2/error.log

# Filtrer les erreurs 404
sudo grep "404" /var/log/apache2/access.log

# Filtrer les erreurs 500
sudo grep " 500 " /var/log/apache2/access.log

6. Sécurisation de base

6.1 Masquer la version d'Apache et l'OS

Par défaut, Apache affiche sa version et l'OS dans les en-têtes HTTP et les pages d'erreur. Il faut masquer ces informations.

sudo nano /etc/apache2/conf-available/security.conf

Vérifier ou modifier ces directives :

ServerTokens Prod          # N'affiche que "Apache" sans version ni OS
ServerSignature Off        # Supprime la signature des pages d'erreur
TraceEnable Off            # Désactive la méthode HTTP TRACE (faille XST)
sudo a2enconf security
sudo systemctl reload apache2

# Vérifier que la version est masquée
curl -I http://localhost | grep Server

6.2 Désactiver le listage des répertoires

Par défaut, si un répertoire ne contient pas de fichier index.html, Apache liste son contenu. C'est une faille de sécurité à désactiver.

# Dans le VirtualHost ou apache2.conf
<Directory /var/www/html>
    Options -Indexes
    AllowOverride All
    Require all granted
</Directory>

6.3 Ajouter des en-têtes de sécurité HTTP

sudo a2enmod headers
sudo systemctl reload apache2
# À ajouter dans le VirtualHost ou dans security.conf
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-XSS-Protection "1; mode=block"
Header always set Referrer-Policy "no-referrer-when-downgrade"

6.4 Protéger un répertoire par mot de passe (.htpasswd)

# Créer le fichier de mots de passe
sudo apt install apache2-utils -y
sudo htpasswd -c /etc/apache2/.htpasswd admin
# (entrer le mot de passe pour l'utilisateur admin)

# Ajouter un autre utilisateur
sudo htpasswd /etc/apache2/.htpasswd alice
# Dans le VirtualHost, pour protéger un répertoire
<Directory /var/www/html/admin>
    AuthType Basic
    AuthName "Zone restreinte"
    AuthUserFile /etc/apache2/.htpasswd
    Require valid-user
</Directory>
⛔ L'authentification HTTP Basic envoie les identifiants en base64 (facilement décodable). Ne l'utilisez qu'avec HTTPS pour que les données soient chiffrées.
Quelle commande active un VirtualHost Apache2 ?
  • a2enmod
  • a2ensite
  • a2enconf
  • apachectl start

✅ Réponse : a2ensite

Où se trouvent les fichiers de VirtualHost disponibles ?
  • /etc/apache2/sites-enabled/
  • /etc/apache2/mods-available/
  • /etc/apache2/sites-available/
  • /var/www/html/

✅ Réponse : /etc/apache2/sites-available/

Quelle commande vérifie la syntaxe de la configuration Apache avant rechargement ?
  • apache2 --check
  • apachectl configtest
  • apachectl -v
  • systemctl test apache2

✅ Réponse : apachectl configtest

Quelle directive masque la version d'Apache dans les en-têtes HTTP ?
  • ServerSignature Off
  • HideVersion On
  • ServerTokens Prod
  • TraceEnable Off

✅ Réponse : ServerTokens Prod

Quelle option désactive le listage automatique du contenu d'un répertoire ?
  • Options -Indexes
  • Options -AutoIndex
  • DirectoryListing Off
  • AllowOverride None

✅ Réponse : Options -Indexes

Pour que le module headers soit actif, quelle commande utilise-t-on ?
  • a2ensite headers
  • a2enconf headers
  • a2enmod headers
  • apachectl +headers

✅ Réponse : a2enmod headers