Apache 2.4: ¿Cómo restringir el tráfico (por dirección IP) a todas las solicitudes excepto a la ruta base?

Apache 2.4: ¿Cómo restringir el tráfico (por dirección IP) a todas las solicitudes excepto a la ruta base?

Tengo una colección de scripts de depuración que /var/wwwmuestran información útil que ayuda a investigar problemas en el servidor; sin embargo, esa misma información es potencialmente confidencial, por lo que no quiero que esté disponible públicamente.

El DocumentRootes /var/www/, que se parece a esto:

$ ls -1 /var/www/
apc.php
index.php
linux-dash
opcache.php
phpinfo.php

Para proteger esta información, estoy intentando configurar Apache para que solo acepte solicitudes de mi dirección IP (que, por el bien de este ejemplo, es 192.168.33.1).

La complicación es que quiero que las solicitudes www.example.comrespondan www.example.com/index.phpcon un 200 independientemente de qué IP se originen.

Mi status.confconfiguración de host virtual actualmente se ve así:

ServerName      www.example.com

<VirtualHost *:80>
    ServerName      www.example.com

    DocumentRoot    /var/www
    <Directory      /var/www>
        Options FollowSymLinks
        AllowOverride All
        Require ip 192.168.33.1
    </Directory>

    <LocationMatch ^/(index.php)?$>
        Require all granted
    </LocationMatch>

    <Location /server-status>
        SetHandler server-status
    </Location>
</VirtualHost>

Esto funciona parcialmente, ya que permite responder con un 200a las solicitudes hacia www.example.comy www.example.com/index.phpdesde cualquier dirección IP de solicitud; sin embargo, responde incorrectamente con un 403a todas las demás solicitudes, incluso cuando se solicitan desde la dirección IP incluida en la lista blanca:

$ curl -I -H 'Host: www.example.com' 192.168.33.10
HTTP/1.1 200 OK

$ curl -I -H 'Host: www.example.com' 192.168.33.10/index.php
HTTP/1.1 200 OK

$ curl -I -H 'Host: www.example.com' 192.168.33.10/phpinfo.php
HTTP/1.1 403 Forbidden

$ curl -I -H 'Host: www.example.com' 192.168.33.10/opcache.php
HTTP/1.1 403 Forbidden

$ curl -I -H 'Host: www.example.com' 192.168.33.10/server-status
HTTP/1.1 403 Forbidden

De access.log:

192.168.33.1 - - [15/Jun/2015:09:59:13 +0000] "HEAD / HTTP/1.1" 200 148 "-" "curl/7.37.1"
192.168.33.1 - - [15/Jun/2015:09:59:32 +0000] "HEAD /index.php HTTP/1.1" 200 148 "-" "curl/7.37.1"
192.168.33.1 - - [15/Jun/2015:09:59:47 +0000] "HEAD /phpinfo.php HTTP/1.1" 403 139 "-" "curl/7.37.1"
192.168.33.1 - - [15/Jun/2015:10:00:03 +0000] "HEAD /opcache.php HTTP/1.1" 403 139 "-" "curl/7.37.1"
192.168.33.1 - - [15/Jun/2015:10:00:22 +0000] "HEAD /server-status HTTP/1.1" 403 139 "-" "curl/7.37.1"

¿Qué cambios necesito hacer en mi configuración de Apache para lograr el comportamiento deseado?

Respuesta1

Su configuración se ve bien; intente recargar Apache en caso de que haya un cambio de configuración que no haya surtido efecto.

Respuesta2

Eso es porque estás insertando LocationMatchjust for index.php. LocationMatchse puede definir como una expresión regular, por lo que puede intentar agregar una expresión regular para todos los archivos que necesite.

Algo como:

<LocationMatch ^/(index.php|phpinfo.php|opcache.php)?$>
        Require all granted
</LocationMatch>

información relacionada