Fundamentos de iptables e nftables: Introducao a Filtragem de Pacotes

Fundamentos de iptables e nftables: Introducao a Filtragem de Pacotes

Qual e a Diferenca Entre iptables e nftables?

O iptables tem sido a ferramenta de firewall padrao do Linux por decadas, mas o nftables e agora o substituto moderno. O Ubuntu 22.04 e posteriores usam nftables por padrao (via uma camada de compatibilidade iptables-nft). A regra pratica e: use iptables para manter servidores existentes, e nftables para novas configuracoes.

Atributo iptables nftables
Introduzido 1998 2014 (Linux 3.13)
Sintaxe Complexa, verbosa Unificada, concisa
IPv4/IPv6 Separado (ip6tables) Unificado (familia inet)
Ubuntu 22.04 Via camada iptables-nft Nativo

No Ubuntu 22.04+, executar iptables na verdade roteia internamente pelo nftables. Execute update-alternatives --list iptables para ver qual implementacao esta ativa.

Estrutura do iptables

O iptables organiza regras em uma hierarquia de tres niveis: tabela -> chain -> regra. A maior parte do trabalho de firewall acontece na tabela filter em tres chains.

As tres chains na tabela filter:

  • INPUT: Pacotes destinados a esta maquina
  • OUTPUT: Pacotes originados desta maquina
  • FORWARD: Pacotes sendo roteados (apenas configuracoes de roteador)

Alvos de regras:

  • ACCEPT: Permitir a passagem do pacote
  • DROP: Descartar silenciosamente (sem notificacao ao remetente)
  • REJECT: Descartar e enviar um erro de volta

Comandos Basicos do iptables

Sempre comece revisando as regras existentes. Use -n para pular consultas DNS e -v para contadores de pacotes.

Visualizando Regras

# Listar todas as chains com detalhes
iptables -L -n -v

# Listar a chain INPUT com numeros de linha
iptables -L INPUT -n -v --line-numbers

Adicionando Regras

# Permitir loopback (obrigatorio)
iptables -A INPUT -i lo -j ACCEPT

# Permitir conexoes estabelecidas (obrigatorio)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Permitir SSH (porta 22)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# Permitir HTTP e HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# Descartar todo o resto
iptables -A INPUT -j DROP

Excluindo e Resetando Regras

# Excluir por numero de linha (obtenha numeros com --line-numbers)
iptables -D INPUT 3

# Excluir por especificacao de regra (substitua -A por -D)
iptables -D INPUT -p tcp --dport 80 -j ACCEPT

# Limpar todas as regras em todas as chains
iptables -F

# Resetar politicas padrao para ACCEPT
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT

Se voce limpar as regras (iptables -F) enquanto a politica padrao e DROP, qualquer sessao SSH aberta sera cortada. Sempre verifique a politica padrao antes de limpar regras em um servidor remoto.

Estrutura do nftables

O nftables usa uma hierarquia de quatro niveis: familia -> tabela -> chain -> regra. Diferente do iptables, voce deve criar explicitamente tabelas e chains antes de adicionar regras. Usar a familia inet permite lidar com IPv4 e IPv6 em um unico conjunto de regras.

# Mostrar o conjunto de regras ativo inteiro
nft list ruleset

# Mostrar todas as tabelas
nft list tables

# Mostrar uma tabela especifica
nft list table inet filter

Comandos Basicos do nftables

Crie uma tabela e chain primeiro, depois adicione regras. A declaracao type filter hook input priority 0 e o padrao para uma chain de filtro de entrada.

Criando Tabelas e Chains

# Criar uma tabela
nft add table inet filter

# Criar chain INPUT com politica drop
nft add chain inet filter input '{ type filter hook input priority 0 ; policy drop ; }'

# Criar chain OUTPUT com politica accept
nft add chain inet filter output '{ type filter hook output priority 0 ; policy accept ; }'

Adicionando Regras

# Permitir loopback
nft add rule inet filter input iif lo accept

# Permitir conexoes estabelecidas
nft add rule inet filter input ct state established,related accept

# Permitir SSH
nft add rule inet filter input tcp dport 22 accept

# Permitir HTTP e HTTPS (multiplas portas em uma regra)
nft add rule inet filter input tcp dport '{ 80, 443 }' accept

Excluindo Regras

# Listar regras com numeros de handle
nft list ruleset -a

# Excluir uma regra pelo numero de handle
nft delete rule inet filter input handle 5

Resetando Todas as Regras

# Limpar o conjunto de regras inteiro
nft flush ruleset

# Ou excluir uma tabela especifica
nft delete table inet filter

Persistindo Regras Entre Reinicializacoes

Tanto as regras do iptables quanto do nftables sao perdidas na reinicializacao por padrao. A persistencia requer salvar a configuracao.

Persistindo iptables (Ubuntu)

# Instalar iptables-persistent
apt install iptables-persistent

# Salvar regras atuais
netfilter-persistent save

# Ou salvar manualmente
iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6

Persistindo nftables (Ubuntu)

# Habilitar servico nftables
systemctl enable nftables

# Salvar conjunto de regras atual no arquivo de configuracao
nft list ruleset > /etc/nftables.conf

# Reiniciar servico para verificar
systemctl restart nftables
systemctl status nftables

Template basico de /etc/nftables.conf:

#!/usr/sbin/nft -f

flush ruleset

table inet filter {
    chain input {
        type filter hook input priority 0; policy drop;

        iif lo accept
        ct state established,related accept
        tcp dport 22 accept
        tcp dport { 80, 443 } accept
    }

    chain output {
        type filter hook output priority 0; policy accept;
    }
}

No Ubuntu 22.04, o nftables.service esta incluido por padrao. Edite /etc/nftables.conf e execute systemctl restart nftables para aplicar as mudancas.

Relacao com firewalld e ufw

No RHEL / CentOS / Fedora, o firewalld atua como frontend para o nftables. No Ubuntu, o ufw (Uncomplicated Firewall) fornece uma interface mais simples para nftables/iptables e e recomendado para uso cotidiano.

# Basico do ufw (Ubuntu)
ufw status verbose
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
ufw status numbered

Para gerenciamento de firewall no dia a dia no Ubuntu, ufw e a opcao mais simples. Use iptables ou nftables diretamente quando precisar de controle refinado ou estiver construindo regras de filtragem complexas.

Proximas Leituras