Apache 2.4 - 如何限制除基本路径之外的所有请求的流量(通过 IP 地址)?

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 地址(为了本示例的目的,该 IP 地址为192.168.33.1)的请求。

复杂的是,无论请求来自哪个 IP,我都希望以 200 进行响应www.example.comwww.example.com/index.php

我的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>

这部分是有效的,因为它允许使用 来响应来自任何请求 IP 地址的200请求,但是它错误地使用 来响应所有其他请求,即使是从白名单 IP 地址发出的请求:www.example.comwww.example.com/index.php403

$ 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 配置进行哪些更改?

答案1

您的配置看起来不错 - 如果配置更改尚未生效,请尝试重新加载 Apache。

答案2

这是因为您插入的LocationMatch只是为了index.phpLocationMatch可以像正则表达式一样定义,因此您可以尝试为所需的所有文件添加正则表达式。

类似于:

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

相关内容