Refuser tout, autoriser une seule adresse IP via htaccess
J'essaie de tout nier et de n'autoriser qu'une seule adresse IP. Mais, je voudrais 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 autoriser qu'un seul, 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?
10 réponses
order deny,allow
deny from all
allow from <your ip>
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 future version. Vous devriez éviter les utiliser, et éviter les tutoriels obsolètes recommandant leur utilisation.
Donc, 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 "tutoriels obsolètes". :)
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.
Lors de l'utilisation de la directive "Order Allow,Deny", les demandes doivent correspondre à Allow ou Deny, si aucune des deux n'est satisfaite, la demande est refusée.
Http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html#order
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, ces requêtes ne provenant pas de 111.222.333.444 verront specific_page.html
(poster cela comme commentaire semblait terrible parce que de nouvelles lignes se perdent)
En améliorant un peu plus les réponses précédentes, une page de maintenance peut être affichée à vos utilisateurs pendant que vous effectuez des modifications sur le site:
ErrorDocument 403 /maintenance.html
Order Allow,Deny
Allow from #.#.#.#
Où:
-
#.#.#.#
est votre adresse IP: Quelle est mon adresse IP? - pour
maintenance.html
Il y a un bel exemple ici: Page de Maintenance Simple
Vous pouvez utiliser ce qui suit 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 motif, si le motif correspond alors la variable env allowedip se voit attribuer la valeur 1 .
Dans l'étape suivante, nous utilisons les directives Allow,deny pour autoriser et refuser l'accès au site. Order deny,allow
représente l'ordre de deny
et allow
. {[4] } cette ligne indique au serveur de refuser tout le monde. la dernière ligne allow from env=allowedip
permet d'accéder à une seule adresse ip pour laquelle nous avons défini la variable env.
Remplacez 1\.2\.3\.4\.5
par votre adresse ip autorisée.
Réfrences:
Je n'ai pas pu utiliser la méthode 403 parce que je voulais la page de maintenance et les images de page dans un sous-dossier sur mon serveur, donc j'ai utilisé l'approche suivante pour rediriger vers une "page de maintenance" pour tout le monde sauf une seule adresse IP *
RewriteEngine on
RewriteCond %{REMOTE_ADDR} !**.**.**.*
RewriteRule !^maintenance/ http://www.website.co.uk/maintenance/ [R=302,L]
Source: Création d'une page de maintien pour masquer votre blog WordPress
Vous pouvez avoir plus D'une adresse IP ou même un autre type d'autorisation comme user, hostname, ... plus d'infos 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
Juste en plus de la réponse @David Browns, si vous voulez bloquer une adresse IP, vous devez d'abord autoriser tout puis bloquer les adresses 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.
Si vous souhaitez utiliser mod_rewrite pour le contrôle d'accès vous pouvez utiliser comme agent utilisateur, http referrer, adresse distante, etc.
Exemple
RewriteCond %{REMOTE_ADDR} !=*.*.*.* #you ip address
RewriteRule ^$ - [F]
Réfrences: