特定のIPアドレスからDrupal 7登録ページ(/ user/register)へのアクセスを制限したい。
Apacheディレクティブを設定しようとしましたが、指定されていないIPからまだアクセスできます。
ここに私のバーチャルホストディレクティブのスニペットがあります
<VirtualHost *:80>
DocumentRoot /var/www/html
ServerName ######
ServerAlias ######
ErrorLog logs/######-error_log
CustomLog logs/######-access_log combined
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://######%{REQUEST_URI}?%{QUERY_STRING} [R=301,L]
<Location /user/register>
Order deny,allow
Deny from all
Allow from ***.***.***.***
</Location>
</VirtualHost>
すべての要求をHTTPS(デフォルトではポート443)にリダイレクトしていますが、<Location>
ディレクティブは<VirtualHost *:80>
コンテナー(ポート80-HTTP)にあります。
余談ですが、リソースを複数のURLでアクセスして制限を回避することが多いため、アクセス制限には<Location>
ディレクティブをお勧めしません。 (たとえば、書き換えられたURLもブロックされていることを確認する必要があります。)
RewriteRule
置換に?%{QUERY_STRING}
も必要ありません。クエリ文字列はデフォルトで追加されます。
試してみることができるいくつかのことがありますが、最も簡単なものから始めます。
<VirtualHost *:443>
DocumentRoot /var/www/html
ServerName ######
ServerAlias ######
ErrorLog logs/######-error_log
CustomLog logs/######-access_log combined
<Location /user/register>
Order deny,allow
Deny from all
Allow from ***.***.***.***
</Location>
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/html
ServerName ######
ServerAlias ######
ErrorLog logs/######-error_log
CustomLog logs/######-access_log combined
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://######%{REQUEST_URI}?%{QUERY_STRING} [R=301,L]
<Location /user/register>
Order deny,allow
Deny from all
Allow from ***.***.***.***
</Location>
</VirtualHost>
基本的に、HTTPSの仮想ホストコンテナーにすべてをコピーして、HTTPとHTTPSの両方に設定が適用されるようにしました。
もう1つのオプションは、保護するドキュメントを提供するスクリプトの内容を変更して、受け入れられないIPアドレスからのアクセスをブロックすることです。
PHPの場合、<?php
の直下に次の行を追加できます。
If ($_SERVER['REMOTE_ADDR'] != "xxx.xxx.xxx.xxx"){echo "Access denied";exit();}
Xxx.xxx.xxx.xxxを、受け入れるIPアドレスに置き換えます。代わりに2つのIPアドレスが必要な場合は、次の行を追加できます。
If ($_SERVER['REMOTE_ADDR'] != "xxx.xxx.xxx.xxx" && $_SERVER['REMOTE_ADDR'] != "yyy.yyy.yyy.yyy"){echo "Access denied";exit();}