Alle verweigern, nur eine IP über htaccess zulassen

156

Ich versuche, alle zu verweigern und nur eine einzige IP zuzulassen. Ich möchte jedoch, dass der folgende Zugriff für diese einzelne IP funktioniert. Ich finde keinen Weg, beide zum Laufen zu bringen: Alle ablehnen und nur eine zulassen, plus die folgenden Optionen:

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

Gibt es eine Möglichkeit, diese Arbeit zu machen?

Punkbit
quelle

Antworten:

356
order deny,allow
deny from all
allow from <your ip> 
b101101011011011
quelle
95
HINWEIS! Apache reagiert empfindlich auf Leerzeichen in htaccess. Lassen Sie keinen Abstand zwischen Verweigern, Erlauben. Dh nicht schreiben, um zu verweigern, zu erlauben.
H. Rabiee
2
INFO: - es funktioniert auch für IPv6! allow from yourIPv6
Fügen Sie
Ist es in Nginx möglich?
shgnInc
10
Hinweis zu 2.4-Dokumenten : Die von mod_access_compat bereitgestellten Anweisungen Allow, Deny und Order sind veraltet und werden in einer zukünftigen Version nicht mehr angezeigt. Sie sollten die Verwendung vermeiden und veraltete Tutorials vermeiden, in denen ihre Verwendung empfohlen wird.
Martin Schneider
4
Wie @ MA-Maddin betonte, - dann sind mod_access_compat veraltet. Dieser Beitrag zeigt, wie in neueren Versionen vorgegangen wird. Und man sollte auch überlegen, ob der Server einen Proxy verwendet, da dieser dann die Proxy-IP für den Besucher anzeigen würde. Dieser Beitrag schlägt eine Lösung dafür vor.
Zeth
115

Ich weiß, dass diese Frage bereits eine akzeptierte Antwort hat, aber die Apache-Dokumentation sagt:

Die von mod_access_compat bereitgestellten Anweisungen Allow, Deny und Order sind veraltet und werden in einer zukünftigen Version nicht mehr angezeigt. Sie sollten sie vermeiden und veraltete Tutorials vermeiden, in denen ihre Verwendung empfohlen wird.

Eine zukunftssicherere Antwort wäre also:

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

Hoffentlich habe ich dazu beigetragen, dass diese Seite nicht zu einem dieser "veralteten Tutorials" wird. :) :)

Rok Sprogar
quelle
Wo legen wir unsere IP ab?
Gary Carlyle Cook
1
Gut gemacht! Diese Lösung sollte akzeptiert werden, da sie nicht nur funktioniert, sondern auch zeitdicht ist.
6opko
Die andere Antwort hat in meiner Situation nicht geholfen. Aber dieser tat es. Vielen Dank für die Aktualisierung eines alten Threads.
Johann Dyck
1
Das Beispiel dieser Antwort ermöglicht den Zugriff von zwei IPs? Um also mehrere IPs hinzuzufügen, setzen wir einfach ein Leerzeichen dazwischen? Können Sie Require ipmehrere Zeilen einfügen, um die Lesbarkeit zu verbessern, oder müssen sich alle IP-Adressen in einer Zeile befinden?
Hastig Zusammenstellen
Wenn Sie dies verwenden würden, wie würden Sie zu einer neuen temporären Seite umleiten, wie dies bei einigen Antworten der Fall war?
Rudtek
39

Dies kann durch Verwendung der für diese Aufgabe entwickelten Richtlinie verbessert werden.

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

Dabei ist 111.222.333.444 Ihre statische IP-Adresse.

Bei Verwendung der Direktive "Order Allow, Deny" müssen die Anforderungen entweder mit Allow oder Deny übereinstimmen. Wenn keine der beiden Anforderungen erfüllt ist, wird die Anforderung abgelehnt.

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

MickeyRoush
quelle
1
Wie füge ich eine benutzerdefinierte URL hinzu?
Sekundenblick
32

Leicht modifizierte Version des oben genannten, einschließlich einer benutzerdefinierten Seite, die denjenigen angezeigt werden soll, denen der Zugriff verweigert wird:

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

... und auf diese Weise wird für Anfragen, die nicht von 111.222.333.444 stammen, die Datei "large_page.html" angezeigt

(Dies als Kommentar zu posten sah schrecklich aus, weil neue Zeilen verloren gehen)

Oliver Maksimovic
quelle
Hallo. Ich habe genau den gleichen Code wie Sie in meinem .htaccess, aber es wird immer wieder ein 500-Fehler angezeigt. Die von mir angegebene Seite wird aufgerufen test.htmlund befindet sich im selben Ordner wie die .htaccess. Ich kann die Protokolle jedoch nicht sehen (vom Server nicht zulässig). Haben Sie eine Idee, warum ich dieses Problem haben könnte? Wenn ich den Pfad der Datei über einen FTP-Client erhalte, wird mir mitgeteilt, /test.htmldass der Pfad kein Problem darstellen sollte, oder?
Musterknabe
Der 500-Fehler tritt auch dann auf, wenn ich die Zeile mit dem Errordocument auskommentiert habe. Das sollte also nicht das Problem sein. Gibt es einen Grund, warum die anderen 3 Leitungen nicht funktionieren könnten? In meinem .htaccess habe ich drei weitere Zeilen, in denen ich Nicht-WWW zu WWW umleite, aber das war's. Aber ich bekomme auch den Fehler, wenn ich NUR die drei Zeilen mit Verweigern, Zulassen usw. habe
Musterknabe
Wie füge ich eine benutzerdefinierte URL hinzu?
Sekundenblick
8

Wenn Sie die vorherigen Antworten etwas weiter verbessern, kann Ihren Benutzern eine Wartungsseite angezeigt werden, während Sie Änderungen an der Site vornehmen:

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

Wo:

IvanRF
quelle
Wenn ich das ErrorDocument 403 verwende, wird ein zusätzlicher 403-Fehler für diese Datei "tenance.html "angezeigt, da sie auch nicht auf diese Datei zugreifen kann. Haben Sie eine Lösung dafür?
Zdravko Donev
3

Nur zusätzlich zu @David Browns Antwort müssen Sie, wenn Sie eine IP blockieren möchten, zuerst alle zulassen und dann die IPs als solche blockieren:

    <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

Sie können eine der oben genannten Notationen verwenden, um Ihren CIDR-Anforderungen gerecht zu werden.

Rafa Carvalhido
quelle
Vielen Dank, dies ist der richtige Weg, um mit Apache 2.4 umzugehen!
Aleksandar Pavić
2

In htaccess können Sie Folgendes verwenden, um den Zugriff auf Ihre Site zuzulassen und zu verweigern:

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

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

Wir setzen zuerst eine env-Variable allowip, wenn die Client-IP-Adresse mit dem Muster übereinstimmt. Wenn das Muster übereinstimmt, wird der env-Variablen allowip der Wert 1 zugewiesen .

Im nächsten Schritt verwenden wir die Anweisungen Zulassen, Verweigern, um den Zugriff auf die Site zuzulassen und zu verweigern. Order deny,allowrepräsentiert die Reihenfolge von denyund allow. deny from allDiese Zeile weist den Server an, alle zu verweigern. Die letzte Zeile allow from env=allowedipermöglicht den Zugriff auf eine einzelne IP-Adresse, für die wir die env-Variable festgelegt haben.

Ersetzen Sie 1\.2\.3\.4\.5durch Ihre erlaubte IP-Adresse.

Refrences:

Amit Verma
quelle
1
Was sind die Vorteile, wenn Sie dies anstelle von "Zulassen ab 324.234.22.1" verwenden?
Berry M.
2

Ich konnte die 403-Methode nicht verwenden, da ich die Wartungsseite und die Seitenbilder in einem Unterordner auf meinem Server haben wollte. Daher wurde der folgende Ansatz verwendet, um für alle außer einer einzelnen IP * zu einer "Wartungsseite" umzuleiten.

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

Quelle: Erstellen einer Halteseite, um Ihr WordPress-Blog auszublenden

METALFURY
quelle
Diese Lösung ist die einfachste - ich bevorzuge es
Gerfried
1

Sie können mehr als eine IP oder sogar eine andere Art von Erlaubnis haben, wie Benutzer, Hostname, ... weitere Informationen hier 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
Meloman
quelle
0

Wenn Sie mod_rewrite für die Zugriffssteuerung verwenden möchten, können Sie Bedingungen wie Benutzeragent, http-Verweis, Remote-Adresse usw. verwenden.

Beispiel

RewriteCond %{REMOTE_ADDR} !=*.*.*.* #you ip address
RewriteRule ^$ - [F]

Refrences:

Abhishek Gurjar
quelle
0

Fügen Sie den folgenden Befehl in die .htaccess-Datei ein. Und legen Sie diese Datei in Ihrem htdocs-Ordner ab.

Order Deny,Allow
Deny from all
Allow from <your ip> 
Allow from <another ip> 
Ramsha Omer
quelle
0
ErrorDocument 403 /maintenance.html
Order Allow,Deny
Allow from #:#:#:#:#:#

Für mich scheint dies zu funktionieren (IPv6 anstelle von IPv4 verwenden). Ich weiß nicht, ob dies für einige Websites anders ist, aber für meine funktioniert dies.

TigerMANEK426
quelle