Introdução ao UFW Avançado: Além do Básico
O Uncomplicated Firewall (UFW) é, sem dúvida, a ferramenta padrão de fato para gerenciamento de firewalls em distribuições Debian e Ubuntu. Projetado para ser intuitivo, ele abstrai a complexidade do iptables, permitindo que administradores configurem regras de entrada e saída rapidamente. No entanto, ao lidar com ambientes de produção, servidores web críticos ou infraestruturas sensíveis, as configurações básicas frequentemente se mostram insuficientes.
O hardening de uma VPS não termina quando o SSH está liberado e a porta 80/443 estão abertas. É necessário implementar camadas adicionais de segurança, como regras específicas para sub-redes confiáveis, controle rigoroso de tráfego de saída, manipulação avançada de estados de conexão e, crucialmente, logging detalhado. Este tutorial vai além do básico, explorando como transformar o UFW em uma ferramenta robusta de defesa e auditoria.
Vamos configurar um firewall que não apenas bloqueie acessos indesejados, mas também forneça visibilidade sobre tentativas de intrusão e comportamentos anômalos, integrando-se perfeitamente com ferramentas como Fail2ban e CrowdSec.
1. Preparação do Ambiente e Prevenção de Bloqueio
Antes de aplicar qualquer regra avançada, é imperativo garantir que você não se bloqueie fora do servidor, especialmente se estiver operando remotamente via SSH. O UFW possui um recurso nativo chamado maxtries que protege contra bloqueios acidentais por falhas na rede.
Primeiro, verifique o status atual do firewall:
sudo ufw status verbose
Se o UFW estiver inativo, ative-o apenas após configurar as regras essenciais. Se já estiver ativo, certifique-se de que a regra SSH está presente e correta:
sudo ufw allow ssh
# Ou, para uma porta não padrão:
sudo ufw allow 2222/tcp
Para ambientes críticos, recomenda-se permitir o acesso apenas de um IP específico (seu) durante a configuração inicial:
sudo ufw allow from SEU_IP_PUBLICO/32 to any port 22
Além disso, verifique a configuração do /etc/default/ufw. A variável DEFAULT_INPUT_POLICY deve ser definida como deny (incomunicável) e DEFAULT_OUTPUT_POLICY como accept, garantindo que tudo o que não for explicitamente permitido seja bloqueado.
2. Regras Complexas: Sub-redes, Interfaces e Portas Múltiplas
O UFW suporta sintaxes avançadas que permitem granularidade fina no controle de tráfego. Isso é essencial para hardening VPS em arquiteturas modernas.
Permitindo Sub-redes Integras (CIDR)
Em vez de liberar IPs individuais, você pode permitir o acesso a partir de uma sub-rede inteira. Isso é útil se seu servidor precisa aceitar conexões de uma rede interna corporativa ou de uma faixa de IPs de um provedor de CDN.
# Permitir acesso SSH apenas da sub-rede 10.0.0.0/24
sudo ufw allow from 10.0.0.0/24 to any port 22
Liberando Múltiplas Portas de uma Vez
Para serviços que operam em portas adjacentes ou sequenciais, o UFW permite especificar intervalos e listas.
# Liberar portas 8080 a 8090
sudo ufw allow 8080:8090/tcp
# Liberar SSH (22) e HTTP (80) simultaneamente
sudo ufw allow 22,80/tcp
Restrições por Interface de Rede
Em servidores com múltiplas interfaces (ex: eth0 para a internet e eth1 para uma rede privada/vlan), você pode restringir regras a uma interface específica. Isso impede que regras destinadas à rede interna sejam acidentalmente aplicadas à interface pública.
# Permitir tráfego HTTP apenas na interface eth0 (internet)
sudo ufw allow in on eth0 to any port 80
# Permitir acesso ao banco de dados apenas na interface eth1 (privada)
sudo ufw allow in on eth1 to any port 3306
3. Controle Rigoroso de Tráfego de Saída (Outbound)
Um erro comum em configurações de firewall linux é manter a política de saída como accept. Em um cenário de comprometimento, se um atacante explorar uma vulnerabilidade na aplicação web, ele poderá usar o servidor como ponte para ataques DDoS ou baixar malware. Hardening VPS exige que você restrinja a saída.
Defina a política padrão de saída para deny:
sudo ufw default deny outgoing
Agora, libere apenas o necessário. Para um servidor web típico, você precisará de:
- DNS: Para resolver nomes de domínio.
- NTP: Para sincronização de tempo.
- HTTP/HTTPS: Se o servidor precisar baixar atualizações ou acessar APIs externas.
# Permitir DNS (UDP e TCP)
sudo ufw allow out 53
# Permitir NTP
sudo ufw allow out 123/udp
# Permitir saídas HTTP e HTTPS
sudo ufw allow out www
sudo ufw allow out https
Se você estiver usando um sistema gerenciado ou cloud, verifique se há regras de saída necessárias para metadados (ex: 169.254.169.254) que não devem ser bloqueadas.
4. Logging UFW: Auditoria e Detecção de Ameaças
O logging é o componente mais subestimado na segurança de servidores. Sem logs, você está operando no escuro. O UFW pode registrar tentativas de conexão bloqueadas, permitindo que você identifique scanners de portas e tentativas de brute force.
Níveis de Logging
Os níveis disponíveis são: off, low, medium, high e full.
- low: Registra cada nova conexão (recomendado para a maioria dos casos).
- medium: Adiciona informações sobre pacotes já estabelecidos.
- high: Registra quase todos os pacotes. Cuidado com o volume de logs em servidores com muito tráfego.
Para ativar o logging no nível baixo, edite o arquivo /etc/ufw/ufw.conf ou use o comando:
sudo ufw logging low
Os logs do UFW são enviados para o daemon syslog. Em sistemas modernos com rsyslog, eles geralmente aparecem em /var/log/syslog ou /var/log/ufw.log (se configurado separadamente).
Analisando Logs para Segurança
Você pode usar comandos simples para identificar endereços IP que estão sendo bloqueados repetidamente:
sudo grep 'UFW BLOCK' /var/log/syslog | awk '{print $10}' | sort | uniq -c | sort -nr | head -n 10
Este comando extrai os IPs de origem das linhas de bloqueio, conta as ocorrências e lista os top 10 mais frequentes. Esses são seus principais candidatos para banimento automático.
5. Integração com Fail2ban e CrowdSec
O UFW é uma ferramenta estática; ele não muda suas regras dinamicamente baseado no comportamento do usuário. Para isso, integre-o com ferramentas de resposta a incidentes.
Falha 1: Configurando o Fail2ban
O Fail2ban monitora logs (como auth.log para SSH ou access.log para Nginx/Apache) e injeta regras temporárias no firewall. O UFW possui um filtro nativo para o Fail2ban.
Instale o fail2ban:
sudo apt install fail2ban
Edite a configuração do jail em /etc/fail2ban/jail.local:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
backend = systemd
bantime = 3600
maxretry = 3
[nginx-http-auth]
enabled = true
port = http,https
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
bantime = 3600
Configure o backend para usar o UFW. No arquivo /etc/fail2ban/action.d/ufw.conf, garanta que a configuração esteja correta. O Fail2ban enviará comandos como sudo ufw deny from IP quando um cliente for banido.
Falha 2: Migrando para CrowdSec
O CrowdSec é uma alternativa moderna e colaborativa ao Fail2ban. Ele usa inteligência coletiva de ameaças. Para integrar com o UFW, instale a coleção específica:
sudo apt install crowdsec-firewall-bouncer-ufw
O bouncer do CrowdScen monitorará as decisões da API central e aplicará bloqueios no UFW automaticamente. Isso oferece proteção contra IPs maliciosos que foram identificados em outros servidores ao redor do mundo, não apenas localmente.
6. Regras de Salvaguarda e Rollback
Em ambientes complexos, a ordem das regras importa. O UFW processa regras na ordem em que são adicionadas. Se uma regra geral permitir todo o tráfego for colocada antes de uma regra específica de bloqueio, o bloqueio será ignorado.
Para visualizar a ordem:
sudo ufw status numbered
Isso exibirá as regras com números entre colchetes, como [1], [2]. Se você precisar inserir uma regra crítica no topo (alta prioridade), use o índice:
sudo ufw insert 1 deny from 192.168.1.100
Isso move a regra para a posição 1, garantindo que ela seja avaliada antes de qualquer regra de permissão.
Risco e Recuperação
Sempre tenha um plano B. Se você perder a conexão SSH devido a uma configuração errada:
- Acesso Console: Use o console web do seu provedor de VPS (AWS EC2 Instance Connect, DigitalOcean Console, etc.).
- Modo Emergência: Alguns provedores oferecem um "Recovery Mode" que monta o disco sem carregar o firewall ativo.
- Comando de Desastre: Se tiver acesso root via outro método,
sudo ufw disableé seu melhor amigo. Para remover uma regra específica:sudo ufw delete [número].
7. Boas Práticas Finais de Hardening
A segurança é um processo contínuo, não um destino. Após configurar seu UFW avançado, adote os seguintes hábitos:
- Revisão Periódica: Execute
sudo ufw status verbosesemanalmente para garantir que nenhuma regra "fantasma" ou desatualizada permaneça. - Backup de Configuração: Salve o estado atual do firewall. Embora o UFW não tenha um comando nativo de "snapshot", você pode copiar o arquivo
/etc/ufw/user.rulese/etc/ufw/before.rulespara um repositório seguro. - Monitoramento Ativo: Não basta ter logs; é preciso lê-los. Configure alertas no seu sistema de monitoramento (Zabbix, Prometheus, Datadog) para disparar quando o volume de
UFW BLOCKaumentar drasticamente em um curto período. - Atualização do Kernel: O UFW depende do netfilter do kernel. Mantenha seu sistema atualizado para garantir que patches de segurança críticos sejam aplicados.
Conclusão
Configurar o UFW em nível avançado transforma um servidor Linux padrão em uma fortaleza digital resiliente. Ao combinar regras granulares de sub-redes e interfaces, restringir rigorosamente a saída e integrar logs com ferramentas de resposta automática como Fail2ban e CrowdSec, você reduz significativamente a superfície de ataque.
Lembre-se: a configuração de firewall deve seguir o princípio do menor privilégio. Se um serviço não precisa de acesso à rede, ele não deve tê-lo. Com essas práticas, você estará bem equipado para manter sua infraestrutura segura contra as ameaças modernas da web.