Apache 2.4 restringe a URL para determinados IPs

7

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

Isso é 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 é, na verdade, uma URL virtual e não existe fisicamente na unidade.

    
por DenisR 28.09.2015 / 10:17

3 respostas

3

Use Order , Deny e allow para especificar quem tem acesso ao seu vhost ou local.

<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 redirecionamento, 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 deveria ser feito:

ErrorDocument 403 http://homepage.example.com

Custom error documents are configured using the ErrorDocument directive, which may be used in global, virtualhost, or directory context. It may be used in .htaccess files if AllowOverride is set to FileInfo. (from the apache docs)

    
por 28.09.2015 / 11:09
13

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

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

Você pode restringir explicitamente os endereços por meio do uso dos seguintes itens:

<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 que 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ê deve ser capaz de 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 isso ajude!

    
por 28.09.2015 / 19:29
0

Para o Apache 2.4, você pode usar < RequireAny & gt ;. Você pode fazê-lo em um arquivo vhost ou .htaccess ....

SetEnvIF IP xxx.xxx.xxx.xxx AllowThisIP  # Or X-Real-IP
SetEnvIF IP yyy.yyy.yyy.yyy AllowThisIP
<RequireAny>
  Require env AllowThisIP
  Require host example.com
</RequireAny>

O Apache documenta o link

    
por 18.04.2018 / 16:00