IPTables no Debian 12
Neste tutorial, vamos explorar os comandos básicos do iptables, uma ferramenta essencial para gerir regras de firewall no Debian 12.
Acabaste de montar um servidor Debian 12. Está online, com SSH a funcionar, talvez um Apache ou Nginx. Mas está aberto ao mundo. Cada porta à escuta é uma potencial entrada para alguém menos bem-intencionado.
É aqui que o iptables entra. Firewall no Linux há décadas, robusto, testado e conhecido por qualquer sysadmin.
Neste tutorial vais aprender a configurar um firewall funcional no Debian 12 — não apenas comandos soltos, mas uma configuração coesa que podes usar num servidor real.
Nota sobre o Debian 12 e nftables: O Debian 12 (Bookworm) usa o nftables como framework de firewall padrão. No entanto, o iptables continua disponível e, por baixo do capot, usa o backend nft (é o iptables-legacy vs iptables-nft). Para uso diário, os comandos são os mesmos de sempre. Se preferires usar nft diretamente, esse é outro tópico — este artigo foca-se no iptables clássico.
Antes de começar
Precisas de:
- Um servidor com Debian 12 (ou qualquer distro baseada em Debian)
- Acesso root ou sudo
- SSH (ou acesso físico ao terminal) — importante: nunca percas o acesso ao servidor enquanto configuras o firewall
Vamos confirmar que o iptables está instalado (num sistema mínimo pode não estar; nesse caso, instala-o com sudo apt install iptables):
Em Debian 12 deves ver algo como iptables v1.8.9 (nf_tables) (no Debian 13 é a versão 1.8.11) — a indicação (nf_tables) confirma que estás a usar o backend nft.
1. Ver o estado atual das regras
Antes de fazer qualquer alteração, vê o que existe:
Se o servidor é novo, a saída deve estar vazia (sem regras) com todas as políticas em ACCEPT. Guarda esta saída — se algo correr mal, sabes o que tinhas antes.
Para ver com números de linha (útil para remover regras mais tarde):
Exemplo de saída do iptables com regras de firewall configuradas
2. Como o iptables processa os pacotes
Antes de começares a criar regras, é importante perceber como os pacotes circulam pelas chains do iptables:
O percurso de um pacote da rede até ao servidor (ou através dele)
Há três cadeias principais que deves conhecer:
| Cadeia | Direção | O que controla |
|---|---|---|
| INPUT | Tráfego a entrar no servidor | SSH, HTTP, etc. |
| OUTPUT | Tráfego a sair do servidor | Atualizações, DNS, etc. |
| FORWARD | Tráfego a atravessar o servidor | Usado se o servidor for router |
3. Políticas padrão — a base de tudo
As políticas padrão (default policies) definem o que acontece a um pacote que não corresponde a nenhuma regra.
A abordagem mais segura é:
- Por defeito, negar tudo (DROP)
- Permitir apenas o necessário (ACCEPT)
Atenção: Se aplicares -P INPUT DROP antes de permitir SSH, perdes o acesso ao servidor remotamente. Faz as regras de permissão primeiro!
4. Stateful firewall — o conntrack
Um firewall sem estado é um firewall incompleto. Se só permitires SSH na porta 22, os pacotes de resposta também precisam de entrar. A solução é usar o módulo conntrack:
O conntrack regista cada conexão — o tráfego de resposta é automaticamente permitido
Esta regra diz: "deixa entrar pacotes que pertencem a conexões que já autorizámos". Sem isto, vais ter de abrir portas arbitrárias para o tráfego de resposta.
5. Regras básicas de INPUT
Permitir SSH (porta 22)
Se mudaste a porta SSH (e devias), substitui 22 pela porta que usas.
Permitir loopback (localhost)
Serviços que comunicam via localhost precisam desta regra:
Dica: A interface lo é usada para comunicação interna entre processos no mesmo servidor. Sem esta regra, serviços como MySQL ou PostgreSQL podem deixar de funcionar.
Permitir HTTP e HTTPS (se aplicável)
Se o servidor tem um site:
Bloquear um IP específico
Com -I INPUT 1 a regra entra no topo da cadeia, antes das regras de permissão. O iptables processa as regras por ordem, e um -A acrescentá-la-ia no fim, onde um pacote desse IP já teria sido aceite antes.
6. Logging — saber o que está a ser bloqueado
Regras DROP silenciosas são um pesadelo para depurar. Adiciona logging antes de bloquear:
Coloca esta regra antes da política padrão DROP. Os logs vão para /var/log/syslog ou /var/log/kern.log.
Dica: Em produção, usa logging com moderação ou com -m limit --limit 5/min para evitar encher o disco com logs.
7. Remover e modificar regras
Remover por número de linha:
Remover por correspondência exata:
Limpar tudo (usar com cuidado!):
8. Script de configuração completo
Em vez de correr comandos um a um, cria um script. Facilita repetir a configuração e evita erros:
Torna o script executável:
9. Persistência — tornar as regras permanentes
As regras do iptables são voláteis. Um reboot e desaparecem. Para as manter:
Durante a instalação, o Debian pergunta se queres guardar as regras atuais. Responde "Sim" ou corre depois:
Para restaurar manualmente:
O serviço netfilter-persistent carrega estas regras automaticamente ao arranque.
10. IPv6 — não te esqueças
Tudo o que fizeste até agora aplica-se apenas a IPv4. Se o teu servidor tem IPv6 ativo (e hoje em dia é provável), precisas do ip6tables:
11. Verificar a configuração
Depois de aplicares as regras, testa:
Se tiveres outro servidor, usa o nmap para ver portas abertas:
Apenas as portas que permitiste devem aparecer como open.
Conclusão
Neste artigo, configuraste um firewall funcional com iptables no Debian 12:
- Definiste políticas padrão restritivas
- Permitiste apenas os serviços necessários (SSH, HTTP, HTTPS)
- Adicionaste stateful firewall com conntrack
- Configuraste logging para depuração
- Tornaste as regras persistentes
Agora o teu servidor está mais protegido, mas não é impenetrável: já fechaste as portas que não precisas de expor, e o resto (atualizações, fail2ban, monitorização) continua a ser trabalho contínuo.
Próximos passos sugeridos:
- Explorar nftables nativo (o sucessor moderno do iptables)
- Configurar fail2ban para bloquear ataques de força bruta
- Restringir regras de OUTPUT para impedir exfiltração de dados
- Usar auditd para monitorizar alterações no sistema
Dica final: Sempre que alterares regras, testa antes de tornar permanente. Um iptables -F remoto sem acesso físico pode dar mau resultado. Mantém sempre uma sessão SSH ativa enquanto testas.
Experimenta no teu servidor. Deixa um comentário se tiveres dúvidas — ou se achares que falta algo importante neste guia.
Recursos
Partilhar
Comentários 0
Ainda sem comentários — sê o primeiro.