%20auf%20alle%20Anfragen%20au%C3%9Fer%20dem%20Basispfad%20beschr%C3%A4nkt%20werden%3F.png)
Ich verfüge über eine Sammlung von Debugging-Skripten, /var/www
die 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 DocumentRoot
ist /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.com
unabhängig www.example.com/index.php
davon, von welcher IP sie stammen.
Meine status.conf
virtuelle 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 200
auf Anfragen an www.example.com
und von jeder beliebigen IP-Anfrageadresse mit einem geantwortet werden kann. Auf alle anderen Anfragen www.example.com/index.php
wird 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
LocationMatch
Das liegt daran, dass Sie nur für einfügen index.php
. LocationMatch
Kann 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>