Como configurar o nftables no Debian 12 e 13 com um nftables.conf comentado: SSH só para o seu IP, IPv4 e IPv6, reversão automática e ativação no boot.
Para que serve
O nftables é o firewall padrão do Debian desde a versão 10 e substitui o iptables (o comando iptables atual já é só uma camada de compatibilidade sobre ele). Se você quer controle total em vez de uma ferramenta simplificada como o UFW, este artigo mostra como configurar o nftables no Debian com um arquivo /etc/nftables.conf pronto, comentado linha a linha, e um jeito seguro de aplicá-lo sem ficar trancado fora.
O conteúdo vale para VMs e servidores com Debian 12 (bookworm) ou 13 (trixie). Não aplique no host Proxmox: ali quem controla as regras é o firewall do Proxmox.
nft flush ruleset.Pré-requisitos
- Debian 12 ou 13 com acesso
root. - Nenhum outro gerenciador de firewall ativo (UFW, firewalld). Confira com
systemctl is-active ufw firewalld. - Seu IP de administração (nos exemplos,
203.0.113.10e a rede198.51.100.0/24). - Acesso ao console da VM ou ao IPMI/iLO testado antes de começar.
Como configurar o nftables no Debian passo a passo
1. Instalar e ver o estado atual
apt update
apt install nftables
nft list ruleset
Se o último comando mostrar regras criadas por Docker, libvirt ou fail2ban, leia a seção "Problemas comuns" antes de continuar: o arquivo abaixo começa com flush ruleset, que apaga tudo.
2. Fazer backup do arquivo atual
cp /etc/nftables.conf /root/nftables.conf.bak
3. Escrever o novo /etc/nftables.conf
Ajuste os IPs do conjunto admin_v4 (e admin_v6, se você administra por IPv6) e as portas públicas:
#!/usr/sbin/nft -f
# Apaga todas as regras carregadas antes de aplicar as novas
flush ruleset
# "inet" = uma única tabela para IPv4 e IPv6
table inet filter {
# IPs autorizados a administrar (SSH). "interval" permite redes /24 etc.
set admin_v4 {
type ipv4_addr
flags interval
elements = { 203.0.113.10, 198.51.100.0/24 }
}
set admin_v6 {
type ipv6_addr
flags interval
# elements = { 2001:db8:10::/64 }
}
chain input {
# Política padrão: descarta o que não for liberado abaixo
type filter hook input priority filter; policy drop;
# Respostas de conexões já abertas passam; pacotes inválidos caem
ct state vmap { established : accept, related : accept, invalid : drop }
# Tráfego interno da própria máquina
iif "lo" accept
# ICMPv6 é obrigatório para o IPv6 funcionar (descoberta de vizinhos)
meta l4proto ipv6-icmp accept
# Ping IPv4, com limite para não virar vetor de abuso
icmp type echo-request limit rate 5/second accept
# SSH apenas para os IPs de administração
tcp dport 22 ip saddr @admin_v4 accept
tcp dport 22 ip6 saddr @admin_v6 accept
# Serviços públicos (ajuste ou remova)
tcp dport { 80, 443 } accept
# Registra no log (com limite) o que for bloqueado
limit rate 10/minute log prefix "nft-drop: " level info
}
chain forward {
# Esta máquina não roteia tráfego de terceiros
type filter hook forward priority filter; policy drop;
}
chain output {
# Saída liberada
type filter hook output priority filter; policy accept;
}
}
Valide a sintaxe sem aplicar nada:
nft -c -f /etc/nftables.conf
Sem saída significa que o arquivo está correto.
4. Aplicar com reversão automática
Agende a limpeza das regras para daqui a 5 minutos e, em seguida, carregue o novo arquivo:
systemd-run --on-active=5m --unit=nft-rollback /usr/sbin/nft flush ruleset
nft -f /etc/nftables.conf
Sem fechar a sessão atual, abra uma nova conexão SSH. Se funcionar, cancele a reversão:
systemctl stop nft-rollback.timer
Se a nova conexão falhar, espere os 5 minutos: as regras serão removidas e você volta a entrar para corrigir.
5. Ativar no boot
systemctl enable --now nftables.service
O serviço carrega /etc/nftables.conf a cada inicialização.
Como saber se funcionou
nft list rulesetmostra a tabelainet filtercom as suas regras.systemctl is-enabled nftablesretornaenabled.- De um IP não autorizado (por exemplo, o 4G do celular),
nc -vz IP-DO-SERVIDOR 22deve dar timeout, e a porta 443 deve conectar. - Os bloqueios aparecem em
journalctl -k | grep nft-drop. - Reinicie a máquina e confira de novo com
nft list ruleset.
Manutenção sem recarregar tudo
Para incluir um IP de administração em tempo real:
nft add element inet filter admin_v4 { 192.0.2.25 }
Essa alteração some no próximo reboot. Para torná-la permanente, inclua o IP também no /etc/nftables.conf. Para remover: nft delete element inet filter admin_v4 { 192.0.2.25 }.
Para liberar uma porta adicional permanentemente, edite o arquivo, valide com nft -c -f e aplique de novo com o procedimento do passo 4.
Problemas comuns
- Docker, libvirt ou fail2ban pararam de funcionar. O
flush rulesetapagou as tabelas que eles criam. Reinicie esses serviços depois de aplicar as regras (systemctl restart docker,systemctl restart fail2ban). Em máquinas com Docker, considere remover oflush rulesete trocar portable inet filter+delete table inet filterpara mexer só na sua tabela. Veja também o artigo «Docker ignora o UFW: por que acontece e como corrigir o firewall». - IPv6 parou de funcionar. Faltou a linha que libera ICMPv6. Sem ela o servidor não responde à descoberta de vizinhos e perde a conectividade IPv6.
- Erro "Could not process rule: No such file or directory". Geralmente é um conjunto citado (
@admin_v4) com nome diferente do declarado. - Perdi o acesso e a reversão não estava agendada. Entre pelo console da VM no Proxmox ou pelo IPMI/iLO, rode
nft flush ruleset, restaure o backup comcp /root/nftables.conf.bak /etc/nftables.confe corrija.
Perguntas frequentes
O nftables substitui o iptables?
Sim. Ele é o firewall padrão do Debian desde a versão 10, e o comando iptables atual é só uma camada de compatibilidade sobre o nftables.
Onde fica o arquivo de regras do nftables no Debian?
Em /etc/nftables.conf. O serviço nftables carrega esse arquivo a cada inicialização, depois de habilitado com systemctl enable --now nftables.
Como testar as regras do nftables sem aplicar?
Rode nft -c -f /etc/nftables.conf. Se não houver saída, a sintaxe está correta.
Posso usar este nftables.conf no host Proxmox?
Não. No host Proxmox quem controla as regras é o firewall do próprio Proxmox; use este arquivo em VMs ou servidores com Debian.
Por que o IPv6 parou de funcionar depois do nftables?
Provavelmente faltou liberar o ICMPv6. Sem ele o servidor não responde à descoberta de vizinhos e perde a conectividade IPv6.
Precisa de ajuda?
Se ficou alguma dúvida, abra um ticket ou fale com o suporte pelo WhatsApp.
