Como posso configurar o Apache para usar HTTPS para acesso externo, mas HTTP para acesso interno?

5

Eu tenho dois servidores, um servidor de desenvolvimento que é acessível internamente na rede local de nossa empresa e o outro é um servidor web voltado para o público. O servidor de desenvolvimento hospeda várias ferramentas que usamos para gerenciar nossos projetos internamente, mas agora precisamos acessá-los externamente também, mantendo a segurança.

Eu configurei o mod_proxy no servidor externo usando as diretivas ProxyPass e ProxyPassReverse para mapear solicitações externas para o servidor interno. Também configurei a autenticação nesses hosts virtuais externos para fornecer segurança para acesso externo. Eu também preciso usar o SSL para acesso externo, mas, de preferência, prefiro manter as ferramentas internas acessíveis por HTTP simples para as pessoas na intranet.

É possível atingir esse comportamento? Se sim, que diretivas e módulos do Apache eu devo usar e em quais servidores eles precisam ser configurados?

    
por Tim Wardle 05.05.2009 / 20:51

4 respostas

8

Vou supor que você aceita conexões HTTP para o público, mas você faz um redirecionamento HTTP padrão para forçá-las ao HTTPS.

Se este for o caso, então você pode alterar suas diretivas HTTP para não redirecionar se você fizer parte da rede interna.

Para fazer isso, você quer usar o mod_rewrite do Apache e filtrar em REMOTE_ADDR. Essencialmente, você deseja redirecionar tudo o que não corresponde à sua rede.

A outra opção, e provavelmente a mais segura, é apenas fazer com que seus usuários internos usem um endereço de serviço diferente do público. Faça com que eles se conectem a myservice.mydomain.local em vez de myservice.mydomain.com.

    
por 05.05.2009 / 21:07
1

Você pode criar dois hosts virtuais diferentes na configuração do Apache, cada um respondendo em diferentes IPs, embora ainda use o mesmo documento raiz? Em seu roteador, responda a example.com com 192.168.1.1, enquanto fora dele responderá com 342.434.564.23. Ou peça a todos que usem um endereço diferente quando estiverem no escritório (internal.example.com).

    
por 05.05.2009 / 21:01
0

Se você estiver usando o Linux, pesquise iptables para o firewall. Se o Windows, você pode usar as políticas IPSec para simular regras de firewall semelhantes.

Basicamente, você atribuirá regras com base na sub-rede IP de origem. Se uma conexão vier da sua rede interna, bloqueie o HTTPS. Caso contrário, bloqueie o HTTP.

    
por 05.05.2009 / 20:59
-1

É melhor usar regras de firewall para restringir isso.

Eu não acho que o Apache tenha um recurso para implementar isso, mesmo que isso produza sobrecarga. Os firewalls são projetados para coisas como essa e, portanto, seriam mais apropriados. Eu estou supondo que você tem um firewall externo (espero que você faça), você só deve permitir a porta 443 para esta máquina e bloquear a porta 80 externamente.

Você poderia, se realmente quisesse usar o Apache, usar dois hosts virtuais, um ouvindo em um interno e outro em um IP externo. Isso, no entanto, dobraria a configuração e, portanto, eu não recomendaria isso, pois será uma dor para manter.

Edit: Desculpe, o Apache pode fazer isso via mod_rewrite, mas vai sobrecarregar os pedidos e ainda seria mais apropriado usar um firewall. Dito isto, com o mod_rewrite você é capaz de redirecionar as pessoas de http para https, o que poderia ser útil se as pessoas estivessem constantemente tentando acessar o http.

    
por 05.05.2009 / 20:54