Contexte

En interrogeant une url, apache retourne une erreur “403 forbidden” ; Une erreur “Client denied by server configuration” est loguée à la fin du fichier d’erreur :

user@machine: ~ $ tail /var/log/apache2/error.log
[...]
Thu May 29 07:11:08 2008] [error] [client 192.168.1.2] Client denied by server configuration: /var/www/repertoire

D’autres raisons d’erreur 403 sont expliquées dans le post : D’où vient l’erreur “403 Forbidden” d’apache ?.

Résolution

Dans la configuration d’apache, des directives Allow, Deny, Order doivent limiter l’accès au répertoire interrogé (/var/www/repertoire dans notre exemple) ou l’un de ses répertoires pères.

En général, le problème vient d’un mauvais positionnement de la directive Order. Celle-ci peut avoir deux valeurs allow,deny (qui permet de blacklister certaines ip) ou deny,allow (qui permet d’autoriser au document à seulement certaines ip). C’est contre intuitif, mais c’est bien la dernière notion qui est prioritaire sur la première.

Voici un exemple qui n’autorise qu’une ip à notre répertoire :

user@machine:~ $ nano /etc/httpd/conf/httpd.conf
[...]
<Directory /var/www/repertoire>
    Allow from 192.168.1.2
    Deny from all
    Order deny,allow
<Directory>
[...]

Dans l’exemple précédent, on imagine que la restriction d’accès par adresse ip a été mise dans le fichier principal d’apache (pour une Redhat).

Il est également possible que l’adresse du client ne soit pas autorisée. Pour autoriser plusieurs adresses ip, il suffit de les séparer par des espaces :

user@machine:~ $ nano /etc/httpd/conf/httpd.conf
[...]
<Directory /var/www/repertoire>
    Allow from 192.168.1.1 192.168.1.2
    Deny from all
    Order deny,allow
<Directory>
[...]

Il est également possible d’autoriser un réseau entier selon la notation CIDR :

[...]
    Allow from 192.168.0.0/16
[...]