Permitindo acesso a um host virtual Apache apenas da rede local

19

Eu tenho uma página da web em um servidor Linux que administro, executando o Apache 2.2. Este servidor é visível para o mundo externo para alguns outros serviços.

Gostaria de configurar o Apache para que um determinado host virtual seja visível apenas de dentro da rede local, para que eu possa implantar um aplicativo Web para obter feedback de outras pessoas na minha organização. Acho que isso tem a ver com a diretiva Allow, mas meus experimentos não estão indo bem.

Como posso alterar meu arquivo de configuração para conseguir isso? Também devo alterar a configuração do firewall?

Btz
fonte
Você está usando um endereço IP privado (não roteável) como 10.0.0.100 ou endereço IP público (roteável) para o seu servidor?
Closetnoc 19/03/2014
O servidor tem um endereço IP público e posso conectar-me a ele de fora da rede de trabalho - de casa, por exemplo. Todos os computadores dos colegas têm endereços IP locais do tipo 10. *. *. *.
Btz

Respostas:

12

Fácil. Basta definir algo como isso na sua configuração principal ou na sua configuração virtual:

<Directory /var/www/path/to/your/web/documents>

  Order Deny,Allow
  Deny from all
  Allow from 127.0.0.1 ::1
  Allow from localhost
  Allow from 192.168
  Allow from 10
  Satisfy Any

</Directory>

A <Directory></Directory>declaração basicamente diz: “Use essas regras para qualquer coisa neste diretório. E por "este diretório" que se refere ao /var/www/path/to/your/web/documentsque defini neste exemplo, mas deve ser alterado para corresponder ao caminho do diretório local do seu site.

Em seguida, na <Directory></Directory>área em que você está alterando o comportamento padrão do Apache, que Allowé tudo por padrão para Order Deny,Allow. Em seguida, você define Deny from allde nega acesso de todos. Seguem as Allow frominstruções que permitem o acesso de 127.0.0.1 ::1(endereço IP do host local), localhost(o próprio host local). Esse é todo o material padrão. Como o acesso a partir localhosté necessário para muitos processos internos do sistema.

O que segue é o que importa para você.

O Allow fromfor 192.168e também 10permitirá o acesso de qualquer / todos os endereços de rede dentro do intervalo de rede prefixado por esses números.

Portanto, indicando 192.168que basicamente significa se um usuário tem um endereço como 192.168.59.27ou 192.168.1.123ele poderá ver o site.

E da mesma forma usando o Allow frompara os 10assegura prefixo que, se alguém tem um endereço IP de 10.0.1.2ou até mesmo 10.90.2.3que eles serão capazes de ver o conteúdo.

Praticamente todas as redes internas do mundo usam o 192.168alcance ou algo assim 10. Nada externo. Portanto, o uso dessa combinação alcançará seu objetivo de bloquear o acesso ao mundo exterior, mas apenas permitir o acesso a partir da sua rede local.

JakeGould
fonte
O que é Satisfy Anysuposto fazer neste caso? Não sei nada sobre tudo isso, mas quando estava presente no meu cenário, eu podia acessar a página (eu usei <Location /path>) de uma rede externa. Removê-lo, porém, corrigiu meus problemas. Seria bom entender por que esse era o caso, pois estava um pouco preocupado que eu pudesse acessar a página mesmo com as regras em vigor.
Liamnichols
@liamnichols Como explicado aqui : “Permite que o pedido se qualquer exigência for atendida (autenticação ou de acesso).”
JakeGould
14

Pessoas que chegaram nesta resposta, observe que isso é específico para o Apache 2.2.

O Apache 2.4 descontinuou essas diretivas.

A nova maneira é usar o módulo mod_authz_hoste as Requirediretivas. ( link )

No Apache 2.4, você deve fazer

<Directory /var/www/ncp-web/>
  Require host localhost
  Require ip 127.0.0.1
  Require ip 192.168
  Require ip 10
</Directory>

e remova todas as diretivas Permitir.

nachoparker
fonte
5

Adicione esta seção à sua diretiva de host virtual:

<Location /mypathurl>
    Order deny,allow
    Deny from all
    Allow from 192.168.1.10
</Location>

Substitua seu IP acima. Isso não deve ser usado para segurança de nível financeiro, FYI.

Chloe
fonte
-1

Não sei como você configurou sua rede, no entanto, estou assumindo algumas coisas para tentar obter uma resposta melhor.

Vamos supor que você tenha um pequeno escritório com uma conexão DSL. Você teria um endereço IP público estático ou um bloco de endereços atribuído à sua linha, um modem DSL e um firewall. Sem entrar em detalhes de como isso acontece, chegarei à parte importante.

Você deve estar usando NAT (tradução de endereços de rede). Isso permite que os endereços IP públicos residam no lado WAN (Internet) da sua rede e usam endereços IP privados (como 10.0.0.100) dentro da rede no lado da LAN. Este é um procedimento de operação padrão. Se você hospedar um servidor da web em sua rede, use o encaminhamento de porta ou outro mecanismo semelhante) para apontar qualquer tráfego da web para o servidor da web.

Nesse cenário padrão, todos os computadores internos usariam os endereços IP privados.

Supondo que você tenha uma configuração de rede padrão semelhante, altere o endereço IP do computador de um endereço IP público para um endereço IP privado. Sua rede pode ter uma configuração DHCP, onde seu computador pode solicitar um endereço IP disponível. Isso significa que, em vez de especificar um endereço IP, você seleciona o DHCP e um endereço IP será atribuído. Se o DHCP não estiver disponível, você deverá verificar se há outros computadores em busca de um espaço de endereço IP privado que possa ser usado e selecionar um endereço IP no espaço que não for usado. Você pode especificar esse endereço IP não utilizado na sua configuração de rede. Isso deve impedir que seu sistema seja visto na Internet.

closetnoc
fonte
Eu pensei sobre isso, mas não é uma solução prática. Existem serviços nessa máquina que precisam permanecer visíveis para o exterior e, de qualquer forma, pretendo tornar o aplicativo Web visível novamente em alguns dias - não há motivo para revolucionar o layout da rede apenas por alguns dias. No entanto, posso trabalhar em coisas como a configuração do Apache.
Btz
Se você tiver um firewall, poderá fechar algumas portas para esse endereço IP.
closetnoc
As configurações do firewall podem ser usadas, mas isso é realmente um exagero. O Apache construiu uma funcionalidade para negar ou permitir com base no endereço IP e em outros critérios relacionados. Veja minha resposta para mais detalhes.
precisa saber é o seguinte
Os @JakeGould Firewalls não são necessariamente uma solução de exagero. Eu conheço o Apache muito bem. No entanto, existem opções de filtragem HTTP na maioria dos bons firewalls que ajudam sem sobrecarregar o próprio servidor. Além disso, embora o Apache seja excelente, não é sem culpa. Além disso, os acessos à porta, incluindo acessos alternativos, podem ser manipulados usando um firewall, para que alguns serviços da Web permaneçam públicos e outros sejam acessíveis apenas na LAN.
Closetnoc 17/08/2014