Apache 2.4 – Wie kann der Datenverkehr (nach IP-Adresse) auf alle Anfragen außer dem Basispfad beschränkt werden?

Apache 2.4 – Wie kann der Datenverkehr (nach IP-Adresse) auf alle Anfragen außer dem Basispfad beschränkt werden?

Ich verfüge über eine Sammlung von Debugging-Skripten, /var/wwwdie nützliche Informationen anzeigen, die bei der Untersuchung von Problemen auf dem Server hilfreich sind. Da diese Informationen jedoch möglicherweise vertraulich sind, möchte ich sie nicht öffentlich zugänglich machen.

Das DocumentRootist /var/www/, das wie folgt aussieht:

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

Um diese Informationen zu sichern, versuche ich, Apache so zu konfigurieren, dass nur Anfragen von meiner IP-Adresse akzeptiert werden (die in diesem Beispiel lautet 192.168.33.1).

Die Komplikation besteht darin, dass ich Anfragen mit einer 200 beantworten möchte, www.example.comunabhängig www.example.com/index.phpdavon, von welcher IP sie stammen.

Meine status.confvirtuelle Hostkonfiguration sieht derzeit folgendermaßen aus:

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>

Dies funktioniert teilweise, da 200auf Anfragen an www.example.comund von jeder beliebigen IP-Anfrageadresse mit einem geantwortet werden kann. Auf alle anderen Anfragen www.example.com/index.phpwird jedoch fälschlicherweise mit einem geantwortet, selbst wenn sie von der Whitelist-IP-Adresse stammen:403

$ 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

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

Welche Änderungen muss ich an meiner Apache-Konfiguration vornehmen, um das gewünschte Verhalten zu erreichen?

Antwort1

Ihre Konfiguration sieht gut aus. Versuchen Sie, Apache neu zu laden, falls eine Konfigurationsänderung nicht wirksam wurde.

Antwort2

LocationMatchDas liegt daran, dass Sie nur für einfügen index.php. LocationMatchKann wie ein regulärer Ausdruck definiert werden. Sie können also versuchen, einen regulären Ausdruck für alle benötigten Dateien hinzuzufügen.

So etwas wie:

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

verwandte Informationen