Skip to content

Mise en place sécurisée d’un serveur Apache sur Debian

Installation d’Apache

Avant d’installer Apache, assurez-vous que votre système est à jour :

bash
sudo apt update && sudo apt upgrade -y

Puis installez Apache :

bash
sudo apt install apache2 -y

Vérifiez que le service est bien démarré :

bash
sudo systemctl status apache2

Activez Apache au démarrage :

bash
sudo systemctl enable apache2

Sécurisation de la configuration d’Apache

Désactiver les informations sensibles

Par défaut, Apache affiche sa version et d’autres informations qui pourraient être utilisées pour une attaque. Modifiez le fichier de configuration principal :

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

Assurez-vous que les lignes suivantes sont bien présentes et décommentées :

apache
ServerTokens Prod
ServerSignature Off
TraceEnable Off
FileETag None

Appliquez les modifications :

bash
sudo systemctl restart apache2

Restreindre l’accès aux répertoires

Dans le fichier /etc/apache2/apache2.conf, localisez la section <Directory /> et modifiez-la comme suit :

apache
<Directory />
    Options None
    AllowOverride None
    Require all denied
</Directory>

Cela empêche l’accès aux répertoires système et réduit la surface d’attaque.

Activer les modules de sécurité

Activez les modules suivants pour renforcer la sécurité d’Apache :

bash
sudo a2enmod headers rewrite ssl security2

Ajoutez des en-têtes de sécurité dans /etc/apache2/conf-available/security.conf :

apache
Header always set X-Frame-Options "DENY"
Header always set X-XSS-Protection "1; mode=block"
Header always set X-Content-Type-Options "nosniff"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Content-Security-Policy "default-src 'self'; script-src 'self'; object-src 'none';"

Appliquez les changements :

bash
sudo systemctl restart apache2

Configuration HTTPS avec Let’s Encrypt

Installez Certbot et le module Apache correspondant :

bash
sudo apt install certbot python3-certbot-apache -y

Générez un certificat SSL :

bash
sudo certbot --apache

Suivez les instructions et assurez-vous que la redirection HTTP vers HTTPS est activée.
Vérifiez l’automatisation du renouvellement :

bash
sudo certbot renew --dry-run

Ajoutez un cron job pour renouveler automatiquement les certificats :

bash
echo "0 3 * * * certbot renew --quiet" | sudo tee /etc/cron.d/certbot-renew

Protection contre les attaques courantes

Protection contre les attaques DoS (mod_evasive)

Installez le module :

bash
sudo apt install libapache2-mod-evasive -y

Éditez son fichier de configuration :

bash
sudo nano /etc/apache2/mods-available/evasive.conf

Ajoutez les lignes suivantes :

apache
DOSHashTableSize    2048
DOSPageCount        10
DOSSiteCount        50
DOSBlockingPeriod   600
DOSLogDir           "/var/log/mod_evasive"

Créez le répertoire des logs et donnez-lui les bonnes permissions :

bash
sudo mkdir -p /var/log/mod_evasive
sudo chown -R www-data:www-data /var/log/mod_evasive

Redémarrez Apache :

bash
sudo systemctl restart apache2

Protection contre les injections SQL et XSS (mod_security)

Installez ModSecurity :

bash
sudo apt install libapache2-mod-security2 -y

Activez la règle Core Rule Set (CRS) :

bash
sudo mv /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf

Activez ModSecurity :

bash
sudo a2enmod security2
sudo systemctl restart apache2

Journalisation et surveillance

Configurer la journalisation des accès et erreurs

Les logs d’Apache se trouvent par défaut dans :

  • /var/log/apache2/access.log (journal des accès)
  • /var/log/apache2/error.log (journal des erreurs)

Pour surveiller les tentatives suspectes, utilisez :

bash
sudo tail -f /var/log/apache2/access.log

Installer Fail2Ban pour bloquer les IP malveillantes

Installez Fail2Ban :

bash
sudo apt install fail2ban -y

Ajoutez un filtre Apache :

bash
sudo nano /etc/fail2ban/jail.local

Ajoutez la configuration suivante :

ini
[apache-auth]
enabled = true
port = http,https
logpath = /var/log/apache2/error.log
maxretry = 10

Activez Fail2Ban :

bash
sudo systemctl restart fail2ban

Pour voir les IP bannies :

bash
sudo fail2ban-client status apache-auth