Proxy Reverso com Apache2
Tags: devops, apache2, opensource, braziliandevs
Published: 2023-10-20 12:11:26

### 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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f3x7myci3svbxanx9p3f.png)

### 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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0vc65sf09qct44es65bq.png)

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

```bash
sudo apt update
```

2. Vamos instalar a aplicação apache2 que será usada como nosso proxy reverso.

```bash
sudo apt install apache2
```

3. Vamos instalar todos os módulos que o apache precisa para que possamos configurar o proxy reverso

```bash
sudo a2enmod proxy proxy_http proxy_connect proxy_html
```

3. Após a instalação dos módulo será necessário realizar um reload da aplicação para aplicar todas as instalações acima.

```bash  
sudo service apache2 restart
```

4. Agora vamos criar o arquivo que representa a configuração de um subdomínio que usaremos para fazer o proxy. 

```bash
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.

5. Voltando para nossa instalação vamos continuar habilitando o site que acabamos de configurar.

```bash
sudo a2ensite subdominio.dominio.com.br
```

6. Por fim vamos recarregar o servidor com as novas configurações

```bash
sudo systemctl reload apache2
```

### Conclusão

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

### Apresentação

{% embed https://speakerdeck.com/player/26d947a9b35f4a5ab8c5ffe5afbc4cc4 %}

### Outros posts

{% link https://dev.to/cassunde/a-potencia-do-jenkinsfile-6p4 %}