26 votos

Apache httpd: ¿Cómo puedo Negar de todas, Deje de subred, pero Negar de IP dentro de esa subred?

Estoy corriendo CentOS 5.5 con el stock de Apache httpd-2.2.3.

He habilitado mod_status en la Ubicación /server-status. Me gustaría permitir el acceso a esta Ubicación única en la siguiente forma:

  1. Deny from all
  2. Permitir que desde la subred 192.168.16.0/24
  3. Negar desde una IP 192.168.16.100, que está dentro de la 192.168.16.0/24 subred.

1 & 2 son fáciles. Sin embargo, desde que "Permitir de 192.168.16.0/24", es posible Negar de 192.168.16.100?

He intentado añadir una instrucción Deny para 192.168.16.100 pero no funciona. Aquí es la config:

<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>

O:

<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>

Sin embargo, esto no impide el acceso a esta página en particular, como se ha demostrado en los registros de Acceso:

www.example.org 192.168.16.100 - - [11/Mar/2011:16:01:14 -0800] "GET /server-status HTTP/1.1" 200 9966 "-" "

De acuerdo con el manual para mod_authz_host:

Permitir,Denegar

En primer lugar, todas las directivas Allow son evaluados; por lo menos uno debe coincidir, o se rechaza la solicitud. Siguiente, todos se deniegan las directivas. Si alguno de los partidos, se rechaza la solicitud

La dirección IP coincide con la de Negar la directiva, por lo que no la solicitud de ser rechazado?

De acuerdo a la tabla en el mod_authz_host página, esta dirección IP debe "corresponder tanto Permitir Y Negar" y así, el "partido Final controles: Denegado" regla debe aplicarse.

 Partido Permitir,Denegar resultado Negar,Permitir el resultado
 Partido Permitir sólo a Petición permitido Solicitar permitido
 Partido sólo Denegar la Solicitud de la Solicitud denegada denegada
 Ningún partido Defecto a la segunda directiva: Denegado por Defecto a la segunda directiva: Permitido
 Coinciden ambos Permitir Y Denegar el partido Final de los controles: Denegado Final del partido controles: Permitido

36voto

phunehehe Puntos 431

Yo no lo he probado, pero creo que usted está casi allí.

<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 no es necesario. De hecho, ¡te equivocas porque todo va a coincidir all, y por lo tanto negó (y creo que Apache está tratando de ser inteligente y hacer algo estúpido). Siempre he encontrado Apache Order, Allow y Deny directivas confuso, así que siempre visualizar las cosas en una tabla (tomada de la documentación):

Partido | Permitir,Denegar resultado | Deny,Allow resultado
-------------------------------------------------------
Permitir sólo | Permitido | Permitidos
Sólo denegar | Denegado | Denegado
Ningún partido | Predeterminado: Denegado | Predeterminado: Permite
Partido | partido Final: Denegado | Final del partido: Permitido

Con la configuración anterior:

  • Las solicitudes de 192.168.16.100 obtener "Partido" y lo negó.
  • Las solicitudes de 192.168.16.12 obtener "Permitir", y por lo tanto permite.
  • Las solicitudes de 123.123.123.123 conseguir "No match" y lo negó.

1voto

Mike Puntos 714

Probablemente voy a mirar también la adición de reglas IPTables para que esto negar el único host en el puerto 80, deny from all, y permitir la subred.

Usted no debe tener ningún problema al configurar una regla de denegación de una dirección específica después de haber permitido la subred. Acabo de hacerlo en ese orden.

-4voto

John Puntos 539

Se puede utilizar php? Si es así añadir un php declaración a la salida/redirect para que una dirección IP específica

Ejemplo:

$deny = matriz("111.111.111", "222.222.222", "333.333.333");

if (in_array ($_SERVER['REMOTE_ADDR'], $negar))

{ header("location: http://www.google.com/");

exit();

Referencia: http://perishablepress.com/press/2007/07/03/how-to-block-ip-addresses-with-php/

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: