Segurança

Firewall além do básico

Configurações avançadas de iptables e nftables para proteção real de servidores Linux expostos à internet.

Por WSUL Tecnologia — 9 de abril de 2025  ·  8 min de leitura

Fundamentos do netfilter

O firewall no Linux é implementado pelo netfilter, um framework de filtragem de pacotes no kernel. As ferramentas em espaço de usuário — iptables, nftables e ufw — são interfaces para configurar as regras do netfilter.

Entender a ordem de processamento das regras é essencial para evitar configurações que parecem corretas mas deixam brechas:

  • PREROUTING: pacotes chegando antes do roteamento (NAT de destino)
  • INPUT: pacotes destinados ao próprio servidor
  • FORWARD: pacotes sendo roteados pelo servidor
  • OUTPUT: pacotes originados no servidor
  • POSTROUTING: pacotes saindo após o roteamento (NAT de origem)

iptables avançado

Além das regras básicas de ACCEPT/DROP, o iptables oferece módulos que permitem construir proteção em camadas:

Proteger contra port scanning

# Bloquear scans SYN flood
iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP

# Bloquear scans NULL, FIN, XMAS
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

# Logar e bloquear pacotes inválidos
iptables -A INPUT -m conntrack --ctstate INVALID -j LOG --log-prefix "INVALID: "
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

Controle de estado de conexão

# Política mais restritiva com conntrack
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m conntrack --ctstate NEW -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -m conntrack --ctstate NEW -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m conntrack --ctstate NEW -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j DROP   # bloquear todo o resto

Whitelist de IPs para acesso SSH

# Permitir SSH apenas de IPs específicos
iptables -A INPUT -p tcp --dport 22 -s 200.200.200.200 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

nftables: o moderno

O nftables é o sucessor do iptables, presente por padrão no Debian 10+ e Ubuntu 20.04+. Oferece sintaxe mais clara e melhor performance.

#!/usr/sbin/nft -f
# /etc/nftables.conf — configuração básica com proteções

flush ruleset

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

        # Loopback sempre aceito
        iifname "lo" accept

        # Conexões estabelecidas
        ct state established,related accept

        # Rejeitar inválidos
        ct state invalid drop

        # ICMP e ICMPv6
        ip protocol icmp accept
        ip6 nexthdr icmpv6 accept

        # SSH com rate limit (5 novas conexões por minuto)
        tcp dport 22 ct state new limit rate 5/minute accept

        # HTTP e HTTPS
        tcp dport { 80, 443 } accept

        # Log e drop do resto
        log prefix "nft-drop: " drop
    }

    chain forward {
        type filter hook forward priority 0; policy drop;
    }

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

Rate limiting e proteção DDoS leve

Para servidores expostos à internet, rate limiting é essencial para absorver ataques de força bruta e floods de conexão sem derrubar o serviço:

# Limitar novas conexões HTTP por IP (proteção básica anti-flood)
iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW \
    -m limit --limit 60/min --limit-burst 20 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW -j DROP

# Limitar pings (anti-ICMP flood)
iptables -A INPUT -p icmp --icmp-type echo-request \
    -m limit --limit 1/s --limit-burst 5 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

Para proteção DDoS de maior escala, combine firewall no servidor com Cloudflare na camada de DNS/CDN — as regras no servidor protegem contra floods direcionados ao IP, enquanto o Cloudflare absorve ataques volumétricos antes de chegarem ao servidor.

Logging estratégico

# Logar pacotes bloqueados para análise
iptables -A INPUT -j LOG --log-prefix "iptables-DROP: " --log-level 4

# Monitorar em tempo real
tail -f /var/log/kern.log | grep "iptables-DROP"

# Analisar IPs que mais tentam conexões bloqueadas
grep "iptables-DROP" /var/log/kern.log | \
    grep -oP 'SRC=\K[0-9.]+' | sort | uniq -c | sort -rn | head -20

Conclusão

Um firewall bem configurado é a primeira linha de defesa de qualquer servidor Linux. A diferença entre regras básicas e regras avançadas está na profundidade da proteção: controle de estado, rate limiting, logging e whitelist por IP transformam o firewall em um mecanismo de segurança ativo, não apenas um portão aberto ou fechado.

Sua infraestrutura tem esses riscos?

Solicite um diagnóstico gratuito e descubra em quais pontos seu ambiente pode ser melhorado.