Une sorte de bug que vous pouvez rencontrer avec une configuration apache avancée, qui utilise de nombreuses règles pour interdire et autoriser fichiers et dossiers, le site se retrouve interdit aux IP que vous vouliez expressément autoriser.

Le comportement qui suit n’est pas évident à expliquer, je l’ai mis en évidence dans des cas de figure de sites privés et sécurisés pour n’autoriser que certaines adresses IP amies. Ces sites se mettaient à interdire expressément les adresses IP définies comme amies, l’effet inverse !

Description de la configuration fautive

La configuration en question met en jeu apache 2.4.10-10+deb8u5 avec un site délivré par HTTPS grâce à mod_ssl et un certificat payant. La compression des pages est activée par mod_deflate. le log d’erreur qui suit n’est visible qu’en configurant LogLevel debug .

La configuration se fait dans plusieurs fichiers qui se trouvent dans les répertoires conf-enabled et sites-enabled mais cela n’a pas grande importance.

Etape 1 : sur tous les sites, on interdit l’accès aux les fichiers PHP à tout le monde (sauf index.php)

Etape 2 : sur le site voulu, on autorise l’accès aux utilisateurs authentifiés ou les IP amies

Log d’erreur

 

Correction de la configuration

La première étape reste inchangée dans la configuration modifiée, on se contente d’intercaler une directive <Files>.

Etape 2 : sur le site voulu, on autorise l’accès aux utilisateurs authentifiés ou les IP amies

Log d’autorisation qui fonctionne

 

Conclusion

Il semblerait que l’élément fautif dans cette configuration soit le fait d’interdire un ensemble de fichiers via la directive <FilesMatch>, et de chercher à contrecarrer cette interdiction via la directive <Directory>. En conclusion je pense qu’à une règle <FilesMatch> il faut opposer une règle identique ou équivalente comme <Files>. Idem pour <Directory> et <DirectoryMatch>. Et pourtant, on pourrait croire que le <Files *> n’a aucune signification concrète puisqu’il cible tous les fichiers !

A creuser : il me semble bien que si on limite les règles de restriction de fichiers à du Deny,Allow  à base d’IP, le problème ne se pose pas même en l’absence de <Files *> .

Ajout postérieur (2019) : je pense que l’utilisation du module apache access_compat (et sa syntaxe Order allow,deny ) en lien avec l’authentification Digest est responsable de pas mal de difficultés de ce type. Il est donc préférable de passer à 100% sur le module authz_host car sa syntaxe de type Require est tout à fait compatible avec l’authentification Digest ou autre.

De plus, le module access_compat est déprécié par le manuel Apache.