Sommaire
Installer et configurer le serveur web Apache2 sur Debian 13, comprendre sa structure, ses commandes essentielles et les bonnes pratiques de sécurisation.
🎯 Objectifs de la fiche
- Installation d'Apache2 — apt install, démarrage et vérification du service
- Structure des fichiers de configuration — /etc/apache2, sites-available, mods-available
- Commandes essentielles — a2ensite, a2dissite, a2enmod, apachectl
- Page par défaut et test — Vérifier que le serveur répond
- 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
# 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 :
| Chemin | Contenu | Rôle |
|---|---|---|
| /etc/apache2/apache2.conf | Fichier de configuration principal | Paramètres globaux du serveur |
| /etc/apache2/ports.conf | Ports d'écoute | Définit sur quels ports Apache écoute (80, 443) |
| /etc/apache2/sites-available/ | Fichiers de VirtualHost disponibles | Un fichier .conf par site |
| /etc/apache2/sites-enabled/ | Liens symboliques vers les sites actifs | Ce qui est réellement chargé par Apache |
| /etc/apache2/mods-available/ | Modules disponibles | Modules installés mais pas forcément actifs |
| /etc/apache2/mods-enabled/ | Liens symboliques vers les modules actifs | Modules chargés au démarrage |
| /etc/apache2/conf-available/ | Configurations supplémentaires disponibles | Ex: charset, security, localized-error-pages |
| /etc/apache2/conf-enabled/ | Configurations supplémentaires actives | Liens symboliques actifs |
| /var/www/html/ | Répertoire web par défaut | Racine du site web par défaut |
| /var/log/apache2/ | Journaux Apache | access.log et error.log |
3. Commandes essentielles Apache2
| Commande | Rôle | Exemple |
|---|---|---|
| a2ensite | Active un VirtualHost (crée un lien symbolique) | sudo a2ensite monsite.conf |
| a2dissite | Désactive un VirtualHost | sudo a2dissite monsite.conf |
| a2enmod | Active un module Apache | sudo a2enmod rewrite |
| a2dismod | Désactive un module Apache | sudo a2dismod status |
| a2enconf | Active un fichier de configuration supplémentaire | sudo a2enconf security |
| a2disconf | Désactive un fichier de configuration supplémentaire | sudo a2disconf serve-cgi-bin |
| apachectl configtest | Vérifie la syntaxe de la configuration | sudo apachectl configtest |
| apachectl -t | Alias de configtest | sudo 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
4. Modules utiles
| Module | Commande d'activation | Utilité |
|---|---|---|
| rewrite | sudo a2enmod rewrite | Réécriture d'URL (nécessaire pour WordPress, Laravel, etc.) |
| ssl | sudo a2enmod ssl | Support HTTPS/TLS |
| headers | sudo a2enmod headers | Manipulation des en-têtes HTTP (sécurité) |
| deflate | sudo a2enmod deflate | Compression gzip des réponses (performances) |
| proxy | sudo a2enmod proxy | Reverse proxy (rediriger vers un autre serveur) |
| proxy_http | sudo a2enmod proxy_http | Proxy HTTP (souvent utilisé avec proxy) |
| status | sudo a2enmod status | Page 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>
- ☐ Apache2 installé et actif (systemctl status apache2)
- ☐ Page par défaut accessible dans le navigateur
- ☐ apachectl configtest retourne Syntax OK
- ☐ ServerTokens Prod et ServerSignature Off configurés
- ☐ Listage des répertoires désactivé (Options -Indexes)
- ☐ En-têtes de sécurité HTTP ajoutés (module headers)
- ☐ Journaux accessibles et compréhensibles
Quelle commande active un VirtualHost Apache2 ?
✅ Réponse : a2ensite
Où se trouvent les fichiers de VirtualHost disponibles ?
✅ Réponse : /etc/apache2/sites-available/
Quelle commande vérifie la syntaxe de la configuration Apache avant rechargement ?
✅ Réponse : apachectl configtest
Quelle directive masque la version d'Apache dans les en-têtes HTTP ?
✅ Réponse : ServerTokens Prod
Quelle option désactive le listage automatique du contenu d'un répertoire ?
✅ Réponse : Options -Indexes
Pour que le module headers soit actif, quelle commande utilise-t-on ?
✅ Réponse : a2enmod headers