.htaccess: Permitir todas as conexões da rede local, mas requer login para externo

4

NB: Isso não é uma duplicata, já que a postagem sinalizada lida com versões mais antigas do apache. Eu tentei as soluções nesse segmento, também aquele que deveria funcionar em versões posteriores, sem sucesso.

Existem várias perguntas e respostas que lidam com partes disso, mas não encontrei exatamente esse tipo de situação.

Eu tenho um site que eu quero ser abertamente acessível da minha rede 10.0.0.0. Mas ao acessá-lo através do endereço externo encaminhado no roteador - eu quero que o .htaccess exija um login.

Eu sei como exigir senha para todas as conexões, e tenho uma idéia sobre como permitir / não permitir um endereço específico ou IP. Mas eu quero que todos os IPs que não estão na LAN precisem de um login / senha.

Atualização: Apache2 versão 2.2.22

Veja o que acontece quando tento a solução a partir da resposta que alguém afirma ser uma duplicata de:

AuthName "Authenticate"
AuthType Basic
AuthUserFile "/home/frank/.htpassword"
Require valid-user
Order allow,deny
Allow from 10.0.0.44
Satisfy All

Com o arquivo .htaccess acima, o acesso através do endereço externo é negado, ponto final. Nenhum prompt de login. A partir do IP local específico (.44), recebo o prompt de login.

AuthName "Authenticate"
AuthType Basic
AuthUserFile "/home/frank/.htpassword"
Require valid-user
Order allow,deny
Allow from 10.0.0.0/8
Satisfy All

Com o acima, as conexões externas e internas são solicitadas com login.

Tentando diminuir o problema:

Isto não funciona: (ambos os endereços LAN externos são permitidos)

Order Deny,Allow
Deny from all
Allow from 10.0.0.0/8

Thi funciona: (o endereço exernal recebe acesso negado, enquanto a LAN não o faz)

Order Deny,Allow
Deny from all
Allow from 10.0.0.44

ATUALIZAÇÃO: Estou faltando algo fundamental aqui?

Quando eu tento isso:

Order Deny,Allow
Deny from all

Tudo é negado, tanto da LAN quanto do endereço externo.

No entanto, quando tento isto:

Order Deny,Allow
Allow from 127.0.0.1

Tudo é permitido, tanto da LAN quanto do endereço externo.

O problema está na maneira como estou tentando acessar a partir do endereço eterno? O servidor de nomes do domínio "mydomain.no" aponta para o roteador. Encaminhei o domínio "mydomain.no" nos servidores virtuais do roteador. O tráfego na porta 80 é roteado para o servidor que está executando a instalação do apache2. O que eu quero é todo o tráfego vindo através do endereço "mydomain.no" (e quaisquer outros domínios encaminhados para o mesmo servidor) para exigir uma senha. O tráfego de dentro da LAN não deve exigir uma senha.

    
por knoten 08.03.2017 / 16:47

2 respostas

3

Estou assumindo que você está usando o Apache 2.4, para o Apache 2.2 a sintaxe é diferente.

Você pode adicionar várias diretivas Require :

AuthName "Authenticate"
AuthType Basic
AuthUserFile "/var/www/html/.htpasswd"
<RequireAny>
   Require valid-user
   Require ip 10.0.0
</RequireAny>

Tecnicamente, você nem precisa do <RequireAny> , que o apache usará isso implicitamente quando não está lá, mas eu acho que é mais fácil de ler dessa maneira.

O equivalente para o apache 2.2:

AuthName "Authenticate"
AuthType Basic
AuthUserFile "/var/www/html/.htpasswd"
Require valid-user
Order allow,deny
Allow from 10.0.0
Satisfy any
    
por 09.03.2017 / 09:25
1

Removi minha própria resposta, pois estava incorreta e possivelmente confusa para os outros que fizeram a mesma pergunta.

    
por 09.03.2017 / 10:53