%20%E3%82%92%E5%88%B6%E9%99%90%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%97%E3%82%87%E3%81%86%E3%81%8B%3F.png)
サーバー上の問題の調査に役立つ有用な情報を表示するデバッグ スクリプトのコレクションがあります/var/www
が、その情報は機密情報である可能性があるため、公開したくありません。
はDocumentRoot
であり/var/www/
、次のようになります。
$ ls -1 /var/www/
apc.php
index.php
linux-dash
opcache.php
phpinfo.php
この情報を保護するために、自分の IP アドレス (この例では192.168.33.1
) からのリクエストのみを受け入れるように Apache を設定しようとしています。
複雑なのは、リクエストの発信元 IP に関係なく、リクエストに対して 200 で応答するwww.example.com
必要があることです。www.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.com
www.example.com/index.php
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
から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.php
。LocationMatch
正規表現のように定義できるため、必要なすべてのファイルに正規表現を追加することができます。
たとえば次のようなものです:
<LocationMatch ^/(index.php|phpinfo.php|opcache.php)?$>
Require all granted
</LocationMatch>