Negar tudo, permitir apenas um IP através do htaccess

Estou tentando negar tudo e permitir apenas um único IP. Mas gostaria de ter o seguinte htaccess trabalhando para esse IP único. Eu não estou encontrando uma maneira de ter ambos trabalhando: o negar tudo e permitir apenas um, além das seguintes opções:

 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  

Existe uma maneira de fazer isso funcionar?

 order deny,allow deny from all allow from  

Eu sei que esta pergunta já tem uma resposta aceita, mas a documentação do Apache diz:

As diretivas Permitir, Negar e Ordenar, fornecidas por mod_access_compat, foram descontinuadas e desaparecerão em uma versão futura. Você deve evitar usá-los e evitar tutoriais desatualizados que recomendem seu uso.

Então, uma resposta mais futura seria:

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

Espero ter ajudado a impedir que essa página se torne um daqueles “tutoriais desatualizados”. 🙂

Isso pode ser melhorado usando a diretiva projetada para essa tarefa.

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

Onde 111.222.333.444 é o seu endereço IP estático.

Ao usar a diretiva “Order Allow, Deny”, as solicitações devem corresponder a Permitir ou Negar, se nenhuma delas for atendida, a solicitação será negada.

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

Versão ligeiramente modificada das opções acima, incluindo uma página personalizada a ser exibida para aqueles que recebem access negado:

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

… e dessa forma esses pedidos não vindos de 111.222.333.444 verão specific_page.html

(postar isso como comentário parecia terrível porque novas linhas se perderam)

Aprimorando um pouco mais as respostas anteriores, uma página de manutenção pode ser mostrada para seus usuários enquanto você realiza alterações no site:

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

Onde:

  • #.#.#.# é o seu IP: Qual é o meu endereço IP?
  • Para maintenance.html há um bom exemplo aqui: Página simples de manutenção

Você pode usar o seguinte no htaccess para permitir e negar access ao seu site:

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

Primeiro, definimos um allowip de variável env, se o endereço IP do cliente corresponder ao padrão, se o padrão corresponder, então, a variável env receberá o valor 1 .

Na próxima etapa, usamos Permitir, negar diretivas para permitir e negar access ao site. Order deny,allow representa a ordem de deny e allow . deny from all esta linha diz ao servidor para negar a todos. a última linha allow from env=allowedip permite access a um único endereço IP para o qual definimos a variável env.

Substitua 1\.2\.3\.4\.5 pelo seu endereço IP permitido.

Refrências:

Eu não era capaz de usar o método 403 porque queria a página de manutenção e imagens de página em uma subpasta no meu servidor, então usei a seguinte abordagem para redirect para uma ‘página de manutenção’ para todos, mas um único IP *

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

Fonte: Criando uma página de espera para esconder o seu blog WordPress

Você pode ter mais de um IP ou até mesmo algum outro tipo de permissão, como usuário, nome de host, … mais informações aqui 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 

Além da resposta do @David Brown, se você quiser bloquear um IP, primeiro é necessário permitir todos os bloqueios dos IPs:

   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 

Você pode usar qualquer uma das notações mencionadas acima para atender às suas necessidades de CIDR.

Se você quiser usar mod_rewrite para controle de access, você pode usar condições como user agent, http referrer, remote addr etc.

Exemplo

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

Refrências: