Apache 2.4 - Как ограничить трафик (по IP-адресу) для всех запросов, кроме базового пути?

У меня есть коллекция сценариев отладки в /var/www которые отображают полезную информацию, которая помогает исследовать проблемы на сервере, однако эта информация потенциально конфиденциальна, поэтому я не хочу, чтобы она была общедоступной.

DocumentRoot является /var/www/, который выглядит так:

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

Чтобы защитить эту информацию, я пытаюсь настроить apache для приема запросов только с моего IP-адреса (который в этом примере 192.168.33.1).

Сложность в том, что я хочу запросы www.example.com а также www.example.com/index.php ответить с 200 независимо от того, с какого IP они происходят.

мой status.conf Конфигурация виртуального хоста в настоящее время выглядит следующим образом:

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>

Это частично работает, так как позволяет ответить 200 на запросы к www.example.com а также www.example.com/index.php с любого IP-адреса запроса, однако он неправильно отвечает 403 ко всем остальным запросам, даже когда они запрашиваются с белого IP-адреса:

$ 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

От 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"

Какие изменения мне нужно внести в мою конфигурацию Apache, чтобы добиться желаемого поведения?

2 ответа

Ваша конфигурация выглядит хорошо - попробуйте перезагрузить Apache на случай, если изменение конфигурации не вступило в силу.

Это потому, что вы вставляете LocationMatch Просто для index.php, LocationMatch может быть определен как регулярное выражение, так что вы можете попытаться добавить регулярное выражение для всех файлов, которые вам понадобятся.

Что-то вроде:

<LocationMatch ^/(index.php|phpinfo.php|opcache.php)?$>
        Require all granted
</LocationMatch>
Другие вопросы по тегам