すべてを拒否し、htaccessを介して1つのIPのみを許可する


156

すべてを拒否し、単一のIPのみを許可しようとしています。しかし、私はその単一のIPに対して次のhtaccessを機能させたいと思います。私は両方を機能させる方法を見つけていません:すべてを拒否し、1つだけを許可し、さらに次のオプションを許可します。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    #Removes access to the system folder by users.
    #Additionally this will allow you to create a System.php controller,
    #previously this would not have been possible.
    #'system' can be replaced if you have renamed your system folder.
    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    #When your application folder isn't in the system folder
    #This snippet prevents user access to the application folder
    #Submitted by: Fabdrol
    #Rename 'application' to your applications folder name.
    RewriteCond %{REQUEST_URI} ^application.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    #Checks to see if the user is attempting to access a valid file,
    #such as an image or css document, if this isn't true it sends the
    #request to index.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>

<IfModule !mod_rewrite.c>
    # If we don't have mod_rewrite installed, all 404's
    # can be sent to index.php, and everything works as normal.
    # Submitted by: ElliotHaughin

    ErrorDocument 404 /index.php
</IfModule>

これを機能させる方法はありますか?

回答:


356
order deny,allow
deny from all
allow from <your ip> 

95
注意!Apacheはhtaccessのスペースに敏感です。拒否、許可の間にスペースを入れないでください。つまり、注文拒否、許可を記述しないでください。
H.Rabiee 2013年

2
情報:-IPv6でも動作します!次の行を追加してくださいallow from yourIPv6
jave.web 2013年

nginxでそれは可能ですか?
shgnInc 2013

10
2.4 docsに関する注意mod_access_compatによって提供されるAllow、Deny、およびOrde​​rディレクティブは非推奨であり、将来のバージョンではなくなる予定です。それらの使用は避け、古いチュートリアルでの使用を推奨しないでください。
Martin Schneider

4
@ MA-Maddinが指摘したように、-mod_access_compatは非推奨です。この郵便受けは、新しいバージョンで行う方法を示しています。また、サーバーがプロキシを使用している場合は、ビジターのプロキシIPが表示されるため、検討する必要があります。この投稿はその解決策を提案しています。
Zeth

115

この質問にはすでに受け入れられた回答があることは知っていますが、Apacheのドキュメントには次のように記載されています。

mod_access_compatによって提供されるAllow、Deny、およびOrde​​rディレクティブは非推奨であり、将来のバージョンではなくなる予定です。それらの使用は避け、古いチュートリアルでの使用を推奨しないでください。

したがって、より将来性のある答えは次のとおりです。

<RequireAll>
    Require ip xx.xx.xx.xx yy.yy.yy.yy
</RequireAll>

うまくいけば、私はこのページがこれらの「古いチュートリアル」の1つになることを防ぐ手助けをしてくれました。:)


IPはどこに置くのですか?
ゲイリーカーライルクック

1
行くぞ!これは機能しているだけでなく、耐時間性も備えているため、受け入れられるソリューションである必要があります。
6opko

他の答えは私の状況では役に立ちませんでした。しかし、これはしました。古いスレッドを更新していただきありがとうございます。
ヨハン

1
この回答の例では、2つのIPからのアクセスを許可していますか?それで、複数のIPを追加するには、それらの間にスペースを置くだけですか?Require ipより読みやすくするために複数の行を入れることはできますか、またはすべてのIPを1行にする必要がありますか?
Hastig Zusammenstellen 2018

これを使用した場合、回答の一部が行ったように、新しい一時ページにどのようにリダイレクトしますか?
rudtek、2018

39

これは、そのタスク用に設計されたディレクティブを使用することで改善できます。

ErrorDocument 403 /specific_page.html
Order Allow,Deny
Allow from 111.222.333.444

ここで、111.222.333.444は静的IPアドレスです。

「Order Allow、Deny」ディレクティブを使用する場合、要求はAllowまたはDenyのいずれかに一致する必要があります。どちらも満たされない場合、要求は拒否されます。

http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html#order


1
カスタムuRLを追加する方法
secondsight

32

アクセスを拒否されたユーザーに表示されるカスタムページを含む、上記のわずかに変更されたバージョン:

ErrorDocument 403 /specific_page.html
order deny,allow
deny from all
allow from 111.222.333.444

...そのようにして、111.222.333.444から送信されていないリクエストには、specific_page.htmlが表示されます

(コメントとしてこれを投稿すると、新しい行が失われるため、ひどく見えました)


こんにちは。私の.htaccessとまったく同じコードがありますが、500エラーが発生し続けます。指定したページが呼び出さtest.htmlれ、と同じフォルダにあり.htaccessます。ただし、ログが表示されません(サーバーからは許可されていません)。なぜ私がその問題を抱えることができたのか、何か考えがありますか?FTPクライアント経由でファイルのパスを取得すると、パスが/test.html問題にならないように通知されます。
Musterknabe

また、エラードキュメントがコメント化された行がある場合でも、500エラーが発生します。だからそれは問題ではないはずです。他の3行が機能しない理由はありますか?私の.htaccessには、さらに3行あります。ここでは、非wwwをwwwにリダイレクトしていますが、それだけです。しかし、拒否、許可などの3行しかない場合にもエラーが発生します
Musterknabe

カスタムURLを追加する方法
secondsight '25

8

以前の回答をもう少し改善して、サイトに変更を加えている間、ユーザーにメンテナンスページを表示できます。

ErrorDocument 403 /maintenance.html
Order Allow,Deny
Allow from #.#.#.#

どこ:


ErrorDocument 403を使用すると、maintenance.htmlファイルにはアクセスできないため、追加の403エラーが発生します。その解決策はありますか?
Zdravko Donev

3

@David Brownの回答に加えて、IPをブロックする場合は、まずすべてを許可してから、IPをブロックする必要があります。

    <RequireAll>
      Require all granted
      Require not ip 10.0.0.0/255.0.0.0
      Require not ip 172.16.0.0/12
      Require not ip 192.168
    </RequireAll>

First line allows all
Second line blocks from 10.0.0.0 to 10.255.255.255
Third line blocks from 172.16.0.0 to 172.31.255.255
Fourth line blocks from 192.168.0.0 to 192.168.255.255

CIDRのニーズに合わせて、上記の表記を使用できます。


ありがとう、これはApache 2.4に対処する適切な方法です!
AleksandarPavić

2

htaccessで以下を使用して、サイトへのアクセスを許可および拒否できます。

SetEnvIf remote_addr ^1\.2\3\.4\.5$ allowedip=1

Order deny,allow
deny from all
allow from env=allowedip

クライアントのIPアドレスがパターンに一致する場合、最初に環境変数allowedipを設定します。パターンが一致する場合、環境変数allowedipには値1が割り当てられます。

次のステップでは、Allow、denyディレクティブを使用して、サイトへのアクセスを許可および拒否します。 およびOrder deny,allowの順序を表します。この行は、サーバーに全員を拒否するように指示します。最後の行で は、env変数を設定した単一のIPアドレスにアクセスできます。denyallowdeny from allallow from env=allowedip

1\.2\.3\.4\.5許可されたIPアドレスに置き換えます。

屈折:


1
Allow From 324.234.22.1の代わりにこれを使用する利点は何ですか?
Berry M.

2

サーバーのサブフォルダーにメンテナンスページとページ画像が必要なため、403メソッドを使用できませんでした。そのため、次のアプローチを使用して、単一のIPを除くすべてのユーザーの「メンテナンスページ」にリダイレクトしました*

RewriteEngine on
RewriteCond %{REMOTE_ADDR} !**.**.**.*
RewriteRule !^maintenance/ http://www.website.co.uk/maintenance/ [R=302,L]

出典:WordPressブログを非表示にする保留ページを作成する


私はそれを好む-このソリューションは、最も単純である
Gerfried

1

複数のIPを使用することも、ユーザー、ホスト名などのその他の種類の許可を使用することもできます。詳細はこちらhttps://www.askapache.com/htaccess/setenvif/

SetEnvIf remote_addr ^123.123.123.1$ allowedip=1
SetEnvIf remote_addr ^123.123.123.2$ allowedip=1
SetEnvIf remote_addr ^123.123.123.3$ allowedip=1
SetEnvIf remote_addr ^123.123.123.4$ allowedip=1

Order deny,allow
deny from all
allow from env=allowedip


0

.htaccessファイルに次のコマンドを追加します。そして、そのファイルをhtdocsフォルダに置きます。

Order Deny,Allow
Deny from all
Allow from <your ip> 
Allow from <another ip> 

0
ErrorDocument 403 /maintenance.html
Order Allow,Deny
Allow from #:#:#:#:#:#

私にとって、これは機能するようです(IPv4ではなくIPv6を使用)。これが一部のWebサイトで異なるかどうかはわかりませんが、私の場合は機能します。

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