Denegar todo, permitir solo una IP a través de htaccess

Intento negar todo y permitir solo una única IP. Pero me gustaría tener el siguiente htaccess trabajando para esa única IP. No encuentro la manera de que ambos funcionen: negar todo y permitir solo uno, más las siguientes opciones:

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

¿Hay alguna manera de hacer que esto funcione?

 order deny,allow deny from all allow from  

Sé que esta pregunta ya tiene una respuesta aceptada, pero la documentación de Apache dice:

Las directivas Permitir, Denegar y Ordenar, proporcionadas por mod_access_compat, están en desuso y desaparecerán en una versión futura. Debe evitar usarlos y evitar los tutoriales obsoletos que recomiendan su uso.

Entonces, una respuesta más a prueba de futuro sería:

  Require ip xx.xx.xx.xx yy.yy.yy.yy  

Con suerte, he ayudado a evitar que esta página se convierta en uno de esos “tutoriales obsoletos”. 🙂

Esto se puede mejorar utilizando la directiva diseñada para esa tarea.

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

Donde 111.222.333.444 es su dirección IP estática.

Al utilizar la directiva “Solicitar permiso, denegar”, las solicitudes deben coincidir con Permitir o Rechazar, si no se cumple, la solicitud es denegada.

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

Versión ligeramente modificada de lo anterior, que incluye una página personalizada para que se muestre a quienes se les niegue el acceso:

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

… y de esa manera esas solicitudes que no provengan de 111.222.333.444 verán specific_page.html

(publicar esto como comentario se veía terrible porque se pierden nuevas líneas)

Mejorando un poco más las respuestas anteriores, se puede mostrar una página de mantenimiento a sus usuarios mientras realiza cambios en el sitio:

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

Dónde:

  • #.#.#.# es su IP: ¿Cuál es mi dirección IP?
  • Para maintenance.html hay un buen ejemplo aquí: Página de mantenimiento simple

Puede usar lo siguiente en htaccess para permitir y denegar el acceso a su sitio:

 SetEnvIf remote_addr ^1\.2\3\.4\.5$ allowedip=1 Order deny,allow deny from all allow from env=allowedip 

Primero establecemos un allowip de variable env si la dirección IP del cliente coincide con el patrón, si el patrón coincide, entonces a la variable env permitip se le asigna el valor 1 .

En el siguiente paso, utilizamos las directivas Permitir, denegar para permitir y denegar el acceso al sitio. Order deny,allow representa el orden de deny y allow . deny from all esta línea le dice al servidor que niegue a todos. la última línea allow from env=allowedip permite el acceso a una única dirección IP para la que establecemos la variable env.

Reemplace 1\.2\.3\.4\.5 con su dirección IP permitida.

Refrences:

No pude usar el método 403 porque quería la página de mantenimiento y las imágenes de página en una subcarpeta en mi servidor, así que utilicé el siguiente enfoque para redireccionar a una ‘página de mantenimiento’ para todos, excepto una única IP *

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

Fuente: Creación de una página de espera para ocultar su blog de WordPress

Puede tener más de un IP o incluso otro tipo de permitir como usuario, nombre de host, … más información aquí 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 

Además de la respuesta de @David Brown, si desea bloquear una IP, primero debe permitir todo y luego bloquear las direcciones IP como tales:

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

Puede usar cualquiera de las anotaciones mencionadas anteriormente para satisfacer sus necesidades CIDR.

Si desea usar mod_rewrite para el control de acceso puede usar condiciones como agente de usuario, referencia de http, código remoto, etc.

Ejemplo

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

Refrences: