Apache 2.4 は URL を特定の IP に制限します

Apache 2.4 は URL を特定の IP に制限します

特定の URL をネットワーク外部から特定の IP アドレスのみにアクセスできるように制限しようとしています。外部のユーザーが IP リストからではなくその URL にアクセスしようとすると、ホームページにリダイレクトされる必要があります。

これは私がこれまで試してきたことですが、うまくいきませんでした。最後の部分では、IP に関係なく、全員をホームページにリダイレクトします。

<Location "/secret">
#    <If "%{REMOTE_ADDR} != -ipmatch '123.123.123.123/255.255.255.255'">
#    Redirect 303 "/secret" /
#    </If>

RewriteCond "%{REMOTE_ADDR}" "!123\.123\.123\.123"
RewriteRule .* / [R,L]

LogLevel debug rewrite:trace6
</Location>

PS: /secret URL は実際には仮想 URL であり、ドライブ上に物理的に存在しません。

答え1

Require [ip|host|env]仮想ホストまたは場所にアクセスできるユーザーを指定するために使用します。

    <Directory "/docroot">
        Require ip 10.10.11.12
    </Directory>   

リダイレクトに関しては、カスタムエラーページこれは、すべての不正アクセスが 403 エラーを引き起こすため、簡単に評価できるため、より一般的です。

私は Apache ではこれをやったことはありませんが、この戦略を nginx で使います。Apache の場合は、次のようにすればよいでしょう:

ErrorDocument 403 http://homepage.example.com

カスタム エラー ドキュメントは、ErrorDocument ディレクティブを使用して構成されます。これは、グローバル、仮想ホスト、またはディレクトリ コンテキストで使用できます。AllowOverride が FileInfo に設定されている場合は、.htaccess ファイルで使用できます。(Apache ドキュメントより)

答え2

Order、Deny、AllowオプションはApache 2.4で次のように置き換えられました。

<Directory /var/www/mysite.com/htdocs/public>
    Require all granted
</Directory>

以下の方法を使用して、アドレスを明示的に制限できます。

<Directory /var/www/mysite.com/htdocs/public>
    Require all granted
    Require not ip 192.168.0.1
</Directory>

正反対の場合も同様で、すべてを制限してサブセットのみを許可するには、次のようにします。

<Directory /var/www/mysite.com/htdocs/public>
    Require host example.com
    Require ip 192.168.0.1
</Directory>

詳細は以下をご覧ください。Apache 2.4 アクセス制御のドキュメント。

あなたの質問に関して (コメントを追加するポイントが不足していたため、私自身の質問を編集しました)、インデックスを URL パスとして設定した ErrorDocument を設定するだけで済むはずです。

<Directory /var/www/mysite.com/htdocs/public>
    Require host example.com
    Require ip 192.168.0.1
    ErrorDocument 401 /index.html
</Directory>

お役に立てれば!

答え3

Apache 2.4 の場合、<RequireAny> を使用できます。これは、vhost または .htaccess ファイルで実行できます。

SetEnvIF IP xxx.xxx.xxx.xxx AllowThisIP  # Or X-Real-IP
SetEnvIF IP yyy.yyy.yyy.yyy AllowThisIP
<RequireAny>
  Require env AllowThisIP
  Require host example.com
</RequireAny>

Apache ドキュメント詳細は、httpd.apache.org/docs/2.4/mod/mod_authz_core.html を参照してください。

関連情報