Apache 2.4 restringe la URL a ciertas IP


14

Estoy tratando de restringir una URL específica para que esté disponible fuera de la red solo a direcciones IP específicas. Cuando un usuario externo intenta acceder a esa URL y no desde la lista de IP, debe ser redirigido a la página de inicio.

Esto es lo que he intentado hasta ahora sin suerte. La última parte redirige a todos a la página de inicio independientemente de la IP.

<Location "/secret">
#    <If "%{REMOTE_ADDR} != -ipmatch '123.123.123.123/255.255.255.255'">
#    Redirect 303 "/secret" /
#    </If>

RewriteCond "%{REMOTE_ADDR}" "!123\.123\.123\.123"
RewriteRule .* / [R,L]

LogLevel debug rewrite:trace6
</Location>

PD: la URL / secret es, de hecho, una URL virtual y no existe físicamente en la unidad.


Si las declaraciones están comentadas? Habilitar reescritura - RewriteEngine On?
user9517

La declaración <If> es una versión que probé. La directiva RewriteEngine On se declaró anteriormente. Esa es la razón por la que redirige a todos
Denis Rendler

1
Creo que debería desmarcar la respuesta seleccionada, porque no es válida para Apache 2.4 como solicitó (da información incorrecta a las personas que pasan)
Erenor Paz

Respuestas:


4

Utilizar Order, Denyy allowpara especificar quién tiene acceso a su host virtual o la ubicación.

<VirtualHost *:80>
    ServerName example.net
    DocumentRoot /docroot

    <Directory "/docroot">
        Order Deny,Allow
        Deny from all
        Allow from 10.10.10.10
        Allow from 10.10.11.0/24
    </Directory>   
</VirtualHost>

Cuando se trata de redireccionar, piense en una página de error personalizada . Esto es mucho más general, porque cada acceso no autorizado debe provocar un error 403 y, por lo tanto, puede evaluarse fácilmente.

Nunca hice esto con apache, pero uso esta estrategia con nginx. Para apache, algo como esto debería hacer:

ErrorDocument 403 http://homepage.example.com

Los documentos de error personalizados se configuran utilizando la directiva ErrorDocument, que se puede usar en contexto global, virtualhost o de directorio. Se puede usar en archivos .htaccess si AllowOverride está configurado en FileInfo. (de los documentos de apache)


2
Esto parece un conjunto de configuración Apache httpd 2.2. ¿Seguirá funcionando con 2.4?
user9517

Al menos la ErrorDocumentparte es de los 2.4 documentos. No uso apache, ya que nginx está cerca, pero asumí eso Order, Denyy Allowtodavía están en apache 2.4
ansi_lumen

Gracias, pero no ayudo. Olvidé mencionar, pero actualicé la pregunta, la URL / secret es de hecho una URL virtual y no existe físicamente en el disco. La URL en sí misma es una reescritura de index.php, por eso utilicé la directiva <Location>.
Denis Rendler

44
Esta sintaxis está en desuso en apache 2.4
Luca Reghellin

1
¿Por qué es esta la respuesta aceptada? Esto es para Apache 2.2 no 2.4 como la pregunta implica ... Esto no funcionará.
Jeremy

23

Las opciones Ordenar, Denegar y Permitir se han reemplazado en Apache 2.4 con

<Directory /var/www/mysite.com/htdocs/public>
    Require all granted
</Directory>

Puede restringir explícitamente las direcciones mediante el uso de lo siguiente:

<Directory /var/www/mysite.com/htdocs/public>
    Require all granted
    Require not ip 192.168.0.1
</Directory>

Lo opuesto exacto también es cierto, para restringir todo y solo permitir un subconjunto use lo siguiente:

<Directory /var/www/mysite.com/htdocs/public>
    Require host example.com
    Require ip 192.168.0.1
</Directory>

Hay más información disponible en la documentación de control de acceso de Apache 2.4.

En lo que respecta a su pregunta (editado la mía debido a la falta de puntos para agregar un comentario), debería poder simplemente establecer un ErrorDocument con el índice establecido como la ruta URL:

<Directory /var/www/mysite.com/htdocs/public>
    Require host example.com
    Require ip 192.168.0.1
    ErrorDocument 401 /index.html
</Directory>

¡Espero que esto ayude!


Gracias, @Linztm! Pero esto resuelve solo parcialmente mi problema. No solo quiero bloquear al usuario, sino también redirigirlo a la página de inicio.
Denis Rendler

Parece estar funcionando con la directiva ErrorDocument solo si proporciono la URL completa, incluido el dominio y el protocolo. Investigaré más a fondo. Gracias.
Denis Rendler

Encontré al menos un caso en el que necesita usar allowaunque está en desuso, Require 127.0.0.1 todavía permitir el acceso por dirección externa desde la máquina local, mientras que la sintaxis de permitir solo permite desde 127 direcciones.
Alexei Martianov

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.