web-dev-qa-db-ja.com

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

14
Denis Rendler

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

<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のドキュメントから)

4
ansi_lumen

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>

お役に立てれば!

23
Linztm

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ドキュメント https://httpd.Apache.org/docs/2.4/mod/mod_authz_core.html#requireany

2
MontyThreeCard