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>