Serveur Apache HTTP Version 2.2
Ce document concerne une version ancienne (2.2) du serveur HTTP Apache. La version actuelle est documentée ici. Si vous n'avez pas encore effectué la mise è jour, veuillez suivre ce lien pour plus d'informations.
Pour consulter la version actuelle de ce document, vous pouvez suivre ce lien.
Description: | Autorisations de groupe basées sur l'hôte (nom ou adresse IP) |
---|---|
Statut: | Base |
Identificateur de Module: | authz_host_module |
Fichier Source: | mod_authz_host.c |
Compatibilité: | Disponible depuis les versions 2.1 et supérieures d'Apache |
Les directives fournies par le module
mod_authz_host
s'utilisent dans des sections
<Directory>
,
<Files>
, et
<Location>
, ou des
fichiers
.htaccess
pour
contrôler l'accès à certaines zones du serveur. Le contrôle d'accès
peut être effectué en fonction du nom d'hôte, de l'adresse IP, ou
d'autres caractéristiques de la requête client, telles qu'elles sont
enregistrées dans des variables
d'environnement. Les directives Allow
et Deny
permettent de spécifier
quels clients sont ou ne sont pas autorisés à accéder au serveur,
alors que la directive Order
définit le statut d'accès
par défaut, et détermine la manière dont les directives Allow
et Deny
vont interagir.
Les restrictions d'accès basées sur l'hôte et l'authentification
à base de mots de passe peuvent être utilisées conjointement. Dans
ce cas, la directive Satisfy
permet de déterminer la manière dont ces deux méthodes de
restriction interagissent.
En général, les directives de restriction d'accès s'appliquent à
toutes les méthodes d'accès (GET
, PUT
,
POST
, etc...). C'est d'ailleurs ce que l'on souhaite
dans la plupart des cas. Il est cependant possible de ne restreindre
l'accès que pour certaines méthodes, tout en laissant les autres
méthodes sans protection, en plaçant les directives dans une section
<Limit>
.
Description: | Contrôles quels hôtes peuvent accéder à une certaine zone du serveur |
---|---|
Syntaxe: | Allow from all|hôte|env=[!]var-env
[hôte|env=[!]var-env] ... |
Contexte: | répertoire, .htaccess |
AllowOverride: | Limit |
Statut: | Base |
Module: | mod_authz_host |
Compatibilité: | Le support de la négation de env=env-variable est assuré depuis la version 2.2.10 du serveur HTTP Apache |
La directive Allow
permet de contrôler
quels hôtes peuvent
accéder à une zone du serveur. On peut contrôler
l'accès en fonction du nom d'hôte, de l'adresse IP, d'un intervalle
d'adresses IP, ou d'autres caractéristiques de la requête client
enregistrées dans des variables d'environnement.
Le premier argument de cette directive est toujours
from
. Les arguments suivants peuvent se présenter sous
trois formes. Si Allow from all
est spécifié, tous les
hôtes ont l'autorisation d'accès, sauf si la configuration des
directives Deny
et
Order
apporte une
restriction quelconque, comme décrit plus loin. Afin de n'accorder
l'accès au serveur qu'à certains hôtes ou groupes d'hôtes,
on peut utiliser l'argument hôte sous les formes
suivantes :
Allow from apache.org
Allow from .net exemple.edu
Les hôtes dont les nom correspond à la chaîne spécifiée, ou
se terminant par elle, sont autorisés à accéder. Seuls les
éléments complets du nom de domaine sont comparés, si bien que
l'exemple ci-dessus correspondra à foo.apache.org
,
mais pas à fooapache.org
. Avec cette configuration,
Apache va effectuer une double recherche DNS sur l'adresse IP du
client, sans tenir compte de la définition de la directive
HostnameLookups
. Il effectue
tout d'abord une recherche DNS inverse sur l'adresse IP afin de
déterminer le nom d'hôte associé, puis une recherche directe sur
le nom d'hôte pour vérifier s'il correspond bien à l'adresse IP
originale. L'accès ne sera accordé que si le nom d'hôte correspond
à la chaîne spécifiée et si les recherches DNS inverse et
directe produisent un résultat cohérent.
Allow from 10.1.2.3
Allow from 192.168.1.104 192.168.1.205
L'adresse IP d'un hôte qui a l'autorisation d'accès
Allow from 10.1
Allow from 10 172.20 192.168.2
Les 1 à 3 premiers octets d'une adresse IP, pour référencer un sous-réseau.
Allow from 10.1.0.0/255.255.0.0
Un réseau a.b.c.d, et un masque de sous-réseau w.x.y.z. pour la restriction plus fine d'un sous-réseau.
Allow from 10.1.0.0/16
Identique au cas précédent, mais le masque de sous-réseau se compose des nnn bits de poids forts.
Notez que les trois derniers exemples référencent exactement le même ensemble d'hôtes.
On peut spécifier des adresses et sous-réseaux IPv6 de la manière suivante :
Allow from 2001:db8::a00:20ff:fea7:ccea
Allow from 2001:db8::a00:20ff:fea7:ccea/10
Le troisième format d'arguments de la directive
Allow
permet de contrôler l'accès au
serveur en fonction de l'existence d'une variable d'environnement. Lorsque
Allow from
env=var-env
est spécifié, la
requête est autorisée si la variable d'environnement
var-env existe. Lorsque Allow from
env=!var-env
est spécifié, la requête est
autorisée à accéder si la variable d'environnement
var-env n'existe pas. Le serveur fournit la possibilité
de définir des variables d'environnement avec une grande souplesse
en fonction des caractéristiques de la requête client à l'aide des
directives fournies par le module mod_setenvif
. On
peut ainsi utiliser cette directive pour contrôler l'accès en
fonction de certains en-têtes comme User-Agent
(type de
navigateur), Referer
, etc...
SetEnvIf User-Agent ^KnockKnock/2\.0 laisse_moi_entrer
<Directory /docroot>
Order Deny,Allow
Deny from all
Allow from env=laisse_moi_entrer
</Directory>
Dans cet exemple, les navigateurs dont la chaîne de description
de l'en-tête user-agent commence par KnockKnock/2.0
se
verront accorder l'accès, alors que tous les autres se le verront
refuser.
Description: | Détermine quels hôtes ont l'accès au serveur refusé |
---|---|
Syntaxe: | Deny from all|hôte|env=[!]var-env
[hôte|env=[!]var-env] ... |
Contexte: | répertoire, .htaccess |
AllowOverride: | Limit |
Statut: | Base |
Module: | mod_authz_host |
Cette directive permet de restreindre l'accès au serveur en
fonction du nom d'hôte, de l'adresse IP, ou de variables
d'environnement. Les arguments de la directive
Deny
sont identiques à ceux de la directive
Allow
..
Description: | Détermine le statut d'accès par défaut et l'ordre dans
lequel les directives Allow et
Deny sont évaluées. |
---|---|
Syntaxe: | Order ordre |
Défaut: | Order Deny,Allow |
Contexte: | répertoire, .htaccess |
AllowOverride: | Limit |
Statut: | Base |
Module: | mod_authz_host |
La directive Order
, utilisée avec les
directives Allow
et
Deny
, fournit un
système de contrôle d'accès en trois passes. La première passe
traite soit toutes les directives Allow
, soit toutes les
directives Deny
,
comme spécifié par la directive Order
. La
seconde passe traite le reste des directives (Deny
ou Allow
). La troisième passe
s'applique à toutes les requêtes auxquelles aucune des deux
premières passes ne s'appliquent.
Notez que toutes les directives Allow
et Deny
sont traitées, à la
différence d'un pare-feu classique, où seule la première règle qui
convient est traitée. La dernière directive qui convient l'emporte
sur les autres (à la différence là aussi d'un pare-feu classique).
De plus, l'ordre dans lequel les lignes apparaissent dans les
fichiers de configuration n'a aucune importance -- toutes les
directives Allow
sont traitées comme un
groupe, toutes les directives Deny
comme un autre, et le
statut d'accès par défaut est indépendant.
Ordre peut être soit :
Allow,Deny
Allow
sont évaluées en premier
; l'une d'elles au moins doit convenir, faute de quoi la requête
sera rejetée. Vient ensuite le tour des directives Deny
. Si l'une au moins
convient, le requête est rejetée. Enfin, toute requête à laquelle
ne convient aucune directive Allow
ou Deny
sera rejetée par défaut.Deny,Allow
Deny
sont évaluées en premier
; si l'une au moins
convient, le requête est rejetée, sauf si une
directive Allow
convient aussi. Enfin,
toute requête à laquelle
ne convient aucune directive Allow
ou Deny
aura l'autorisation
d'accès par défaut.Mutual-failure
Order
Allow,Deny
qui le remplace.Les mots-clés ne doivent être séparés que par des virgules ; aucun espace ne doit s'intercaler entre eux.
Directives qui conviennent | Résultat de Allow,Deny | Résultat de Deny,Allow |
---|---|---|
Allow seulement convient | Requête autorisée | Requête autorisée |
Deny seulement convient | Requête rejetée | Requête rejetée |
Aucune directive ne convient | La seconde directive par défaut: Rejet | La seconde directive par défaut: Autorisation |
Allow & Deny conviennent | La dernière directive qui convient prend le contrôle: Rejet | La dernière directive qui convient prend le contrôle: Autorisation |
Dans l'exemple suivant, tous les hôtes du domaine apache.org ont l'autorisation d'accès ; tous les autres hôtes voient leur accès refusé.
Order Deny,Allow
Deny from all
Allow from apache.org
Dans l'exemple suivant, tous les hôtes du domaine apache.org ont
l'autorisation d'accès, sauf les hôtes du sous-domaine
foo.apache.org qui voient leur accès refusé. Tous les hôtes qui ne
font pas partie du domaine apache.org voient leur accès refusé car
le statut d'accès par défaut est défini à Deny
.
Order Allow,Deny
Allow from apache.org
Deny from foo.apache.org
En revanche, si la directive Order
du
dernier exemple a pour valeur Deny,Allow
, tous les
hôtes auront l'autorisation d'accès. Ceci est dû au fait que l'on ne
tient pas compte de l'ordre dans lequel apparaissent les directives
dans le fichier de configuration, et que la directive Allow
from apache.org
est évaluée en dernier et l'emporte donc sur
la directive Deny from foo.apache.org
. Tous les hôtes
qui ne font pas partie du domaine apache.org
auront
aussi l'autorisation d'accès, car le statut d'accès par défaut est
défini à
Allow
.
Même en l'absence de directives Allow
et Deny
associées, la présence
d'une directive Order
peut affecter l'accès à
une partie du serveur, à cause de son effet sur le statut d'accès
par défaut. Par exemple,
<Directory /www>
Order Allow,Deny
</Directory>
interdira tout accès au répertoire /www
car le
statut d'accès par défaut est défini à Deny
.
La directive Order
ne contrôle l'ordre de
traitement des directives d'accès qu'à l'intérieur de chaque phase
du traitement de la configuration du serveur. Ceci implique, par
exemple, qu'une directive Allow
ou Deny
apparaissant dans une
section <Location>
sera toujours évaluée après une directive Allow
ou Deny
apparaissant dans une
section <Directory>
ou un fichier
.htaccess
, sans tenir compte de la définition de la
directive Order
. Pour plus de détails sur la
fusion des sections de configuration, voir la documentation Comment fonctionnent les sections Directory,
Location et Files.