Installation de configuration du serveur web Apache 2.4 sous Debian Bullseye
Installation
aptitude install apache2
Considérations de sécurité
- Même si les directives sont lues dans l'ordre dans lequel vous les inscrivez, certaines restent appliqués "avant" les autres : <Directory> avant htaccess avant <file> et en dernier <Location>
- De manière globale, préférez la directive <Directory> a <Location> quand vous sécurisez des chemins du système de fichier de votre machine
- La configuration de apache sous debian est modulaire, pensez cependant à lire l'ensemble de cette configuration, vous pourriez y trouver des surprises (y compris /etc/apache2/apache2.conf !). N'oubliez pas non l'ordre de lecture qui peut changer la manière dont les règles s'appliquant :
/etc/apache2/apache2.conf
, puisconf-enabled/*.conf
, puissites-enabled/*.conf
- Faites attention aux directives Include fournies par certains paquets. Lisez toujours tout fichier que vous incluez a la configuration de apache ou d'une vhost !
- De même, faites attentions a certains paquets qui ont tendance à ajouter par défaut un fichier de configuration et a l'activer dans
conf-enabled/
- Par défaut, debian autorise l'accès à
/usr/share
. Il peut être bon de désactiver globalement ce comportement en créant un fichier de configuration dans conf-enabled, quitte a réactiver l'accès au cas par cas.
Exemple d'erreur a ne pas faire
DocumentRoot /srv/http/ <Directory /srv/http/> require all granted </Directory> <Directory /srv/http/admin> require all denied </Directory> <Location /> require all granted </Location>
Ici, on autorise l'accès a /srv/http/, puis on interdit l'accès a /srv/http/admin, puis on réautorise l'accès a l'ensemble de l'arborescence avec la dernière directive Location. Résultat : votre interface d'admin est accessible de l'extérieur.
Configuration
Configuration par défaut de apache
/etc/apache2/apache2.conf
Le fichier de configuration par défaut de apache. Il défini quelques variables dont vous ne devriez, dans la majorité des cas, pas avoir à vous soucier. Plus important, c'est grâce a lui que les autres fichiers de configuration sont chargés.
A noter cependant, ce fichier défini par défaut la variable AllowOverride None
pour la totalité de votre arborescence linux (ce qui empêche un éventuel fichier htaccess
quelque part dans votre arborescence de modifier la configuration de sécurité d'un dossier) et interdit l'accès à toute votre arborescence à l'exception de /usr/share
Evitez de faire des modifications dans ce fichier, nous le feront plus loin dans les fichiers de configuration indépendants.
/etc/apache2/ports.conf
Ce fichier se charge de définir les ports sur lesquels apache écoutera. Si vous souhaitez utiliser apache sur d'autres ports sur 80 et 443, il faudra jouter des lignes Listen
pour chaque port.
/etc/apache2/mods-enabled/*.conf
: fichiers chargés dans l'ordre numérique puis alphabétique
Charge les différents modules installés ainsi que leur configuration. Dans la majorité des cas, la configuration par défaut des modules est tout à fait convenable d'un point de vue sécurité.
Gardez cependant en mémoire les fichiers mpm_event.conf
et mpm_prefork.conf
qui peuvent vous permettre de d'optimiser les performances de apache.
A noter le fichier status.conf
qui restreint l'utilisation de module status a l'ip locale du serveur.
/etc/apache2/conf-enabled/*.conf
: fichiers chargés dans l'ordre numérique puis alphabétiquesecurity.conf
: passez principalement la variableServerTokens prod
javascript-common.conf
: fichier à surveiller étant donné qu'il créé un alias global /javascript, cependant, l'accès ne sera pas autorisé par défaut (voir plus loin)serve-cgi-bin.conf
: un trou de sécurité à part entière qui active les scripts cgi installés dans toutes les vhosts ... je vous conseille rapidement de désactiver ce script tout simplement et d'activer les scripts cgi a la demande dans les vhosts le necessitant. Attention cependant, désactiver ce script rendra potentiellement inutilisable les configurations par défaut fournis avec certains paquets (smokeping par exemple). Pour le désactiver, rien de plus simple :a2disconf serve-cgi-bin.conf
Configuration de sécurité en sus
Créez le fichier /etc/apache2/conf-available/zzz_local.conf (le faire commencer par zzz devrait vous assurer qu'il soit lu en dernier)
#disable access to /usr/share by default <Directory /usr/share> AllowOverride None Require all denied </Directory> <Directory /usr/lib/cgi-bin/> AllowOverride None Require all denied </Directory> #disable access to svt tree <DirectoryMatch "/\.svn"> Require all denied </DirectoryMatch> #disable access to git tree <DirectoryMatch "/\.git"> Require all denied </DirectoryMatch>
Activez ce fichier de configuration :
a2enconf zzz_local.conf
la gestion des virtualhosts
name-based
Ip-based
conf-available/security.core.conf