I have a collection of debugging scripts in /var/www
that display useful information that helps with investigating issues on the server, however that same information is potentially sensitive, so I do not want it publicly available.
The DocumentRoot
is /var/www/
, which looks like this:
$ ls -1 /var/www/
apc.php
index.php
linux-dash
opcache.php
phpinfo.php
To secure this information I'm trying to configure apache to only accept requests from my IP address (which for the sake of this example is 192.168.33.1
).
The complication is that I want requests to www.example.com
and www.example.com/index.php
to respond with a 200 regardless of which IP they originate from.
My status.conf
virtual host config currently looks like this:
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>
This is partially working, as it's allowing responding with a 200
to requests to www.example.com
and www.example.com/index.php
from any request IP address, however it's incorrectly responding with a 403
to all other requests even when requested from the whitelisted IP address:
$ 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
From 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"
What changes do I need to make to my Apache config in order to achieve the desired behaviour?