O Problema

Muitas vezes quando estamos iniciando uma aplicação web deixamos os usuários acessarem nosso sistema direto do servidor que nossa app está instalada. A imagem abaixo ilustra essa abordagem, agora imagina quantas informações sobre nosso sistema estamos entregando para um atacante?

Teste de imagem

Aumentando a segurança

Expor detalhes da nossa aplicação como IP e porta não é uma boa alternativa principalmente quando começamos a aumentar o fluxo de acesso, um atacante pode usar essas informações para derrubar nosso serviço.

Pensando em como resolver esse problema uma alternativa é usar um proxy reverso e tentar dificultar a vida do atacante, agora, ele não terá acesso direto ao servidor e sim a um proxy que internamente vai chamar um ou vários outros servidores.

Teste de Imagae 2

Na imagem a cima nosso usuário não acessa mais servidor da aplicação direto, ele agora acessa um proxy que a partir do subdomínio que chegou ele vai redirecionar para o servidor correto.

Comandos

  1. Vamos rodar o camando abaixo para resincronizar os arquivos que guardam os repositórios disponíveis do SO
sudo apt update
  1. Vamos instalar a aplicação apache2 que será usada como nosso proxy reverso.
sudo apt install apache2
  1. Vamos instalar todos os módulos que o apache precisa para que possamos configurar o proxy reverso
sudo a2enmod proxy proxy_http proxy_connect proxy_html
  1. Após a instalação dos módulo será necessário realizar um reload da aplicação para aplicar todas as instalações acima.
sudo service apache2 restart
  1. Agora vamos criar o arquivo que representa a configuração de um subdomínio que usaremos para fazer o proxy.
sudo nano /etc/apache2/sites-available/subdominio.dominio.com.br.conf

Aqui temos um exemplo do conteúdo desse arquivo onde precisamos apenas alterar algumas configurações.

<VirtualHost *:80>
       ServerName subdominio.dominio.com.br
       DocumentRoot /var/www/html

       ErrorLog ${APACHE_LOG_DIR}/error.log
       CustomLog ${APACHE_LOG_DIR}/access.log combined
       
       ProxyPass / http://192.121.122.12:8080/
       ProxyPassReverse / http://192.121.122.12:8080/

</VirtualHost>

Sobre esse arquivo podemos fazer sobre alguns pontos como:

  • ServerName: Tem que ser exatamente o mesmo do subdomínio que configuramos para apontar para IP da máquina que estamos instalando o apache2
  • ProxyPass: Configuração que diz para o apache2 como ele redirecionará as solicitações que chegarem em um determinado path. Em nosso exemplo a cima nosso primeiro parâmetro é o “/” que diz que redirecionaremos apartir da raiz do domínio e o segundo é para onde essas requisções serão redirecionadas, em nosso exemplo http://192.121.122.12:8080/.
  • ProxyPassReverse: Configuração para ajustar os cabeçalhos http da resposta do servidor de destino antes de chegar no cliente, assim deixando totalmente oculto o servidor real onde a resposta foi produzida.
  1. Voltando para nossa instalação vamos continuar habilitando o site que acabamos de configurar.
sudo a2ensite subdominio.dominio.com.br
  1. Por fim vamos recarregar o servidor com as novas configurações
sudo systemctl reload apache2

Conclusão

Pronto com as configurações a cima tudo deve está funcionando corretamente.


Curtiu ? Me segue nas redes 😉