Aller au contenu

Mise en place serveur Apache

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 -y

Puis installez Apache :

sudo apt install apache2 -y

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

sudo systemctl status apache2

Activez Apache au démarrage :

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 :

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

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

1
2
3
4
ServerTokens Prod
ServerSignature Off
TraceEnable Off
FileETag None

Appliquez les modifications :

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 :

1
2
3
4
5
<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 security2

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

1
2
3
4
5
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 apache2

Configuration HTTPS avec Let’s Encrypt

Installez Certbot et le module Apache correspondant :

sudo apt install certbot python3-certbot-apache -y

Générez un certificat SSL :

sudo certbot --apache

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

sudo certbot renew --dry-run

Ajoutez un cron job pour renouveler automatiquement les certificats :

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 :

sudo apt install libapache2-mod-evasive -y

Éditez son fichier de configuration :

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

Ajoutez les lignes suivantes :

1
2
3
4
5
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_evasive

Redémarrez Apache :

sudo systemctl restart apache2

Protection contre les injections SQL et XSS (mod_security)

Installez ModSecurity :

sudo apt install libapache2-mod-security2 -y

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

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

Activez ModSecurity :

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 :

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

Installer Fail2Ban pour bloquer les IP malveillantes

Installez Fail2Ban :

sudo apt install fail2ban -y

Ajoutez un filtre Apache :

sudo nano /etc/fail2ban/jail.local

Ajoutez la configuration suivante :

1
2
3
4
5
[apache-auth]
enabled = true
port = http,https
logpath = /var/log/apache2/error.log
maxretry = 10

Activez Fail2Ban :

sudo systemctl restart fail2ban

Pour voir les IP bannies :

sudo fail2ban-client status apache-auth