Refuser tout, n'autoriser qu'une seule adresse IP via htaccess

156

J'essaie de tout nier et de ne permettre qu'une seule adresse IP. Mais j'aimerais que le htaccess suivant fonctionne pour cette seule adresse IP. Je ne trouve pas un moyen de faire fonctionner les deux: le refus de tout et n'en autorise qu'un, plus les options suivantes:

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

Y a-t-il un moyen de faire fonctionner cela?

punkbit
la source

Réponses:

356
order deny,allow
deny from all
allow from <your ip> 
b101101011011011
la source
95
REMARQUE! Apache est sensible aux espaces dans htaccess. Ne laissez aucun espace entre refuser, autoriser. Ie n'écrivez pas l'ordre de refuser, de permettre.
H.Rabiee
2
INFO: - cela fonctionne aussi pour IPv6! il suffit d'ajouter une autre ligne avecallow from yourIPv6
jave.web
Est-ce possible dans nginx?
shgnInc
10
Remarque sur la documentation 2.4 : les directives Allow, Deny et Order, fournies par mod_access_compat, sont obsolètes et disparaîtront dans une version ultérieure. Vous devez éviter de les utiliser et éviter les didacticiels obsolètes recommandant leur utilisation.
Martin Schneider
4
Comme @ MA-Maddin l'a souligné, - alors mod_access_compat est obsolète. Cet article montre comment faire dans les nouvelles versions. Et il faut également envisager, si le serveur utilise un proxy, car cela afficherait alors l'adresse IP du proxy pour le visiteur. Cet article suggère une solution à cela.
Zeth
115

Je sais que cette question a déjà une réponse acceptée, mais la documentation Apache dit:

Les directives Allow, Deny et Order, fournies par mod_access_compat, sont obsolètes et disparaîtront dans une version ultérieure. Vous devez éviter de les utiliser et éviter les didacticiels obsolètes recommandant leur utilisation.

Ainsi, une réponse plus pérenne serait:

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

J'espère que j'ai aidé à empêcher cette page de devenir l'un de ces "didacticiels obsolètes". :)

Rok Sprogar
la source
Où mettons-nous notre IP?
Gary Carlyle Cook
1
Marche à suivre! Cela devrait être une solution acceptée car elle fonctionne non seulement, mais aussi à l'épreuve du temps.
6opko
L'autre réponse n'a pas aidé dans ma situation. Mais celui-ci l'a fait. Merci d'avoir mis à jour un ancien fil.
Johann Dyck
1
L'exemple de cette réponse permet l'accès à partir de deux IP? Donc, pour ajouter plusieurs IP, nous mettons juste un espace entre eux? Pouvez-vous mettre Require ipplusieurs lignes pour le rendre plus lisible par l'utilisateur ou est-ce que toutes les adresses IP doivent être sur une seule ligne?
Hastig Zusammenstellen
si vous l'utilisiez, comment redirigeriez-vous vers une nouvelle page temporaire comme l'ont fait certaines des réponses?
rudtek le
39

Cela peut être amélioré en utilisant la directive conçue pour cette tâche.

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

Où 111.222.333.444 est votre adresse IP statique.

Lorsque vous utilisez la directive "Order Allow, Deny", les demandes doivent correspondre à Allow ou Deny, si aucune n'est satisfaite, la demande est refusée.

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

MickeyRoush
la source
1
comment ajouter un uRL personnalisé?
seconde nuit
32

Version légèrement modifiée de ce qui précède, y compris une page personnalisée à afficher pour ceux qui se voient refuser l'accès:

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

... et de cette façon, les requêtes ne provenant pas de 111.222.333.444 verront specific_page.html

(poster ceci comme commentaire avait l'air terrible parce que de nouvelles lignes se perdent)

Oliver Maksimovic
la source
Salut. J'ai exactement le même code que vous avez dans mon .htaccess mais j'obtiens toujours une erreur 500. La page que j'ai spécifiée est appelée test.htmlet se trouve dans le même dossier que le .htaccess. Cependant, je ne peux pas voir les journaux (non autorisés à partir du serveur). Avez-vous une idée de pourquoi je pourrais avoir ce problème? Lorsque j'obtiens le chemin du fichier via un client ftp, cela me dit /test.htmlque le chemin ne devrait pas être un problème, non?
Musterknabe
En outre, l'erreur 500 survient même lorsque la ligne avec le document d'erreur est commentée. Cela ne devrait donc pas être le problème. Y a-t-il une raison pour laquelle les 3 autres lignes ne peuvent pas fonctionner? Dans mon .htaccess, j'ai trois autres lignes, où je redirige non-www vers www, mais c'est tout. Mais j'obtiens également l'erreur quand j'ai SEULEMENT les trois lignes avec refuser, autoriser, etc.
Musterknabe
Comment ajouter une URL personnalisée?
seconde nuit
8

En améliorant un peu plus les réponses précédentes, une page de maintenance peut être présentée à vos utilisateurs pendant que vous effectuez des modifications sur le site:

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

Où:

IvanRF
la source
Lorsque j'utilise le ErrorDocument 403, j'obtiens une erreur 403 supplémentaire pour ce fichier maintenance.html, car il ne peut pas non plus accéder à ce fichier. Avez-vous une solution pour cela?
Zdravko Donev
3

En plus de la réponse de @David Brown, si vous souhaitez bloquer une adresse IP, vous devez d'abord tout autoriser puis bloquer les IP en tant que telles:

    <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

Vous pouvez utiliser l'une des notations mentionnées ci-dessus pour répondre à vos besoins CIDR.

Rafa Carvalhido
la source
Merci, c'est la bonne façon de gérer Apache 2.4!
Aleksandar Pavić
2

Vous pouvez utiliser les éléments suivants dans htaccess pour autoriser et refuser l'accès à votre site:

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

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

Nous définissons d'abord une variable env allowedip si l'adresse IP du client correspond au modèle, si le modèle correspond, la variable env allowedip reçoit la valeur 1 .

Dans l'étape suivante, nous utilisons Autoriser, refuser des directives pour autoriser et refuser l'accès au site. Order deny,allowreprésente l'ordre de denyet allow. deny from allcette ligne dit au serveur de refuser tout le monde. la dernière ligne allow from env=allowedippermet d'accéder à une seule adresse IP pour laquelle nous définissons la variable env.

Remplacez 1\.2\.3\.4\.5par votre adresse IP autorisée.

Réfrences:

Amit Verma
la source
1
Quels sont les avantages de l'utiliser au lieu de simplement Autoriser à partir de 324.234.22.1?
Berry M.
2

Je n'ai pas pu utiliser la méthode 403 parce que je voulais la page de maintenance et les images de la page dans un sous-dossier sur mon serveur, j'ai donc utilisé l'approche suivante pour rediriger vers une `` page de maintenance '' pour tout le monde sauf une seule IP *

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

Source: Création d'une page d'attente pour masquer votre blog WordPress

METALFURY
la source
Cette solution est la plus simple - je la préfère
Gerfried
1

Vous pouvez avoir plus d'une IP ou même un autre type d'autorisation comme l'utilisateur, le nom d'hôte, ... plus d'informations ici 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
la source
0

Si vous souhaitez utiliser mod_rewrite pour le contrôle d'accès, vous pouvez utiliser des conditions telles que l'agent utilisateur, le référent http, l'adresse distante, etc.

Exemple

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

Réfrences:

Abhishek Gurjar
la source
0

Ajoutez la commande suivante dans le fichier .htaccess. Et placez ce fichier dans votre dossier htdocs.

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

Pour moi, cela semble fonctionner (en utilisant IPv6 plutôt qu'IPv4) Je ne sais pas si cela est différent pour certains sites Web, mais pour le mien, cela fonctionne.

TigerMANEK426
la source