« Installation de configuration du serveur web Apache 2.4 sous Debian Bullseye » : différence entre les versions

De Linux Server Wiki
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
Aucun résumé des modifications
Ligne 152 : Ligne 152 :
==Ip-based==
==Ip-based==


==Activer server-status dans une vhost / vhost d'admin==
==Activer server-status / vhost d'admin==

Version du 24 décembre 2015 à 09:42


Les différents mpm

Les différents mpm de apache sont fournis sous forme de modules et ce dès l'installation du paquet apache2. La seule exception est le mpm ITK qui nécessite l'installation du paquet libapache2-mpm-itk

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, puis conf-enabled/*.conf, puis sites-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étique
    • security.conf : passez principalement la variable ServerTokens 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

Nous allons créer un fichier afin d'interdire l'accès à certains dossiers qu'apache autorise en général par défaut. Notez qu'activer ces options empêchera la configuration par défaut de nombreux paquets debian de fonctionner.
Créez le fichier /etc/apache2/conf-available/zzz_localsecurity.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>

<IfModule php5_module>
  php_admin_value open_basedir /var/www/
</IfModule>

Activez ce fichier de configuration :

a2enconf zzz_localsecurity.conf
/etc/init.d/apache2 reload

php

aptitude install libapache2-mod-php5
a2enmod php5

Sécurité

la gestion des virtualhosts

L'architecture de configuration modulaire de apache sous debian propose de créer les fichiers de configuration des vhosts dans /etc/apache2/sites-available/ puis de les activer avec a2ensite afin qu'ils soient lus via le dossier /etc/apache2/sites-enabled
Je vous conseille cependant de créer, en plus, un dossier /etc/apache2/sites-config afin de créer des fichiers de configuration pouvant être utilisé dans plusieurs vhosts (par exemple, le même site, l'un en https, l'autre non) :

mkdir /etc/apache2/sites-config

Configuration recommandée dans toute virtualhost

open_basedir

open_basedir permet de limiter le champ d'action des fichiers php en terme de dossiers. Etant donné que nous avons défini un open_basedir restrictif un peu plus haut, si vous utilisez php, il est obligatoire de rédéfinir open_basedir pour correspondre aux dossiers auxquelles vos fichiers php doivent pouvoir accéder. En général, c'est tout simplement le même dossier que votre DocumentRoot

php_admin_value open_basedir /votre/documentroot

AllowOverride

AllowOverride permet de définir les règles autorisées à être modifiées par un fichier .htaccess
La configuration apache que nous avons vu plus tôt désactive complètement les fichiers .htaccess dans la totalité du système de fichier. Le problème de ce comportement est que les fichiers htaccess seront tout simplement ignoré, or, de nombreux projets utilisent les fichiers htaccess pour protéger de la lecture certains répertoires sensibles (fichiers de configurations, etc).
Si vous êtes certain que votre projet n'utilise pas de fichiers .htaccess, la question ne se pose même pas, gardez les fichiers htaccess désactivés ! Même s'ils sont pratiques, ils restent des fichiers relativement faciles à modifier (un peu de code foireux dans un module externe d'un CMS par exemple) et offrent donc une sécurité bien moindre que les directives définies directement dans la configuration de votre virtualhost apache ! Ils ont par ailleurs un impact sur les performances de apache.
Notez que cette directive doit obligatoirement être définie dans un champ <Directory>


Dans tous les cas :

  • Évitez absolument d'allowoverride fileinfo (permet de modifier l'handler par défaut d'un fichier)
  • Évitez si possible d'allowoverride options (car permet principalement d'activer l'execution CGI)
  • Si vous êtes certains que votre projet n'utilise pas de fichiers .htaccess :
AllowOverride none
  • Le cas échéant, la configuration minimale suivante est recommandée, étant donné que de nombreux projets utilisent des fichiers .htaccess afin de limiter l'accès a des répertoires :
AllowOverride Limit
AllowOverrideList Require
  • Si jamais le projet en question necessite les directives d'authentifications, on pourra définir comme cela :
AllowOverride Limit AuthConfig
  • Si vous faites de l'hosting, de nombreux utilisateurs auront besoin des directives AuthConfig, Indexes, mais aussi des règles de redirections et de rewrite :
AllowOverride AuthConfig Indexes Limit Options=Indexes
AllowOverrideList Redirect RedirectMatch RedirectTemp RedirectPermanent RewriteEngine RewriteOptions RewriteBase RewriteCond RewriteRule ErrorDocument

AssignUserId

name-based

Ip-based

Activer server-status / vhost d'admin