Apache 2.4 restringe la URL a ciertas IP

Apache 2.4 restringe la URL a ciertas IP

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

Esto es lo que he probado 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 el disco.

Respuesta1

Úselo Require [ip|host|env]para especificar quién tiene acceso a su vhost o ubicación.

    <Directory "/docroot">
        Require ip 10.10.11.12
    </Directory>   

Cuando se trata de redirigir, piense en unapágina de error personalizada. Esto es mucho más general, porque todo acceso no autorizado debería provocar un error 403 y, por tanto, puede evaluarse fácilmente.

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

ErrorDocument 403 http://homepage.example.com

Los documentos de error personalizados se configuran mediante la directiva ErrorDocument, que puede usarse en un contexto global, de host virtual o de directorio. Puede usarse en archivos .htaccess si AllowOverride está configurado en FileInfo. (de los documentos de Apache)

Respuesta2

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 contrario también es cierto: para restringir todo y permitir solo un subconjunto, utilice lo siguiente:

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

Más información está disponible en elDocumentación de control de acceso de Apache 2.4.

Con respecto a su pregunta (editada por la mía debido a la falta de puntos para agregar un comentario), debería poder simplemente configurar un ErrorDocument con el índice configurado 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!

Respuesta3

Para Apache 2.4, puede utilizar <RequireAny>. Puedes hacerlo en un vhost o en un archivo .htaccess....

SetEnvIF IP xxx.xxx.xxx.xxx AllowThisIP  # Or X-Real-IP
SetEnvIF IP yyy.yyy.yyy.yyy AllowThisIP
<RequireAny>
  Require env AllowThisIP
  Require host example.com
</RequireAny>

documentos apachehttps://httpd.apache.org/docs/2.4/mod/mod_authz_core.html#requireany

información relacionada