Olá a todos.
O post de hoje vem em resposta a vários pedidos para fazer um artigo sobre o tema.
Para mim é uma das ferramentas fundamentais para manter tudo o mais seguro e organizado possível quando disponibilizamos serviços para serem consumidos desde a internet. Hoje iremos falar um bocado sobre isto e porque é que é essencial ter sempre um entre a internet e os serviços do nosso homelab.
O Que É Um Reverse Proxy e Por Que É Tão Importante?
Imaginem que temos vários serviços a correr no vosso homelab – um servidor Nextcloud para os teus ficheiros, um Home Assistant para domótica, um Jellyfin para streaming de filmes e até um Pi-hole para filtrar anúncios. Todos estes serviços precisam de ser acessíveis de forma fácil e segura. É aqui que entra o reverse proxy.
O reverse proxy atua como um intermediário entre o mundo exterior e os serviços internos do teu homelab. Em vez de expores diretamente cada serviço à internet (o que seria eventualmente um desastre em termos de segurança), expões apenas o reverse proxy. Ele recebe as requisições da internet e reencaminha-as para os serviços corretos de forma segura e eficiente.
Segurança: O Ponto Principal
Quando se trata de segurança, um reverse proxy é uma camada essencial de proteção e nunca deverá ser eliminado da equação. Porque?
- Ocultação dos serviços internos – O reverse proxy esconde a estrutura interna do teu homelab. Para o mundo exterior, parece que há apenas um único servidor, tornando muito mais difícil para atacantes explorarem vulnerabilidades específicas dos teus serviços.
- TLS/SSL centralizado – Em vez de gerires certificados individuais para cada serviço, podes configurar um único certificado no reverse proxy e garantir que todas as comunicações são encriptadas.
- Filtragem de tráfego malicioso – Com um reverse proxy, podes configurar regras para bloquear IPs suspeitos, limitar tentativas de login falhadas e proteger contra ataques de força bruta.
- Firewall de Aplicação Web (WAF) – E aqui é que a coisa fica interessante! Podes adicionar um WAF como o OpenWAF para uma camada extra de segurança. Um WAF ajuda a identificar e bloquear tráfego malicioso antes mesmo de chegar aos teus serviços, protegendo contra ataques como SQL Injection, Cross-Site Scripting (XSS) e outros métodos de exploração.
Configuração e Personalização ao Nosso Gosto
Uma das grandes vantagens de usar um reverse proxy é a flexibilidade. podemos afinar as regras, otimizar as configurações e até criar autenticação extra para determinados serviços. Aqui estão algumas das opções que podes explorar:
- Autenticação extra – Antes de alguém aceder a um serviço, podes exigir um login no próprio reverse proxy.
- Rate limiting – Podes limitar a quantidade de pedidos por segundo vindos do mesmo IP para evitar abusos.
- Geo-blocking – Se não precisas de acessos de certos países, podes simplesmente bloqueá-los.
- Cache e otimização – Alguns reverse proxies permitem armazenar em cache certos conteúdos, melhorando o desempenho.
Apache Reverse Proxy: O Venerável Guardião Empresarial
Se há um nome que resiste ao tempo no mundo dos reverse proxies, é o Apache Reverse Proxy. Este é o standard em muitos ambientes empresariais devido à sua robustez, flexibilidade e compatibilidade com praticamente tudo. Se quiserem uma solução estável, altamente configurável e bem documentada, o Apache é uma excelente escolha.
Claro, no homelab nunca nos faltam alternativas: também podemos usar opções mais leves e fáceis de configurar, como o NGINX Proxy Manager ou o Traefik, mas se quiserem algo com pedigree empresarial, o Apache é rei.
Exemplo prático:
Para o exemplo prático decidi trazer cá um serviço que toda a gente praticamente usa: O nextcloud/owncloud.
Este serviço embora seja apoiado numa comunidade fluorescente de developers, não está livre como é obvio dos seus zero days.
Este é um template em apache para o nextcloud em formato de vhost:
<VirtualHost *:443> <IfModule mod_headers.c> Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload" Header always set Referrer-Policy "no-referrer" </IfModule> ServerName nextcloud.batatas.com:443 ServerAdmin [email protected] Options +FollowSymLinks SSLEngine on SSLCertificateKeyFile /etc/letsencrypt/live/batatas.com/privkey.pem SSLCertificateFile /etc/letsencrypt/live/batatas.com/cert.pem SSLCertificateChainFile /etc/letsencrypt/live/batatas.com/chain.pem ErrorLog "| /usr/bin/logger -treverse_proxy_batatas.com -plocal6.err" CustomLog "| /usr/bin/logger -treverse_proxy_batatas.com -plocal6.notice" combined SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 SSLHonorCipherOrder On SSLCompression Off SSLCipherSuite EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH+aRSA+RC4:EECDH:EDH+aRSA:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:AES256-SHA256:AES128-SHA256:AES128-SHA:DHE-RSA-DES-CBC3-SHA:DES-CBC3-SHA:RC4-SHA:!aNULL:!eNULL:!ADH:!EXP:!LOW:!DES:!MD5:!PSK:!SRP:!DSS:!RC4 SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0 SSLProxyEngine On ProxyPass / https://internal.batatas.com/ ProxyPassReverse / https://internal.batatas.com/ ProxyRequests Off Options FollowSymLinks ProxyVia On ProxyPreserveHost On RemoteIPProxyProtocol On RemoteIPHeader X-Forwarded ProxyTimeout 360 <Files "*.js"> ForceType text/javascript </Files> RewriteEngine On RewriteCond %{REQUEST_METHOD} ^TRACE RewriteRule .* - [F] SSLProxyVerify none SSLProxyCheckPeerCN off SSLProxyCheckPeerName off SSLProxyCheckPeerExpire off # DISABED ModSec <IfModule mod_security2.c> include /etc/httpd/conf.d/nextcloud.modsec.exclusions </IfModule> <Location /ocs/v2.php/apps/serverinfo/api/v1/info> Order allow,deny Allow from 172.16.0.0/24 </Location> <Location /server-status> Order allow,deny Allow from 172.16.0.0/24 </Location> </VirtualHost>
Notas: Sim, o meu certificado interno é self signed, e existem políticas ao nível do modsecurity que batem com o correto funcionamento do nextcloud. Assim, até o filtro estar corrigido, terá de ser afinado ou a regra-ID desativada para *este* site apenas.
SÓ HTTP OU HTTPS SÃO PASSIVEIS DE REVERSE PROXY?
Além de serviços web, outros protocolos também podem beneficiar da utilização de um reverse proxy. Por exemplo estes protocolos suportam reverse-proxy através de HAproxy ou ferramentas equivalentes.
- SMTP (Simple Mail Transfer Protocol) – Proteger o servidor de e-mail contra acessos não autorizados, além de filtrar tráfego indesejado.
- IMAP (Internet Message Access Protocol) – Garantir um acesso seguro ao servidor de e-mails, aplicando criptografia e autenticação adicional.
- FTP (File Transfer Protocol) – Aumentar a segurança nas transferências de ficheiros, restringindo o acesso e monitorizando conexões.
Conclusão
Se levam os vossos serviços a sério, então um reverse proxy não é opcional – é obrigatório. Ele não só melhora a organização e acessibilidade dos teus serviços, como adiciona camadas valiosas de segurança. E se ainda o complementares com um WAF como o OWASP, então estás no caminho certo para uma infraestrutura robusta e segura.