Un serveur Web peut ĂȘtre source de graves problĂšmes de sĂ©curitĂ© si vous n’y prenez pas garde…
Ce n’est pas moi qui le dit, c’est Apache2 lui mĂȘme. Soyez toujours sĂ»r d’avoir la derniĂšre version d’Apache. Pas pour faire joli, mais pour ĂȘtre sĂ»r que les derniĂšres failles sont corrigĂ©es…
Inscrivez-vous à la liste des annonces de sécurités
Votre sources.list doit absolument contenir (Ă modifier selon votre branche Ă©videmment):
deb http://security.debian.org/ squeeze/updates main
Masquer les détails du serveur web
Pour des raisons de sĂ©curitĂ©, il est nĂ©cessaire de masquer la version d’Apache (afin que l’Ă©ventuel pirate ne puisse pas identifier la version et donc d’exploiter les failles associĂ©es).
Fichier de configuration Apache : /etc/apache2/apache2.conf
Ainsi, dans le fichier de configuration Apache, il faut modifier les valeurs:
ServerTokens Prod ServerSignature Off
Nous pouvons masquer aussi la version de PHP utilisée modifiant le fichier php.ini
Fichier de configuration PHP : /etc/php/X.Y/apache2/php.ini
expose_php = Off
Dans le VirtualHost, on peut ajouter ceci afin de masquer la version de PHP utilisée :
Header unset X-Powered-By
Renforcer la sécurité dans les VirtualHosts
De maniÚre générale, on peut ajouter dans les VirtualHosts ces directives :
# Bloquer le détournement de clic (clickjacking) Header always set X-Frame-Options DENY # Bloquer le changement des types MIME Header always set X-Content-Type-Options nosniff
Renforcer la sécurité en HTTPS
CÎté SSL/TLS, afin de renforcer la note « SSL Labs » ( https://www.ssllabs.com/ssltest/ ) on peut modifier ou ajouter ces directives :
# Désactiver les protocoles non sûrs SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 # Forcer les algorithmes forts et sûrs SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!SEED:!IDEA # Forcer l'ordre de ces algorithmes SSLHonorCipherOrder on # utiliser HSTS Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
Se protéger contre les attaques DoS
On peut rĂ©duire le TimeOut d’apache Ă 60 secondes au lieu de 300 secondes (Ă adapter suivant si le site peut avoir des requĂȘtes longues) :
Timeout 60
Mais aussi réduire le nombre de processus apache à lancer par le serveur :
ServerLimit 64
Utiliser le module mod_security
ModSecurity est un module d’Apache spĂ©cialisĂ© dans la sĂ©curitĂ©. Il permet donc de sĂ©curiser la couche applicative avant l’arrivĂ©e des requĂȘtes sur le site hĂ©bergĂ© sur l’Apache en question. MĂȘme s’il s’agit d’un module, ses fonctionnalitĂ©s sont vastes et permettent de toucher Ă tous les points de sĂ©curitĂ© nĂ©cessaire.
Installation sous Debian
apt install libapache-mod-security
EmpĂȘcher le parcours des rĂ©pertoires
Pour empĂȘcher le parcours du rĂ©pertoire racine du serveur Apache et de tous ses sous-rĂ©pertoires, ajoutez l’option -Indexes:
<Directory /> Order Allow,Deny Allow from all Options -Indexes </Directory>
Protéger vos répertoires avec un mot de passe
mkdir /var/www/admin cd /var/www/admin htpasswd -c .htpass admin
New password:password Re-type new password:password Adding password for user admin
mkdir /var/www/test nano /etc/apache2/sites-available/default
<Directory /var/www/test> AuthType Basic AuthName "autorisation requise" # (La ligne suivante est facultative) AuthBasicProvider file AuthUserFile /var/www/admin/.htpass Require user admin </Directory>
Rendez-vous Ă : http://votre.domaine.fr/test
DĂ©sactiver l’exĂ©cution de scripts CGI
Aussi Ă©vident que cela puisse paraĂźtre, il faut tout de mĂȘme le rappeler, un fichier CGI malveillant dans un rĂ©pertoire peut-ĂȘtre redoutable pour la sĂ©curitĂ© de votre serveur…
Donc, pensez Ă dĂ©sactiver « globalement » la possibilitĂ© dâexĂ©cuter des scripts CGI sur votre serveur.
Options -ExecCGI
Il est toujours possible dans vos <virtualhosts> de les rĂ©activer, rĂ©pertoire par rĂ©pertoire…
Options +ExecCGI
EmpĂȘcher Apache de suivre les liens symboliques
Avec l’option FollowSymLinks le serveur est autorisĂ© Ă suivre les liens symboliques, nĂ©cessaire pour l’ URL Rewriting. « Options +FollowSymlinks » n’est pas obligatoire pour les « rewriting classiques ». DĂ©sactivez cette option globalement.
Options -FollowSymLinks
MĂȘme remarque que ci-dessus, activez cette option quand nĂ©cessaire, uniquement pour les rĂ©pertoires qui en ont besoin.
htaccess
Apache permet la gestion dĂ©centralisĂ©e de la configuration via des fichiers spĂ©ciaux placĂ©s dans l’arborescence du site web. Ces fichiers spĂ©ciaux se nomment en gĂ©nĂ©ral .htaccess, mais tout autre nom peut ĂȘtre spĂ©cifiĂ© Ă l’aide de la directive AccessFileName.
Les directives placĂ©es dans les fichiers .htaccess s’appliquent au rĂ©pertoire et sous-rĂ©pertoires dans lequel vous avez placĂ© le fichier
La syntaxe des fichiers .htaccess est la mĂȘme que celle des fichiers de configuration principaux. Comme les fichiers .htaccess sont lus Ă chaque requĂȘte, les modifications de ces fichiers prennent effet immĂ©diatement.
Vous ne devriez utiliser les fichiers .htaccess que si vous n’avez pas accĂšs au fichier de configuration du serveur principal.
L’accĂšs aux fichiers .htaccess
Par dĂ©faut ces fichiers ne sont pas accessibles, lisibles ou tĂ©lĂ©chargeables…
VĂ©rifiez que c’est bien le cas:
AccessFileName .htaccess # # The following lines prevent .htaccess and .htpasswd files from being # viewed by Web clients. # <Files ~ "^\.ht"> Order allow,deny Deny from all Satisfy all </Files>
Avec un navigateur:
Forbidden You don't have permission to access /test/.htaccess on this server.
Avec wget:
wget 10.9.8.3/test/.htaccess --2011-08-25 11:01:36-- http://10.9.8.3/test/.htaccess Connexion vers 10.9.8.3:80...connectĂ©. requĂȘte HTTP transmise, en attente de la rĂ©ponse...403 Forbidden 2011-08-25 11:01:36 ERREUR 403: Forbidden.
Interdire l’utilisation des fichiers .htaccess autre que ceux dĂ©finis par l’administrateur
Vous devriez empĂȘcher les utilisateurs de crĂ©er leurs propres fichiers .htaccess qui pourraient supplanter vos propres limitations…
Pour dĂ©sactiver complĂštement l’utilisation des fichiers .htaccess:
<Directory /> AllowOverride None </ Directory>
Cela empĂȘchera l’utilisation de fichiers .htaccess dans tous les rĂ©pertoires en dehors de ceux spĂ©cifiquement activĂ©s.
Filtrer les adresses IP
N’autorisez pas l’accĂšs de vos rĂ©pertoire Ă n’importe qui…
Vous pouvez choisir les adresses IP qui ont accĂšs ou non Ă vos pages. Vous pouvez empĂȘcher l’accĂšs depuis toute autre ip que la vĂŽtre Ă n’importe quel rĂ©pertoire.
Par exemple : autoriser l’accĂšs seulement depuis votre poste:
Order Deny,Allow Deny from all Allow from 127.0.0.1
ou encore de votre réseau local:
Order Deny,Allow Deny from all Allow from 10.9.8.0/22
ou interdire une IP précise:
Order Allow,Deny Allow from all Deny from 10.9.8.1
etcâŠ
Le principe est le suivant : Allow,Deny : L’IP doit ĂȘtre dans un Allow from et ne pas ĂȘtre dans un Deny From pour ĂȘtre autorisĂ©e Deny,Allow : L’IP doit ĂȘtre dans un Deny from et ne pas ĂȘtre dans un Allow From pour ĂȘtre interdite
Limiter les DoS (Denial of Service)
Il est possible de tenter de limiter la portée des attaques de type Denial of Service (Dénis de Service).
La technique consiste à limiter le nombre de connexions simultanées (MaxClients) et le nombre de connexions persistantes (MaxKeepAliveRequests).
Celles-ci sont utilisĂ©es afin d’augmenter les performances du serveur, mais elles ont leur revers…
Lâutilisation dâun timeout empĂȘche les connexions sans fin.
Voici un exemple pour un petit serveur (Ă placer Ă la fin de votre fichier apache2.conf)
MaxClients 150 KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 10
Il est bien Ă©vident que pour un serveur Ă lourde charge ces valeurs doivent ĂȘtres augmentĂ©s.
Limiter les Ddos et dénis de services avec mod-evasive
Les « Inclusions CĂŽtĂ© Serveur » (Server Side Includes – SSI)
Les SSI permettent d’ajouter du contenu dynamique Ă des documents HTML prĂ©existants.
SSI (Server Side Includes) est constituĂ© de directives placĂ©es dans des pages HTML qui vous permettent d’ajouter du contenu gĂ©nĂ©rĂ© dynamiquement Ă une page HTML prĂ©existante, sans avoir Ă servir la page entiĂšre via un programme CGI, ou toute autre technologie de contenu dynamique.
Comme pour les autres options, désactivez globalement:
Toujours au mĂȘme endroit, (dans un tag <Directory>) :
Options -Includes
<VirtualHost> et ses Directives
Les balises <VirtualHost> et </VirtualHost> permettent de rassembler un groupe de directives qui ne s’appliqueront qu’Ă un serveur virtuel en particulier. Chaque serveur virtuel doit correspondre Ă une adresse IP, un port ou un nom d’hĂŽte spĂ©cifique
Exemple
NameVirtualHost 10.9.8.3:80 <VirtualHost 10.9.8.3:80> ServerAdmin webmaster@zehome.org DocumentRoot /var/www/webmail/ ServerName webmail.zehome.org <Directory "/var/www/webmail/"> allow from all Options None </Directory> </VirtualHost> <VirtualHost 10.9.8.3:80> ServerAdmin webmaster@zehome.org DocumentRoot /var/www/cubmail/ ServerName cubmail.zehome.org php_value suhosin.session.encrypt Off <Directory "/var/www/cubmail/"> allow from all Options None </Directory> </VirtualHost>
Pour que ceci fonctionne, vous devez vous assurez que les noms webmail.zehome.org et cubmail.zehome.org sont des alias (CNAME) pointant vers l’adresse IP 10.9.8.3