Entre os diversos serviços de infraestrutura que compõem um sistema corporativo unificado, está o proxy. Sua principal função é atuar como um nó intermediário na transmissão de tráfego, além de executar funcionalidades previamente definidas, como modificação e inspeção das conexões.
Existem dois tipos dessas soluções: proxy direto (forward proxy) e proxy reverso (reverse proxy). O primeiro redireciona o tráfego para fora através de um único ponto, enquanto o segundo faz o oposto - direciona o tráfego do segmento externo para o interno. Neste artigo, vamos analisar a segunda opção e configurar o serviço para funcionamento.
O que é um Reverse Proxy?
Como mencionamos anteriormente, um Reverse Proxy é um nó intermediário por meio do qual o tráfego externo passa antes de chegar aos servidores, ou seja, vindo dos clientes.
Nesses casos, essa solução é utilizada devido à necessidade de balancear a carga entre os nós, já que o processamento dos próprios pacotes pode ser bastante pesado. Assim, diferentes abordagens de balanceamento ajudam a reduzir esse impacto. Além disso, o proxy pode atuar como um ponto de controle do tráfego, por exemplo, como um WAF local ou como um nó de redirecionamento para servidores ICAP.
Caso você não tenha recursos suficientes, é possível executar essas tarefas em servidores em nuvem mais potentes. A Serverspace oferece servidores VPS/VDS isolados para uso geral e virtualização.
Implantação e configuração
Antes de tudo, vamos escolher um pacote de software que execute funções de proxy. Normalmente, servidores web simples já possuem essa funcionalidade, então utilizaremos o pacote Nginx:
Em seguida, passamos para a configuração do nosso serviço no diretório padrão /etc/nginx. Dentro dele, nos interessam dois arquivos responsáveis pela configuração global do serviço e pelos hosts virtuais.
Vamos focar no segundo:
Se o arquivo de hosts virtuais tiver um nome diferente, abra-o com o nano (ou outro editor de sua preferência). Vamos analisar a sintaxe básica de um host virtual, que é determinada pelo campo SNI no pacote de rede de entrada:
listen ip:port;
server_name domain_name;
root /path/to/site-file;
index /index.html;
..
location / {}
..
}
Preencha os campos básicos com os dados do seu servidor web: em qual porta o site estará disponível, qual domínio será atendido, entre outros. Observe que o campo location será responsável por definir como o servidor irá tratar as requisições recebidas no caminho especificado.
Até aqui, temos um servidor web comum. Para transformá-lo em um reverse proxy, é necessário adicionar diretivas dentro do bloco location:
proxy_pass http://192.168.1.10:80;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
Para entender a diferença entre um reverse proxy e um servidor web comum, compare as diretivas dos dois caminhos /hello e /cats. No segundo caso, especificamos o diretório onde os dados estão armazenados, enquanto no primeiro fazemos o proxy da conexão.
Observe que a diretiva proxy_pass permite estabelecer uma conexão com um recurso e, como cliente, encaminhar as requisições, modificando-as com a diretiva proxy_set_header.
Cada um desses cabeçalhos tem sua função:
- Host - define o host de destino da requisição;
- X-Real-IP - informa o endereço IP real do cliente antes do proxy;
- X-Forwarded-For - indica a cadeia de proxies/cliente original;
- X-Forwarded-Proto - especifica o protocolo utilizado (HTTP/HTTPS).
Após serem modificadas, as requisições são enviadas para o Upstream ou Backend, onde serão processadas pela aplicação web.
Agora, vamos salvar o arquivo e criar um link para que a configuração seja carregada automaticamente:
Ou substitua pelo nome do seu próprio arquivo e crie também um link para o diretório de configurações habilitadas. Em seguida, reinicie o Nginx ou faça com que ele recarregue a configuração:
Como o servidor Nginx escuta em todas as interfaces por padrão, todo o tráfego que chega ao dispositivo será encaminhado (proxy) para o backend. Caso seja necessário realizar a terminação antecipada de SSL (SSL termination), adicione as diretivas apropriadas para o seu processamento:
ssl_certificate_key www.example.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
Após isso, o tráfego será transmitido em texto aberto, permitindo que outras soluções possam processar os pacotes recebidos.
Além disso, na nossa base de conhecimento você pode encontrar materiais sobre como configurar um WAF com base em uma solução de Reverse Proxy como esta.
Conclusão
Configurar um servidor Reverse Proxy é um passo essencial para uma infraestrutura web moderna. Ao atuar como intermediário entre clientes externos e servidores internos, o reverse proxy melhora o balanceamento de carga, aumenta a segurança e permite a terminação de SSL.
Usando o Nginx como exemplo, configuramos um reverse proxy capaz de encaminhar requisições, preservar os cabeçalhos do cliente e oferecer suporte a tráfego SSL. Com essa configuração, seus servidores internos permanecem protegidos enquanto lidam com requisições externas de forma eficiente.
Além disso, os reverse proxies abrem oportunidades para a integração de camadas adicionais de segurança, como WAF, cache e monitoramento de tráfego.
FAQ
- Q1: Qual é o principal objetivo de um Reverse Proxy?
Um Reverse Proxy atua como intermediário entre os clientes e os servidores internos. Ele distribui o tráfego de entrada, melhora o balanceamento de carga, aumenta a segurança e pode realizar terminação de SSL e cache. - Q2: Quais softwares podem ser usados como Reverse Proxy?
Soluções comuns incluem Nginx, Apache, HAProxy e Traefik. Cada uma oferece recursos específicos, sendo o Nginx amplamente utilizado pela sua performance e integração com servidores web. - Q3: Como funciona a terminação de SSL em um Reverse Proxy?
A terminação de SSL permite que o proxy descriptografe o tráfego HTTPS recebido, encaminhando-o como HTTP simples para os servidores internos. Isso reduz a carga de processamento nos backends e centraliza o gerenciamento de certificados. - Q4: Quais cabeçalhos devem ser preservados ao fazer proxy de requisições?
Os principais cabeçalhos são Host, X-Real-IP, X-Forwarded-For e X-Forwarded-Proto. Eles garantem a preservação das informações originais do cliente e do protocolo utilizado. - Q5: Um Reverse Proxy pode melhorar a segurança?
Sim. Ao expor apenas o servidor proxy à internet, os servidores internos permanecem ocultos. Além disso, o reverse proxy permite integração com firewalls, WAFs e ferramentas de monitoramento de tráfego. - Q6: Como testar se meu Reverse Proxy está funcionando corretamente?
Após a configuração, reinicie o serviço do proxy e acesse a URL configurada. Utilize ferramentas como curl, ferramentas de desenvolvedor do navegador ou serviços de monitoramento para verificar se o tráfego está sendo encaminhado corretamente e se os cabeçalhos são preservados. - Q7: Um Reverse Proxy é adequado para sites com alto tráfego?
Sim. Reverse proxies distribuem as requisições entre múltiplos servidores backend, aumentando o desempenho e a confiabilidade de aplicações com alto volume de tráfego.