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


13

特定の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であり、ドライブ上に物理的に存在しません。


Ifステートメントはコメント化されていますか?書き換えを有効にする- RewriteEngine On
user9517

<If>ステートメントは、私が試したバージョンの1つです。RewriteEngine Onディレクティブは以前に宣言されています。それが全員をリダイレクトする理由です
デニスレンドラー

1
選択した回答のマークを
外す

回答:


3

およびを使用してOrder、vhostまたは場所にアクセスできるユーザーを指定します。Denyallow

<VirtualHost *:80>
    ServerName example.net
    DocumentRoot /docroot

    <Directory "/docroot">
        Order Deny,Allow
        Deny from all
        Allow from 10.10.10.10
        Allow from 10.10.11.0/24
    </Directory>   
</VirtualHost>

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

私はこれをApacheで行ったことはありませんが、nginxでこの戦略を使用します。このようなapacheの場合、次のようにする必要があります。

ErrorDocument 403 http://homepage.example.com

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


2
これは、一連のApache httpd 2.2構成のように見えます。2.4でも動作しますか?
user9517

少なくともErrorDocument一部は2.4ドキュメントからです。私はnginxの周りであることから、Apacheを使用し、それを想定していないOrderDenyAllowのApache 2.4にまだ残っている
ansi_lumen

感謝しますが、私は助けません。言及するのを忘れましたが、質問を更新しました。/secretURLは実際には仮想URLであり、ドライブ上に物理的には存在しません。それ自体のURLはindex.phpからの書き換えであるため、<Location>ディレクティブを使用しました。
デニスレンドラー

4
この構文は、Apache 2.4で廃止されました
ルカReghellin

1
なぜこれが受け入れられた答えですか?これは、問題が示唆するように、Apache 2.2ではなく2.4です。これは機能しません。
ジェレミー

22

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

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

お役に立てれば!


ありがとう、@ Linztm!しかし、これは私の問題を部分的にしか解決しません。ユーザーをブロックするだけでなく、ユーザーをホームページにリダイレクトする必要もありません。
デニスレンドラー

ドメインとプロトコルを含む完全なURLを指定した場合にのみ、ErrorDocumentディレクティブで動作しているようです。さらに調査します。ありがとう。
デニスレンドラー

allow非推奨ですが、Require 127.0.0.1 ローカルマシンからの外部アドレスによるアクセスを許可する必要がある場合、少なくとも1つのケースが見つかりました。許可構文は127アドレスからのみ許可します。
アレクセイ・マルティアノフ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.