Formation sécurisation du serveur Apache, tutoriel & guide de travaux pratiques en pdf.
Le serveur Apache
Cacher le type et la version du serveur :
Il est très facile de découvrir le type et la version d’un serveur Web en utilisant la commande suivante:
# telnet @_IP_serveur_Apache 80
Exemple :
# telnet localhost 80
Trying 127.0.0.1…
Connected to localhost.localdomain (127.0.0.1).
Escape character is ‘^]’.
<!DOCTYPE HTML PUBLIC « -//IETF//DTD HTML 2.0//EN »>
<html><head>
<title>501 Method Not Implemented</title>
</head><body>
<h1>Method Not Implemented</h1>
<p> to /index.html.en not supported.<br />
</p>
<hr>
<address>Apache/2.0.61 (Unix) PHP/4.4.8 Server at localhost.localdomain Port 80</address>
</body></html>
Connection closed by foreign host.
Un pirate apprend que le serveur Apache tourne sous un système de type « Linux/Unix » et que le langages PHP est actif.
On limite la divulgation d’information en insérant dans le fichier de configuration httpd.conf la ligne ServerTokens Prod :
# vim/usr/local/apache2/conf/httpd.conf
ServerTokens Prod
Ainsi, la bannière Server : Apache/2.0.61 (Unix) PHP/4.4.8 se limite à Server: Apache.
Cela ne suffit toujours pas à masquer la version d’ Apache : si vous demandez une page inexistante, Apache renvoie une page d’erreur 404 avec en bas de la page, le message Apache/2.0.61 (Unix) PHP/4.4.8 Server at 127.0.0.1 Port 80 qui révèle la version du serveur d’Apache. Pour empêcher cela, il faut désactiver l’insertion de la signature du serveur avec la commande dans le fichier httpd.conf
ServerSignature Off.
Notez qu’on peut crée notre propre page d’erreur 404 : missing.html et de l’ajoutée en insérant la ligne suivante:
ErrorDocument 404 /missing.html
Limitations contre les DoS :
De façon à limiter la portée des attaques de type Denial of Service (DoS), il est conseillé de limiter le nombre de connexions simultanées MaxClients et en particulier le nombre de connexions persistantes MaxKeepAliveRequests. Celles-ci sont apparues avec la norme HTTP 1.1. Elles permettent d’effectuer des requêtes successives lors de la même connexion, ce qui augmente les performances du serveur. L’utilisation d’un timeout empêche les connexions sans fin.
Exemple pour un petit serveur :
MaxClients 150
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
Définition d’un « virtual host »
Apache permet la définition de Virtual Host, c’est-à-dire que le même serveur peut héberger, y compris sur une même adresse IP, plusieurs sites différenciés par leur nom. Pour limiter les risques liés à une panne des serveurs DNS ou à des manipulations frauduleuses, il convient de définir le VirtualHost par une adresse IP puis de préciser son nom.
<VirtualHost 194.57.201.103>
ServerName www.AdresseWeb.com
….
</VirtualHost>
Gérer ses fichiers de log
Apache permet de définir ses propres formats LogFormat pour les enregistrements dans les fichiers de log.
LogFormat « %h %l %u %t \ »%r\ » %>s %b \ »%{Referer}i\ » \ »%{User-Agent}i\ » » combined
LogFormat « %h %l %u %t \ »%r\ » %>s %b » common
LogFormat « %{Referer}i -> %U » referer
LogFormat « %{User-agent}i » agent
Ensuite, on enregistre les informations de log précisées par le format dans le fichier de son choix
CustomLog /usr/local/apache2/logs/access_log common
Suivant l’utilisation de ces fichiers de logs (reporting,…), il peut être intéressant de faire apparaître le nom des machines se connectant au serveur Web au lieu de leur adresse IP :
HostnameLookups On