O Apache 2.4 restringe o URL a determinados IPs


13

Estou tentando restringir um URL específico para estar disponível fora da rede apenas para endereços IP específicos. Quando um usuário externo tenta acessar esse URL e não da lista de IPs, ele deve ser redirecionado para a página inicial.

Isto é o que eu tentei até agora sem sorte. A última parte redireciona todos para a página inicial, independentemente do IP.

<Location "/secret">
#    <If "%{REMOTE_ADDR} != -ipmatch '123.123.123.123/255.255.255.255'">
#    Redirect 303 "/secret" /
#    </If>

RewriteCond "%{REMOTE_ADDR}" "!123\.123\.123\.123"
RewriteRule .* / [R,L]

LogLevel debug rewrite:trace6
</Location>

PS: a URL / secret é de fato uma URL virtual e não existe fisicamente na unidade.


as declarações If são comentadas? Ativar reescrita - RewriteEngine On?
user9517

A declaração <If> é uma versão que eu tentei. A diretiva RewriteEngine On é declarada anteriormente. Essa é a razão que redireciona todos
Denis Rendler

1
Acho que você deveria un-marcar a resposta selecionada, porque não é válida para o Apache 2.4 como você pediu (que dá informação errada para as pessoas que passam)
Erenor Paz

Respostas:


3

Use Order, Denye allowpara especificar quem tem acesso ao seu vhost ou localização.

<VirtualHost *:80>
    ServerName example.net
    DocumentRoot /docroot

    <Directory "/docroot">
        Order Deny,Allow
        Deny from all
        Allow from 10.10.10.10
        Allow from 10.10.11.0/24
    </Directory>   
</VirtualHost>

Quando se trata de redirecionar, pense em uma página de erro personalizada . Isso é muito mais geral, porque todo acesso não autorizado deve provocar um erro 403 e, portanto, pode ser avaliado facilmente.

Eu nunca fiz isso com o apache, mas use essa estratégia com o nginx. Para o apache, algo assim deve fazer:

ErrorDocument 403 http://homepage.example.com

Os documentos de erro personalizados são configurados usando a diretiva ErrorDocument, que pode ser usada no contexto global, host virtual ou diretório. Pode ser usado em arquivos .htaccess se AllowOverride estiver definido como FileInfo. (dos documentos do apache)


2
Parece um conjunto de configurações do Apache httpd 2.2. Ainda funcionará com o 2.4?
user9517

Pelo menos a ErrorDocumentparte é dos documentos 2.4. Não uso apache, desde nginx está ao redor, mas assumiu que Order, Denye Allowainda estão por aí no Apache 2.4
ansi_lumen

Obrigado, mas eu não ajudo. Esqueci de mencionar, mas atualizei a pergunta, a URL / secret é de fato uma URL virtual e não existe fisicamente na unidade. A URL em si é uma reescrita de index.php, por isso usei a diretiva <Location>.
Denis Rendler 28/09

4
Essa sintaxe foi descontinuada no apache 2.4
Luca Reghellin

1
Por que essa é a resposta aceita? Isto é para o Apache 2.2, não 2.4, como a pergunta indica ... Isso não vai funcionar.
21418 Jeremy

22

As opções Order, Deny e Allow foram substituídas no Apache 2.4 por

<Directory /var/www/mysite.com/htdocs/public>
    Require all granted
</Directory>

Você pode restringir explicitamente endereços usando o seguinte:

<Directory /var/www/mysite.com/htdocs/public>
    Require all granted
    Require not ip 192.168.0.1
</Directory>

O exato oposto também é verdadeiro: para restringir tudo e permitir apenas um subconjunto, use o seguinte:

<Directory /var/www/mysite.com/htdocs/public>
    Require host example.com
    Require ip 192.168.0.1
</Directory>

Mais informações estão disponíveis na documentação de controle de acesso do Apache 2.4.

Em relação à sua pergunta (editada por falta de pontos para adicionar um comentário), você pode simplesmente definir um ErrorDocument com o índice definido como o caminho da URL:

<Directory /var/www/mysite.com/htdocs/public>
    Require host example.com
    Require ip 192.168.0.1
    ErrorDocument 401 /index.html
</Directory>

Espero que isto ajude!


Obrigado, @Linztm! Mas isso resolve apenas parcialmente o meu problema. Não quero apenas bloquear o usuário, mas também redirecioná-lo para a página inicial.
Denis Rendler 28/09

Parece estar funcionando com a diretiva ErrorDocument apenas se eu fornecer a URL completa, incluindo domínio e protocolo. Vou pesquisar mais. Obrigado.
Denis Rendler

Eu encontrei pelo menos um caso em que você precisa usar, allowapesar de descontinuado, Require 127.0.0.1 ainda permite o acesso por endereço externo da máquina local, onde a sintaxe de permissão permite apenas o endereço 127.
Alexei Martianov

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.