### 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
```