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?
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.
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
- Vamos rodar o camando abaixo para resincronizar os arquivos que guardam os repositórios disponíveis do SO
sudo apt update
- Vamos instalar a aplicação apache2 que será usada como nosso proxy reverso.
sudo apt install apache2
- 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
- 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
- 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.
- Voltando para nossa instalação vamos continuar habilitando o site que acabamos de configurar.
sudo a2ensite subdominio.dominio.com.br
- 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 😉