Apache 2.4 restringe URL a determinados IPs

Apache 2.4 restringe URL a determinados IPs

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 aquela URL e não da lista de IPs ele deverá ser redirecionado para a página inicial.

Isso é o que tentei até agora sem sorte. A última parte redireciona todos para a página inicial independente 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: o URL /secret é na verdade um URL virtual e não existe fisicamente na unidade.

Responder1

Use Require [ip|host|env]para especificar quem tem acesso ao seu vhost ou localização.

    <Directory "/docroot">
        Require ip 10.10.11.12
    </Directory>   

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

Nunca fiz isso com o apache, mas uso essa estratégia com o nginx. Para o apache, algo assim deveria fazer:

ErrorDocument 403 http://homepage.example.com

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

Responder2

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 endereços explicitamente 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 noDocumentação de controle de acesso do Apache 2.4.

Em relação à sua pergunta (editada por mim devido à falta de pontos para adicionar um comentário), você poderá 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!

Responder3

Para Apache 2.4, você pode usar <RequireAny>. Você pode fazer isso 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>

Documentos do Apachehttps://httpd.apache.org/docs/2.4/mod/mod_authz_core.html#requireany

informação relacionada