Guia Completo · Passo a Passo

Firewall no Linux:
iptables, UFW e nftables

Aprenda a configurar firewalls do zero, desde comandos básicos até técnicas avançadas com exemplos práticos e explicações detalhadas.

Sobre os firewalls

O Linux oferece diferentes sistemas de firewall. O iptables é o clássico, o UFW é uma camada de facilidade sobre ele, e o nftables é o sucessor moderno. Abaixo você encontra explicações divididas em níveis de dificuldade para cada um.

iptables
Clássico e poderoso
UFW
Simples e amigável
nftables
Moderno e performático
Nível Básico

Primeiros passos

Aprenda os comandos fundamentais para começar a usar firewall no Linux. Todos os exemplos são práticos e testados.

iptables - Comandos iniciais

1

Ver regras atuais

iptables -L -n -v

Lista todas as regras com contadores de pacotes e bytes. A opção -n evita resolução de DNS (mais rápido).

2

Limpar regras existentes

iptables -F

Remove todas as regras das cadeias padrão (INPUT, OUTPUT, FORWARD). Cuidado: isso pode deixar o sistema desprotegido momentaneamente.

3

Aceitar SSH

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

-A INPUT adiciona no final da cadeia INPUT.
-p tcp protocolo TCP.
--dport 22 porta de destino 22 (SSH).
-j ACCEPT aceita o pacote.

4

Configurar política padrão

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

Define que todo tráfego de entrada (INPUT) e encaminhado (FORWARD) será bloqueado por padrão, exceto regras explícitas. Saída (OUTPUT) é permitida.

📌 Exemplo completo - Servidor web básico

# Limpa regras
iptables -F

# Permite SSH (porta 22) e HTTP (porta 80)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# Permite respostas de conexões estabelecidas
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# Permite loopback
iptables -A INPUT -i lo -j ACCEPT

# Bloqueia todo o resto
iptables -P INPUT DROP

UFW - Uncomplicated Firewall

1

Verificar status

ufw status

Mostra se o UFW está ativo e as regras atuais.

2

Permitir SSH

ufw allow ssh

Equivalente a ufw allow 22/tcp. UFW entende nomes de serviços do arquivo /etc/services.

3

Permitir porta específica

ufw allow 80/tcp   # HTTP
ufw allow 443/tcp  # HTTPS
4

Ativar o firewall

ufw enable

ATENÇÃO: Antes de ativar, certifique-se de que o SSH está permitido, ou você pode perder acesso remoto!

⚠️ Dica importante

Sempre verifique as regras antes de ativar: ufw show added. Para resetar: ufw reset.

Nível Médio

Controle de estados e logging

iptables - Conexões estabelecidas e logs

1

Permitir conexões estabelecidas

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Usa o módulo conntrack para rastrear conexões. Permite respostas de conexões que iniciamos (ESTABLISHED) e conexões relacionadas (RELATED), como FTP passive mode.

2

Criar cadeia personalizada para logging

# Cria cadeia chamada LOGGING
iptables -N LOGGING

# Direciona pacotes para a cadeia LOGGING
iptables -A INPUT -j LOGGING

# Na cadeia LOGGING: faz log e depois descarta
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
iptables -A LOGGING -j DROP

-m limit --limit 2/min limita o log a 2 mensagens por minuto para não encher o disco. O prefixo ajuda a identificar no syslog.

3

Ver logs

tail -f /var/log/syslog | grep "IPTables-Dropped"

UFW - Logs e limitação de conexões

1

Ativar logging

ufw logging on

Ativa logs no nível médio (padrão). Os logs vão para /var/log/ufw.log.

2

Limitar taxa de conexões (rate limiting)

ufw limit ssh/tcp

Aplica um limitador de taxa: permite 6 conexões por 30 segundos. Útil para proteger contra força bruta.

3

Negar acesso de uma rede específica

ufw deny from 192.168.1.0/24
ufw deny from 10.0.0.0/8 to any port 22

Bloqueia toda a rede 192.168.1.0/24, ou bloqueia acesso SSH da rede 10.0.0.0/8.

Nível Avançado

Performance e persistência

iptables - Tabelas especiais

1

Mangle - Marcar pacotes

iptables -t mangle -A PREROUTING -p tcp --dport 80 -j MARK --set-mark 1

A tabela mangle permite modificar pacotes. Aqui marcamos pacotes HTTP com a marca 1, que pode ser usada para roteamento ou QoS.

2

Raw - Evitar rastreamento

iptables -t raw -A PREROUTING -p icmp -j NOTRACK

NOTRACK impede que o pacote seja rastreado pelo conntrack, reduzindo overhead. Útil para tráfego de alta taxa como ICMP.

3

Salvar e restaurar regras

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

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

# Para ipv6
ip6tables-save > /etc/iptables/rules.v6

No Debian/Ubuntu, o pacote iptables-persistent automatiza isso.

nftables

O sucessor moderno

O nftables é o firewall que substitui o iptables no Linux moderno. Oferece sintaxe mais limpa, performance melhor e maior flexibilidade.

📘 Nível Básico - Primeiros comandos

1

Verificar se nftables está instalado

nft list ruleset

Lista todas as regras ativas. Se aparecer vazio, o nftables está ativo sem regras.

2

Criar uma tabela

nft add table inet filter

inet significa que a tabela funciona para IPv4 e IPv6. filter é o nome da tabela.

3

Criar uma cadeia (chain)

nft add chain inet filter input { type filter hook input priority 0; }

Define a cadeia input com hook input (pacotes de entrada) e prioridade 0.

4

Adicionar regra - permitir SSH

nft add rule inet filter input tcp dport 22 accept

Sintaxe mais limpa que iptables: tcp dport 22 accept.

5

Permitir conexões estabelecidas

nft add rule inet filter input ct state established,related accept

📗 Nível Médio - Conjuntos e mapas

1

Criar um conjunto (set) de portas

nft add set inet filter allowed_ports { type inet_service\; }

Conjuntos permitem agrupar elementos para regras mais eficientes.

2

Adicionar portas ao conjunto

nft add element inet filter allowed_ports { 22, 80, 443 }
3

Usar o conjunto em uma regra

nft add rule inet filter input tcp dport @allowed_ports accept

Agora uma única regra aceita todas as portas do conjunto.

📙 Nível Avançado - Performance e persistência

1

Ver estatísticas

nft list ruleset -a

Mostra handles (identificadores) para referenciar regras.

2

Remover regra específica

nft delete rule inet filter input handle 3
3

Salvar regras permanentemente

# Salvar
nft list ruleset > /etc/nftables.conf

# Restaurar
nft -f /etc/nftables.conf

# Ativar no boot (Debian/Ubuntu)
systemctl enable nftables
systemctl start nftables
4

Exemplo completo - Firewall básico com nftables

#!/usr/sbin/nft -f

flush ruleset

table inet filter {
    chain input {
        type filter hook input priority 0; policy drop;
        
        # Permitir loopback
        iif lo accept
        
        # Permitir conexões estabelecidas
        ct state established,related accept
        
        # Permitir SSH, HTTP, HTTPS
        tcp dport {22, 80, 443} accept
        
        # Log e drop do resto
        log prefix "NFTables-Dropped: " limit rate 3/minute
        drop
    }
    
    chain forward {
        type filter hook forward priority 0; policy drop;
    }
    
    chain output {
        type filter hook output priority 0; policy accept;
    }
}

💡 Vantagens do nftables

  • Sintaxe mais limpa e consistente
  • Suporte nativo a IPv4 e IPv6 (família inet)
  • Conjuntos e mapas para regras mais eficientes
  • Melhor performance e menor uso de memória
  • Scripts mais legíveis e organizados

📊 Comparação rápida

Funcionalidade iptables UFW nftables
Facilidade de uso ⚡⚡ ⚡⚡⚡⚡⚡ ⚡⚡⚡
Performance ⚡⚡⚡ ⚡⚡ ⚡⚡⚡⚡⚡
Flexibilidade ⚡⚡⚡⚡ ⚡⚡⚡⚡⚡
Suporte a IPv4/IPv6 Separado Integrado Integrado