Apache 2.4 - Como restringir o tráfego (por endereço IP) para todas as solicitações, exceto o caminho base?

Apache 2.4 - Como restringir o tráfego (por endereço IP) para todas as solicitações, exceto o caminho base?

Eu tenho uma coleção de scripts de depuração que /var/wwwexibem informações úteis que ajudam a investigar problemas no servidor, no entanto, essas mesmas informações são potencialmente confidenciais, por isso não as quero disponíveis publicamente.

O DocumentRootis /var/www/, que se parece com isto:

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

Para proteger essas informações, estou tentando configurar o Apache para aceitar apenas solicitações do meu endereço IP (que, neste exemplo, é 192.168.33.1).

A complicação é que quero que as solicitações www.example.comsejam www.example.com/index.phprespondidas com 200, independentemente do IP de onde elas se originam.

Minha status.confconfiguração de host virtual atualmente se parece com isto:

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>

Isso está funcionando parcialmente, pois permite responder 200a solicitações de www.example.come www.example.com/index.phppara qualquer endereço IP de solicitação, mas está respondendo incorretamente a 403todas as outras solicitações, mesmo quando solicitado do endereço IP da lista de permissões:

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

Que mudanças preciso fazer na configuração do Apache para obter o comportamento desejado?

Responder1

Sua configuração parece boa - tente recarregar o Apache caso haja uma alteração na configuração que não tenha entrado em vigor.

Responder2

Isso porque você está inserindo o LocationMatchjust for index.php. LocationMatchpode ser definido como um regexp, então você pode tentar adicionar uma expressão regular para todos os arquivos necessários.

Algo como:

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

informação relacionada