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:
- Refuser de tout
- Autoriser à partir du sous-réseau 192.168.16.0/24
- Refuser à partir de l'IP 192.168.16.100, qui se trouve dans le sous-réseau 192.168.16.0/24.
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 de 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 Deny 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 Match Refuser uniquement Demande refusée Demande refusée Aucune correspondance Par défaut à la deuxième directive: refusée Par défaut à la deuxième directive: autorisée Correspond à la fois Autoriser et Refuser Contrôles de correspondance finale: Refusé Contrôles de correspondance finale: Autorisés
la source
Allow from 192.168.16.0/24
. Si je comprends bien la documentation, toute adresse IP demandeur du réseau 192.168.16.0/24 correspondra à cette instruction Allow, la demande est autorisée.Réponses:
Je n'ai pas testé, mais je pense que vous y êtes presque.
Deny from all
n'est pas nécessaire. En fait, ça va bousiller parce que tout va correspondreall
, et donc nié (et je pense qu'Apache essaie d'être intelligent et de faire quelque chose de stupide). Je l' ai toujours trouvé ApacheOrder
,Allow
etDeny
confondant les directives, visualiser donc toujours les choses dans une table (extrait de la documentation ):Avec les paramètres ci-dessus:
la source
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.
la source
Pouvez-vous utiliser php? Si c'est le cas, ajoutez une instruction php pour quitter / rediriger pour cette adresse IP spécifique
Exemple:
$ deny = array ("111.111.111", "222.222.222", "333.333.333");
if (in_array ($ _SERVER ['REMOTE_ADDR'], $ deny))
{header ("location: http://www.google.com/ ");
sortie();
Référence: http://perishablepress.com/press/2007/07/03/how-to-block-ip-addresses-with-php/
la source