Masquer la version de Apache

Après installation de Apache 2, il est facile pour n'importe qui de voir quelle version est utilisée. Cela peut s'avérer dangereux car quelqu'un connaissant les failles de sécurités pour une version donnée pourra deviner comment attaquer le serveur. Il est possible de masquer la version de Apache afin de ne pas donner trop d'informations à quelqu'un de potentiellement malveillant.

Sous Debian (et ses dérivées), il faut modifier le fichier /etc/apache/conf.d/security. Ce fichiers contient deux directives : ServerTokens et ServerSignature.

ServerTokens est la directive qui permet de contrôler le type de version qui sera renvoyée dans l'en-tête de la réponse envoyée au navigateur. Cette directive peut avoir plusieurs valeurs.

Valeur Version renvoyée
Full Server: Apache/2.2.16 (Debian) PHP/5.3.3 mod_ssl/2.8.31 OpenSSL/0.9.8o
OS Server: Apache/2.2.16 (Debian)
Minimal Server: Apache/2.2.16
Minor Server: Apache/2.2
Major Server: Apache/2
Prod Server: Apache

Par défaut Apache 2 utilise la valeur Full mais pour un serveur en production il est recommandé d'utiliser la valeur Prod qui est celle qui donne le moins d'informations concernant Apache 2 et son utilisation.

ServerSignature est la directive qui permet de contrôler le bas de page lorsque le serveur renvoie des pages comme des erreurs 404. Cette directive a trois valeurs possibles :

  1. On qui est la valeur par défaut. Elle ajoute une ligne contenant le serveur, sa version, les éventuels modules utilisés, etc… Cela dépend tout de même de la valeur attribuée à la directive ServerTokens.
  2. Off n'ajoute pas de ligne en bas de page.
  3. EMail inclut toutes les informations comme On mais ajoute en plus un champ mailto: vers l'adresse configurée avec la directive ServerAdmin.

Par défaut, les serveurs sous Debian utilisent la valeur On, il est donc plutôt conseillé d'utiliser la valeur Off.

Une fois les valeurs modifiés en redémarre Apache 2.

service apache2 restart

Et l'on peut maintenant voir ce que le serveur renvoie comme signature.

telnet respawner.fr 80
Trying 2a01:e0b:1:126:ca0a:a9ff:fec8:e11b...
Connected to respawner.fr.
Escape character is '^]'.
HEAD / HTTP/1.1 

HTTP/1.1 400 Bad Request
Date: Thu, 26 Jan 2012 17:14:14 GMT
Server: Apache
Vary: Accept-Encoding
Connection: close
Content-Type: text/html; charset=iso-8859-1

Connection closed by foreign host.

Dans la même veine, il est possible de cacher la version de PHP. Pour cela, on édite le fichier php.ini utilisé. Sous Debian, on le trouve dans /etc/php5/[type]/ où [type] dépend de la façon dont PHP est utilisée (apache2, cgi, cli). Dans le fichier on recherche la variable expose_php et on lui attribut la valeur Off.