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 :
sudo apt update && sudo apt upgrade -yPuis installez Apache :
sudo apt install apache2 -yVérifiez que le service est bien démarré :
sudo systemctl status apache2Activez Apache au démarrage :
sudo systemctl enable apache2Sé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 :
sudo nano /etc/apache2/conf-available/security.confAssurez-vous que les lignes suivantes sont bien présentes et décommentées :
ServerTokens Prod
ServerSignature Off
TraceEnable Off
FileETag NoneAppliquez les modifications :
sudo systemctl restart apache2Restreindre l’accès aux répertoires
Dans le fichier /etc/apache2/apache2.conf, localisez la section <Directory /> et modifiez-la comme suit :
<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 :
sudo a2enmod headers rewrite ssl security2Ajoutez des en-têtes de sécurité dans /etc/apache2/conf-available/security.conf :
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 :
sudo systemctl restart apache2Configuration HTTPS avec Let’s Encrypt
Installez Certbot et le module Apache correspondant :
sudo apt install certbot python3-certbot-apache -yGénérez un certificat SSL :
sudo certbot --apacheSuivez les instructions et assurez-vous que la redirection HTTP vers HTTPS est activée.
Vérifiez l’automatisation du renouvellement :
sudo certbot renew --dry-runAjoutez un cron job pour renouveler automatiquement les certificats :
echo "0 3 * * * certbot renew --quiet" | sudo tee /etc/cron.d/certbot-renewProtection contre les attaques courantes
Protection contre les attaques DoS (mod_evasive)
Installez le module :
sudo apt install libapache2-mod-evasive -yÉditez son fichier de configuration :
sudo nano /etc/apache2/mods-available/evasive.confAjoutez les lignes suivantes :
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 :
sudo mkdir -p /var/log/mod_evasive
sudo chown -R www-data:www-data /var/log/mod_evasiveRedémarrez Apache :
sudo systemctl restart apache2Protection contre les injections SQL et XSS (mod_security)
Installez ModSecurity :
sudo apt install libapache2-mod-security2 -yActivez la règle Core Rule Set (CRS) :
sudo mv /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.confActivez ModSecurity :
sudo a2enmod security2
sudo systemctl restart apache2Journalisation 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 :
sudo tail -f /var/log/apache2/access.logInstaller Fail2Ban pour bloquer les IP malveillantes
Installez Fail2Ban :
sudo apt install fail2ban -yAjoutez un filtre Apache :
sudo nano /etc/fail2ban/jail.localAjoutez la configuration suivante :
[apache-auth]
enabled = true
port = http,https
logpath = /var/log/apache2/error.log
maxretry = 10Activez Fail2Ban :
sudo systemctl restart fail2banPour voir les IP bannies :
sudo fail2ban-client status apache-auth