Redes e Segurança

Firewall com iptables e nftables: regras, chains e NAT

• 6 min de leitura

Firewall com iptables e nftables: regras, chains e NAT
O firewall no Linux é implementado através do subsistema Netfilter, uma arquitetura integrada ao kernel que permite interceptar, inspecionar e modificar pacotes de rede. Os conceitos fundamentais envolvem o tratamento de pacotes IP, a filtragem baseada em critérios como endereços, portas e protocolos, e o rastreamento de estado de conexão (conntrack), que permite políticas stateful — onde decisões são tomadas com base no contexto da conexão.

Firewall com iptables e nftables: regras, chains e NAT

1. Introdução ao Firewall no Linux

O firewall no Linux é implementado através do subsistema Netfilter, uma arquitetura integrada ao kernel que permite interceptar, inspecionar e modificar pacotes de rede. Os conceitos fundamentais envolvem o tratamento de pacotes IP, a filtragem baseada em critérios como endereços, portas e protocolos, e o rastreamento de estado de conexão (conntrack), que permite políticas stateful — onde decisões são tomadas com base no contexto da conexão.

O Netfilter oferece hooks em pontos estratégicos do stack de rede, como PREROUTING (antes da decisão de roteamento), INPUT (pacotes destinados ao host local), FORWARD (pacotes roteados), OUTPUT (pacotes gerados localmente) e POSTROUTING (após o roteamento). Sobre esses hooks, iptables e nftables constroem suas estruturas de regras.

As diferenças entre iptables (legado) e nftables (moderno) são significativas. O iptables utiliza uma sintaxe com múltiplos comandos separados (iptables, ip6tables, arptables, ebtables), enquanto o nftables unifica todas as famílias de endereços em um único framework, oferece melhor desempenho com conjuntos (sets) otimizados e permite atomicidade na aplicação de regras.

2. Estrutura do iptables: Tables, Chains e Regras

O iptables organiza regras em tables e chains. As principais tables são:

  • filter: padrão para filtragem de pacotes
  • nat: modificação de endereços (NAT)
  • mangle: alteração de cabeçalhos de pacotes
  • raw: bypass do rastreamento de conexão
  • security: políticas SELinux

Cada table possui chains built-in. Para a table filter, as chains são INPUT, OUTPUT e FORWARD. Para nat, temos PREROUTING, POSTROUTING e OUTPUT. Cada regra segue a anatomia:

iptables -t <table> -A <chain> <match> -j <target>

Os targets comuns incluem ACCEPT (permitir), DROP (descartar silenciosamente), REJECT (rejeitar com mensagem), LOG (registrar) e RETURN (retornar à chain anterior).

3. Criando e Gerenciando Regras com iptables

Comandos básicos para gerenciamento:

# Listar regras da table filter, chain INPUT com numeração
iptables -L INPUT -n -v --line-numbers

# Adicionar regra para permitir SSH (porta 22)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# Inserir regra no topo da chain
iptables -I INPUT 1 -p icmp --icmp-type echo-request -j DROP

# Deletar regra específica
iptables -D INPUT -p tcp --dport 22 -j ACCEPT

# Liberar tráfego local (loopback)
iptables -A INPUT -i lo -j ACCEPT

# Bloquear ping externo
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

# Limpar todas as regras
iptables -F
iptables -t nat -F
iptables -t mangle -F

Para persistência, utilize:

# Salvar regras atuais
iptables-save > /etc/iptables/rules.v4

# Restaurar regras
iptables-restore < /etc/iptables/rules.v4

4. NAT (Network Address Translation) com iptables

O NAT modifica endereços de origem (SNAT) ou destino (DNAT) dos pacotes. O MASQUERADE é uma forma especial de SNAT para interfaces com IP dinâmico.

Exemplo de compartilhamento de internet em LAN:

# Habilitar roteamento IP
echo 1 > /proc/sys/net/ipv4/ip_forward

# Configurar MASQUERADE na interface externa (eth0)
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# Permitir tráfego forward da LAN (eth1) para externo
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT

Redirecionamento de porta (DNAT) para servidor interno:

# Redirecionar porta 8080 externa para 80 interno (192.168.1.10)
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.10:80
iptables -A FORWARD -p tcp -d 192.168.1.10 --dport 80 -j ACCEPT

5. Introdução ao nftables: Sintaxe e Estrutura

O nftables substitui o iptables com uma sintaxe unificada e mais clara. Trabalha com famílias de endereços: inet (IPv4+IPv6), ip, ip6, arp, bridge.

A estrutura básica:

nft add table inet firewall
nft add chain inet firewall input { type filter hook input priority 0 \; }
nft add rule inet firewall input tcp dport 22 accept

Diferenças notáveis: as regras podem ser carregadas atomicamente via arquivo, e as chains podem ser base (com hook) ou não-base (para organização).

Exemplo de arquivo completo:

# /etc/nftables.conf
table inet firewall {
    chain input {
        type filter hook input priority 0; policy drop;
        iif lo accept
        ct state established,related accept
        tcp dport 22 accept
        icmp type echo-request accept
    }
    chain forward {
        type filter hook forward priority 0; policy drop;
    }
    chain output {
        type filter hook output priority 0; policy accept;
    }
}

Carregar com: nft -f /etc/nftables.conf

6. Regras e Conjuntos (Sets) no nftables

Os sets permitem otimizar regras com listas de IPs ou portas:

table inet firewall {
    set allowed_ips {
        type ipv4_addr
        elements = { 192.168.1.0/24, 10.0.0.5 }
    }
    set blocked_ports {
        type inet_service
        elements = { 23, 445, 3389 }
    }
    chain input {
        type filter hook input priority 0; policy drop;
        ip saddr @allowed_ips tcp dport 22 accept
        tcp dport @blocked_ports drop
    }
}

Firewall básico para servidor web e SSH:

table inet firewall {
    chain input {
        type filter hook input priority 0; policy drop;
        iif lo accept
        ct state established,related accept
        tcp dport { 22, 80, 443 } accept
        ip protocol icmp accept
    }
}

7. NAT e Roteamento com nftables

SNAT e DNAT em nftables seguem sintaxe específica:

# SNAT (mascaramento)
table ip nat {
    chain postrouting {
        type nat hook postrouting priority 100;
        oif eth0 masquerade
    }
}

# DNAT (redirecionamento de porta)
table ip nat {
    chain prerouting {
        type nat hook prerouting priority -100;
        tcp dport 8080 dnat to 192.168.1.10:80
    }
}

Comparativo com iptables:

# iptables
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.10:80

# nftables
nft add rule ip nat prerouting tcp dport 8080 dnat to 192.168.1.10:80

Integração com conntrack para políticas stateful:

table inet firewall {
    chain input {
        type filter hook input priority 0; policy drop;
        ct state invalid drop
        ct state { established, related } accept
        tcp dport 22 accept
    }
}

8. Migração de iptables para nftables e Boas Práticas

A ferramenta iptables-translate converte regras individuais:

# Converter regra iptables para nftables
iptables-translate -A INPUT -p tcp --dport 22 -j ACCEPT
# Saída: nft add rule ip filter INPUT tcp dport 22 accept

Para migração completa, use:

# Listar ruleset atual em formato nftables
nft list ruleset > /etc/nftables.conf

Estratégias de migração:
- Gradual: converter regras uma a uma, testando em ambiente de staging
- Híbrida: usar iptables legado enquanto migra serviços críticos
- Completa: substituir todo o ruleset de uma vez, com rollback planejado

Boas práticas essenciais:
- Documentar cada regra com comentários
- Ordenar regras da mais específica para a mais genérica
- Incluir regras de logging para tráfego rejeitado
- Realizar limpeza periódica de regras obsoletas
- Versionar arquivos de configuração em sistemas de controle

# Exemplo de regra com logging
nft add rule inet firewall input tcp dport 23 log prefix "BLOCKED_TELNET: " drop

A migração para nftables oferece benefícios de desempenho, manutenção simplificada e sintaxe mais expressiva, sendo o padrão recomendado para novas implementações em kernels modernos.

Referências

💬 Comentários
Mais em Redes e Segurança