NAT 1:1 ou Proxy Reverso, qual a melhor alternativa?

Genericamente falando, tanto o NAT 1:1 como o Proxy Reverso tem por finalidade ligar um endereço interno específico para um endereço externo.

NAT 1:1 (one-to-one)
Se desejarmos que uma máquina da rede interna possa ser vista de fora da rede, ou seja, possa receber conexões e ter servidores instalados, podemos usar o NAT 1:1. Esse esquema de NAT é bem simples e consiste em criarmos manualmente uma tabela no roteador mapeando o IP privado para um IP público. Esse tipo de NAT também é chamado de NAT estático, uma vez que as informações na tabela permanecem válidas indefinidamente após serem criadas.

Como existe permanentemente uma entrada na Tabela NAT associando o IP 10.1.1.2 ao IP 200.3.3.3, tanto a máquina A pode iniciar a comunicação com alguma máquina da Internet como alguma máquina da Internet é que pode iniciar uma comunicação com a máquina A. A figura acima mostra o caso onde a máquina A enviou um pacote para uma máquina na Internet que possuía o IP 60.6.6.6. Quando esse pacote passa pelo roteador, o IP de origem será trocado para o IP 200.3.3.3. Do mesmo modo, como pode ser visto na próxima figura, sempre que o roteador receber um pacote da Internet para o IP 200.3.3.3 o IP de destino será trocado para 10.1.1.2.


Naturalmente, para este esquema funcionar o IP público deve ser um IP da sua empresa.

O serviço de caching, SSL, autenticação, servir arquivos estáticos e compressão esta a cargo do servidor que esta sendo realizado o NAT 1:1. Esta abordagem é simples e direta mas é difícil de escalar, tanto em termos de performance, e em termos de gestão da complexidade de uma grande aplicação complexa. Isto é especialmente verdadeiro se você tem uma arquitetura orientada a serviço distribuído com vários pontos de extremidade HTTP que aparecem e desaparecem com frequência.

Proxy Reverso

Proxy reversos são dispositivos de gateway que isolam servidores da Web e aceitar o tráfego em seu nome.
Um proxy reverso fica entre a internet e seus servidores web. Ele aceita solicitações HTTP, fornece vários serviços, e encaminha os pedidos de um ou vários servidores.

Há diversas razões por adicionar um proxy reverso na rede, mas o principal é a questão de segurança e desempenho.

Ter um ponto em que você possa inspecionar, transformar as solicitações HTTP em rota antes que eles atinjam seus servidores oferece uma série de benefícios. Aqui estão alguns:

Controle de acesso unificado
Uma vez que todas as solicitações vêm através do proxy, é fácil de ver e controlar todos eles. Também conhecido como um ponto central de aplicação de política e autenticação, pois por meio dele você pode autenticar para todas as solicitações HTTP.

Registro unificado
Semelhante ao ponto anterior, é preciso coletar registros apenas de um dispositivo em vez de elaboração de sistemas complexos para coletar registros de todos os dispositivos na rede.

Melhor desempenho
Cache transparente, compressão de conteúdo e SSL são fáceis de implementar a nível de proxy reverso.

Requisições HTTPS
Especificamente falando de conexões HTTPS de entrada, o proxy reverso pode trabalhar decifrando os pedidos e passando para os servidores web interno, isto tem várias vantagens:

– Elimina a necessidade de instalar certificados em muitos servidores backend.
– Fornece um ponto único de configuração e gerenciamento para SSL / TLS
– Leva a carga de processamento de criptografar/descriptografar o tráfego HTTPS para longe de servidores web.

Servir conteúdo estático
Alguns servidores de proxy reverso também pode atuar como servidores web servindo conteúdo estático. Uma página web média, muitas vezes pode consistir de megabytes de conteúdo estático, como imagens, arquivos CSS e JavaScript. Ao servi-los separadamente, pode-se retirar uma carga considerável de servidores de backend, deixando-os livres para processar o conteúdo dinâmico.

Caching
O proxy reverso também pode atuar como um cache. Você pode ter um cache que simplesmente expira após um determinado período, ou melhor ainda, um cache que respeita Cache-Control presente nos cabeçalhos de aplicações. Isso pode reduzir consideravelmente a carga nos servidores backend.

Compressão
De modo a reduzir a largura de banda necessária para pedidos individuais, o proxy reverso pode descomprimir solicitações de entrada e comprimir as de saída. Isso reduz a carga nos servidores que teriam de fazer a compressão.

Reescrita de URL
Às vezes, as URLs de um aplicativo podem apresentar um caminho não ideal para a descoberta ou para SEO (search engine optimization). Um proxy reverso pode reescrever URLs antes de passá-las para os servidores de backend.

Por exemplo, um aplicativo pode ter uma URL para um produto que se parece com isso:
http://www.meuexemploshop.com/produtos.jsf?productid=1234

Com proxy reverso você pode apresentar uma URL otimizada:
http://www.meuexemploshop.com/produtos/carro-de-corrida

Isolamento de aplicativos
Com um proxy reverso, torna-se possível (e fácil) para examinar cada pedido HTTP e sua respectiva resposta. O proxy torna-se uma espécie de guarda-chuva, que pode proteger aplicações web vulneráveis.

Isolamento de servidor web
Sua rede interna pode consistir de muitos servidores web diferentes, alguns dos quais podem ser sistemas legados que não podem ser substituídos ou consertados quando quebrado. Evitando o contato direto com os clientes permite que o sistema permaneça operacional e seguro.

Escondendo da topologia da rede
Um proxy reverso pode esconder a topologia e as características de seus servidores de back-end, eliminando a necessidade de acesso direto à internet para eles. A topologia é muitas vezes exposta através de um DNS mal configurado. Se uma rede é protegida por um sistema de proxy reverso, o mundo exterior não precisa saber nada sobre a rede interna. Você pode colocar seu proxy reverso na internet em uma DMZ e esconder os seus servidores web dentro de uma sub-rede não pública, internamente sendo acessada por meio do uso de servidores DNS privado.

O balanceamento de carga
Esta é a função de proxy reverso que as pessoas estão mais familiarizadas. Onde as rotas de entrada de solicitações HTTP são encaminhadas em balanceadas em servidores idênticos. Existem produtos de balanceamento de carga especializados, mas muita coisa pode ser implementado utilizando apenas proxy reverso.

Agregando vários sites na mesma URL
Um proxy reverso pode encaminhar para diferentes servidores internos a partir de uma mesma URL. Por exemplo, digamos que eu tenho três servidores distintos na minha rede interna:

http://produtos.internal.net/
http://vendas.internal.net/
http://estoque.internal.net/

É possível encaminhar a estes a partir de um único domínio externo usando proxy reverso:

http://www.exemplo.com/produtos/ => http://produtos.internal.net/
http://www.exemplo.com/vendas/ => http://vendas.internal.net/
http://www.exemplo.com/estoque/ => http://estoque.internal.net/

Para um cliente externo, irá parecer que ele esta simplesmente navegando em um único site, mas internamente a organização está mantendo três locais completamente distintos.

Esta abordagem pode funcionar muito bem para APIs de serviços web, onde o proxy reverso fornece uma única fachada pública consistente de uma arquitetura orientada a componente interna distribuída.

Desvantagens:

O aumento da complexidade
Adicionar um proxy reverso requer uma reflexão cuidadosa e maior esforço na manutenção do sistema.

Registro de Logs complicado
Como os sistemas não são acessados diretamente, os arquivos de log que eles produzem não irão conter os verdadeiros endereços IP do cliente. Todos os pedidos vão ser os que estão vindo proxy reverso. Alguns sistemas oferecem uma maneira de contornar isso, e outros não. Assim, um cuidado especial deve ser dado ao registro de log no proxy reverso.

Ponto central de falha
Um ponto central de falha é inaceitável em sistemas de missão crítica. Para removê-lo, é necessário um sistema de alta disponibilidade (HA). Tais sistemas são caros e aumentam a complexidade da rede.

Gargalo de processamento
Se um proxy é apresentado como uma medida de segurança, ele pode se tornar um gargalo de processamento. Em tais casos, a necessidade de aumentar a segurança deve ser pesado contra o custo de criar uma implementação de proxy reverso em cluster.

Ambas as tecnologias funcionam, dependendo de como você pretende trabalhar, porém o proxy reverso possui muito mais capacidade de estender sua rede.

Considere estudar o nginx como solução de proxy reverso de alta performance

Fontes:
http://www.metropoledigital.ufrn.br/
http://www.shorewall.net/NAT.htm
http://beginlinux.com/server_training/proxy-server/996-reverse-proxy-server

This entry was posted in Artigos, HowTo - Como fazer, Linux. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *