J'utilise CentOS 5.5 avec le stock Apache httpd-2.2.3.
J'ai activé mod_status à l'emplacement/état du serveur. Je voudrais autoriser l'accès à cet emplacement unique de la manière suivante:
1 & 2 sont faciles. Cependant, puisque je "Autorise à partir de 192.168.16.0/24", est-il possible de refuser à partir de 192.168.16.100?
J'ai essayé d'ajouter une instruction Deny pour 192.168.16.100 mais cela ne fonctionne pas. Voici la configuration appropriée:
<Location /server-status>
SetHandler server-status
Order Allow,Deny
Deny from all
Deny from 192.168.16.100 # This does not deny access from 192.168.16.100
Allow from 192.168.16.0/24
</Location>
Ou:
<Location /server-status>
SetHandler server-status
Order Allow,Deny
Deny from all
Deny from 192.168.16.100 # This does not deny access from 192.168.16.100
Allow from 192.168.16.0/24
</Location>
Cependant, cela n'empêche pas l'accès à cette page particulière, comme le montrent les journaux d'accès:
www.example.org 192.168.16.100 - - [11/Mar/2011:16:01:14 -0800] "GET /server-status HTTP/1.1" 200 9966 "-" "
Selon le manuel pour mod_authz_Host :
Autoriser, refuser
Tout d'abord, toutes les directives Allow sont évaluées; au moins un doit correspondre, sinon la demande est rejetée. Ensuite, toutes les directives Refuser sont évaluées. En cas de correspondance, la demande est rejetée
L'adresse IP correspond à la directive Deny, donc la demande ne devrait-elle pas être rejetée?
Selon le tableau de la page mod_authz_Host, cette adresse IP doit "Correspondre à la fois Autoriser et Refuser", et donc la règle "Contrôles de correspondance finale: Refusé" doit s'appliquer.
Correspondance Autoriser, Refuser le résultat Refuser, Autoriser le résultat Correspondance Autoriser uniquement Demande autorisée Demande autorisée Correspondance Refuser uniquement Demande refusée Demande refusée Aucune correspondance Par défaut à la deuxième directive: Refusé Par défaut à la deuxième directive: Autorisé Correspond à la fois à Autoriser et Refuser Contrôles de correspondance finale: Refusé Contrôles de correspondance finale: Autorisé
Je n'ai pas testé, mais je pense que vous y êtes presque.
<Location /server-status>
SetHandler server-status
Order Allow,Deny
Deny from 192.168.16.100
Allow from 192.168.16.0/24
</Location>
Deny from all
n'est pas nécessaire. En fait, ça va bousiller parce que tout va correspondre à all
, et donc refusé (et je pense qu'Apache essaie d'être intelligent et de faire quelque chose de stupide). J'ai toujours trouvé les directives d'Apache Order
, Allow
et Deny
déroutantes, alors visualisez toujours les choses dans un tableau (tiré de la documentation ):
Correspondance | Autoriser, refuser le résultat | Refuser, autoriser le résultat ----------------------------------------- -------------- Autoriser uniquement | Autorisé | Autorisé Refuser uniquement | Refusé | Refusé Pas de correspondance | Par défaut: refusé | Par défaut: Autorisé Correspond aux deux | Match final: refusé | Match final: autorisé
Avec les paramètres ci-dessus:
Je chercherais probablement à ajouter également des règles IPTables pour cela pour refuser l'hôte unique sur le port 80, refuser de tous et autoriser le sous-réseau.
Vous ne devriez avoir aucun problème à configurer une règle de refus à partir d'une adresse spécifique après avoir autorisé le sous-réseau. Faites-le simplement dans cet ordre.