Aula 26: Suricata — IDS/IPS de alta performance com multi-thread e detecção avançada

Aula 26: Suricata — IDS/IPS de alta performance com multi-thread e detecção avançada

O Suricata se consolidou como uma das ferramentas mais poderosas para detecção e prevenção de intrusões em ambientes Linux modernos. Ao contrário de soluções tradicionais de thread única, o Suricata foi projetado do zero para tirar proveito de arquiteturas multi-core e multi-thread, entregando desempenho excepcional mesmo em links de rede de alta velocidade — 10 Gbps, 40 Gbps e além. Nesta aula 26 do curso Segurança Linux — Do Zero ao Avançado, você mergulhará fundo na instalação, configuração e operação do Suricata como IDS (Sistema de Detecção de Intrusões) e IPS (Sistema de Prevenção de Intrusões) em modo inline.

Profissionais de segurança da informação e administradores de infraestrutura precisam dominar ferramentas de nível empresarial que vão além do básico. O Suricata não apenas inspeciona pacotes contra milhares de regras em tempo real, como também oferece recursos avançados: análise de protocolos de aplicação (HTTP, DNS, TLS, SMB), extração de arquivos, logging JSON altamente estruturado e integração nativa com stacks de monitoramento como Elasticsearch e Grafana. Em nossos projetos na JRT Technology Solutions, nossos especialistas utilizam diariamente o Suricata para proteger redes corporativas, e o conhecimento que você adquirirá aqui reflete exatamente o que é exigido em campo.

Nesta aula, você aprenderá a implantar o Suricata em distribuições Ubuntu/Debian e Rocky Linux 9 (RHEL 9), construindo uma instância funcional desde o zero — adicionando repositórios oficiais da OISF (Open Information Security Foundation), ajustando o arquivo de configuração principal /etc/suricata/suricata.yaml, compreendendo o modelo de threads, selecionando o modo de captura ideal (AF_PACKET, PF_RING ou Netmap) e configurando regras de detecção. Mostraremos cada comando, cada saída esperada e cada armadilha a ser evitada. Ao final, você terá uma implementação de IDS/IPS pronta para produção, capaz de inspecionar tráfego com confiabilidade e baixa latência.

Este é um conteúdo de nível avançado. Assumimos que você já concluiu as aulas anteriores do curso, possui domínio de linha de comando, entende conceitos de rede como pilha TCP/IP, VLANs, roteamento e firewall (iptables/nftables), e tem familiaridade com análise de logs no Linux. Se algum desses tópicos ainda não estiver claro, recomendamos revisitar as aulas 1 a 25 antes de prosseguir.

Ao concluir esta aula, você será capaz de: instalar o Suricata a partir dos repositórios oficiais; validar a configuração; executar o motor de detecção em modo IDS e IPS; interpretar os arquivos de log (eve.json e fast.log); criar e gerenciar regras personalizadas; e aplicar ajustes de performance para diferentes cargas de trabalho. Preparado? Vamos elevar seu domínio em Segurança Linux ao próximo patamar.

O que você vai aprender nesta aula

  • Contextualização arquitetural: como o Suricata difere de soluções como Snort e por que o modelo multi-thread é crucial para redes de alta velocidade.
  • Instalação passo a passo em Ubuntu 22.04/24.04 e Rocky Linux 9, com repositórios oficiais da OISF.
  • Configuração detalhada do suricata.yaml: af-packet, threading, detect-engine, outputs e tuning de performance.
  • Modos de operação: Sniffer, IDS (NIDS) e IPS inline via NFQUEUE.
  • Gerenciamento de regras: utilização do suricata-update, categorias Emerging Threats e criação de assinaturas customizadas.
  • Verificação e troubleshooting: testes de configuração, validação de regras, análise de logs e solução dos erros mais comuns.
  • Boas práticas de produção: afinidade de CPU, balanceamento de workers, integração com ELK e alertas em tempo real.

Pré-requisitos e Ambiente

Para acompanhar cada etapa sem frustrações, você precisará de um servidor (físico ou virtual) com:

  • Ubuntu 22.04 LTS / 24.04 LTS (ou Debian 12) ou Rocky Linux 9 (ou RHEL 9 / AlmaLinux 9).
  • Mínimo de 2 vCPUs e 4 GB de RAM; recomendamos 4 vCPUs e 8 GB para testes com regras completas.
  • Pelo menos 20 GB de espaço em disco (logs do Suricata podem crescer rapidamente).
  • Acesso root ou sudo.
  • Conectividade com a internet para download de regras e atualizações.
  • Familiaridade com editores de texto como vim ou nano.

Verifique seu sistema antes de começar:

# Verificar distribuição e versão do kernel
cat /etc/os-release
uname -r

# Verificar memória e CPUs disponíveis
free -h
lscpu | grep -E "^CPU\(s\)|Model name"

Suricata: Arquitetura Multi-Thread e Por Que Isso Importa

A diferença fundamental entre o Suricata e os IDS/IPS baseados em thread única (como o Snort 2.x) está na capacidade de distribuir a carga de processamento de pacotes entre múltiplas threads de execução, cada uma podendo ser atrelada a um core de CPU específico. O motor do Suricata utiliza um pipeline de processamento que começa na captura de pacotes, passa pela decodificação, análise de fluxo, detecção de assinaturas e termina nos outputs (logs, alertas, syslog, etc.). Em vez de um único processo linear, o Suricata cria múltiplos threads de “worker” que executam todas essas etapas de forma independente para diferentes pacotes, paralelizando o trabalho.

Esse design é controlado pela seção threading do arquivo /etc/suricata/suricata.yaml. Você define quantos threads de gerenciamento e quantos workers deseja, além do modo de detecção (autofp, workers ou single). O modo workers é o mais eficiente: cada worker recebe pacotes diretamente do mecanismo de captura (AF_PACKET, PF_RING) e processa o pipeline completo, eliminando overhead de sincronização entre threads. Em nossos projetos na JRT Technology Solutions, configuramos o Suricata com um worker por núcleo físico, deixando um ou dois cores para o sistema operacional e IRQs de rede, obtendo ganhos de throughput superiores a 300% em relação a configurações padrão.

Compreender essa arquitetura é essencial para o tuning de performance. Se você simplesmente instalar o Suricata e iniciar com as configurações padrão, provavelmente verá perda de pacotes (packet drops) em links acima de 1 Gbps. Ajustar o número de workers, a afinidade de CPU (cpu-affinity) e o modo de operação é a diferença entre um IDS que engasga e um que processa milhões de pacotes por segundo sem degradação.

Além disso, o Suricata suporta aceleração por hardware (como Intel Hyperscan para correspondência de padrões) e descarregamento de processamento para FPGA ou SmartNICs em cenários extremos. Embora esses tópicos estejam além desta aula, é importante saber que a plataforma foi projetada para escalar vertical e horizontalmente.

Instalação do Suricata Passo a Passo — Ubuntu/Debian

Nesta seção, realizaremos a instalação completa do Suricata no Ubuntu 22.04/24.04 utilizando o repositório oficial da OISF. Essa abordagem garante que você obtenha a versão mais recente estável (atualmente a 7.x), com todas as otimizações e correções de segurança. Evitaremos os pacotes do repositório padrão do Ubuntu, que frequentemente estão desatualizados.

  1. Atualize o sistema e instale dependências básicas:
# Atualizar cache de pacotes e sistema
sudo apt update && sudo apt upgrade -y

# Instalar dependências necessárias para adicionar repositórios e compilar regras
sudo apt install -y curl gnupg2 software-properties-common lsb-release apt-transport-https
  1. Adicione o repositório oficial da OISF para Suricata:
# Adicionar chave GPG do repositório OISF
sudo curl -fsSL https://packages.suricata.io/suricata-oisf.gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/suricata-archive-keyring.gpg

# Adicionar o repositório à lista de sources
echo "deb [signed-by=/usr/share/keyrings/suricata-archive-keyring.gpg] https://packages.suricata.io/debian $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/suricata.list

# Atualizar cache de pacotes para incluir o novo repositório
sudo apt update

Saída esperada ao executar sudo apt update (você verá a linha do repositório suricata sendo consultada):

Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Get:2 https://packages.suricata.io/debian jammy InRelease [12.3 kB]
Get:3 https://packages.suricata.io/debian jammy/main amd64 Packages [5.4 kB]
Fetched 17.7 kB in 1s (17.7 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
All packages are up to date.
  1. Instale o Suricata:
# Instalar o pacote principal do Suricata
sudo apt install -y suricata

O instalador criará automaticamente o usuário e grupo suricata, diretórios de log em /var/log/suricata/ e o arquivo de configuração principal em /etc/suricata/suricata.yaml.

  1. Verifique a versão instalada e informações de compilação:
# Exibir versão do Suricata
suricata --build-info
This is Suricata version 7.0.6 RELEASE
Features: PCAP_SET_BUFF AF_PACKET HAVE_PACKET_FANOUT LIBCAP_NG LIBNET1.1 HAVE_HTP_URI_NORMALIZE_HOOK PCRE_JIT HAVE_NSS HAVE_LIBJANSSON TLS TLS_C11 MAGIC RUST 
SIMD support: SSE_4_2 SSE_4_1 SSE_3 
Atomic ints: 1 2 4 8 byte(s)
64-bits, Little-endian architecture
GCC version 13.2.0, C version 201
compiled with libnss:  yes
compiled with libnspr:  yes
compiled with libcap-ng: yes
...
Suricata Configuration:
  AF_PACKET support:                       yes
  PF_RING support:                         no
  NFQueue support:                         yes
  ...

Observe que o suporte a NFQUEUE (necessário para modo IPS inline) está habilitado, assim como AF_PACKET. O suporte a RUST indica que módulos escritos em Rust para análise de protocolos (como SMB, NFS) estão compilados. Caso precise de suporte a PF_RING (para captura de alta performance com balanceamento de carga em hardware), você precisará compilar o Suricata você mesmo ou utilizar pacotes específicos — tópico que abordaremos em aulas avançadas de otimização.

Instalação do Suricata Passo a Passo — Rocky Linux 9 / RHEL 9

Em sistemas da família Red Hat, o procedimento é semelhante, mas utilizamos o gerenciador dnf e o repositório EPEL mais o repositório oficial da OISF. A OISF fornece pacotes RPM oficiais para RHEL 9 e derivados.

  1. Habilite o repositório EPEL e instale dependências:
# Instalar EPEL (Extra Packages for Enterprise Linux)
sudo dnf install -y epel-release

# Instalar dependências para adicionar repositórios
sudo dnf install -y dnf-plugins-core curl
  1. Adicione o repositório oficial da OISF:
# Baixar e instalar o pacote de configuração do repositório OISF para RHEL 9
curl -fsSL https://packages.suricata.io/oisf.repo | sudo tee /etc/yum.repos.d/suricata.repo

# Atualizar cache do DNF
sudo dnf makecache
  1. Instale o Suricata:
# Instalar o Suricata
sudo dnf install -y suricata
  1. Verifique a instalação e habilite o serviço para iniciar no boot:
# Verificar versão
suricata -V

# Habilitar o serviço systemd (ainda não iniciaremos)
sudo systemctl enable suricata

Saída esperada do comando suricata -V:

Suricata version 7.0.6 RELEASE

Agora que o Suricata está instalado em ambas as plataformas, prosseguiremos para a etapa mais crítica: a configuração fina do mecanismo de detecção.

Configuração Detalhada do suricata.yaml

O arquivo /etc/suricata/suricata.yaml é o centro de controle do Suricata. Com centenas de diretivas, ele define como o motor captura pacotes, quais redes monitorar, como processar threads, quais regras carregar e como gerar logs. Mostraremos aqui as seções essenciais que você precisa dominar para uma implementação de produção, com comentários linha a linha. Recomendamos abrir o arquivo completo em um editor enquanto lê esta seção, pois faremos referência a trechos específicos.

Estrutura do arquivo (trechos principais com explicações):

# ==================== Configuração do Suricata ====================
# Este é um subconjunto das diretivas mais importantes.
# O arquivo completo encontra-se em /etc/suricata/suricata.yaml

# 1. Variáveis de ambiente: definem faixas de rede usadas em regras
vars:
  # Endereços protegidos (sua rede interna)
  address-groups:
    HOME_NET: "[192.168.0.0/16,10.0.0.0/8,172.16.0.0/12]"
    EXTERNAL_NET: "!$HOME_NET"       # Tudo que não for HOME_NET
    HTTP_SERVERS: "$HOME_NET"
    SMTP_SERVERS: "$HOME_NET"
    SQL_SERVERS: "$HOME_NET"
    DNS_SERVERS: "$HOME_NET"
    TELNET_SERVERS: "$HOME_NET"
    AIM_SERVERS: "$EXTERNAL_NET"
  # Portas de rede para serviços
  port-groups:
    HTTP_PORTS: "80"
    SHELLCODE_PORTS: "!80"
    ORACLE_PORTS: 1521
    SSH_PORTS: 22

# 2. Configuração de threads e detecção
threading:
  set-cpu-affinity: yes               # Vincula threads a CPUs específicas
  cpu-affinity:
    - management-cpu-set:
        cpu: [ 0 ]                     # CPU para threads de gerenciamento
      worker-cpu-set:
        cpu: [ 1,2,3 ]                # CPUs para workers (modo workers)
        mode: "exclusive"             # Threads não compartilham CPU
  detect-thread-ratio: 1.0            # Proporção de threads de detecção

# 3. Modo de captura de pacotes (AF_PACKET para alta performance)
af-packet:
  - interface: eth0
    # Número de workers de captura (threads que recebem pacotes)
    threads: 3
    # Modo cluster para balancear pacotes entre workers
    cluster-id: 99
    cluster-type: cluster_flow         # Balanceia por fluxo (5-tupla)
    defrag: yes
    use-mmap: yes                     # Mapeamento em memória para zerocopy
    tpacket-v3: yes                   # Usar TPACKET_V3 (mais eficiente)
    ring-size: 300000                 # Tamanho do buffer de anel (pacotes)

# 4. Motor de detecção
detect:
  profile: high                       # Perfil de detecção (low, medium, high)
  fast-pattern: yes
  sgh-mpm-context: full              # Otimização de busca de padrões

# 5. Saídas e logging
outputs:
  # Saída JSON (EVE) - altamente recomendado
  - eve-log:
      enabled: yes
      filetype: regular
      filename: eve.json
      types:
        - alert                        # Alertas de detecção
        - http                         # Transações HTTP
        - dns                          # Consultas DNS
        - tls                          # Handshakes TLS (certificados, JA3)
        - ssh                          # Conexões SSH
        - flow                         # Metadados de fluxos
        - fileinfo                     # Arquivos extraídos do tráfego
  # Log de alertas simplificado (fast log)
  - fast:
      enabled: yes
      filename: fast.log
      append: yes
  # Estatísticas de performance
  - stats:
      enabled: yes
      interval: 60                     # A cada 60 segundos
      totals: yes                      # Acumula totais desde início

A seção af-packet merece atenção especial. O cluster-id e cluster-type: cluster_flow instruem o kernel a distribuir pacotes entre os threads de captura baseando-se no hash do fluxo (IP de origem/destino, portas, protocolo), garantindo que todos os pacotes de uma mesma conexão sejam processados pelo mesmo worker — essencial para análise de estado de protocolo. O uso de tpacket-v3 e use-mmap reduz drasticamente a cópia de memória entre kernel space e user space, minimizando a perda de pacotes. Em laboratórios da JRT Technology Solutions, alcançamos velocidades de captura de 10 Gbps com menos de 0.01% de perda usando essas configurações em hardware adequado.

Nota sobre IPS inline: Se deseja operar em modo IPS (dropando pacotes maliciosos), você precisará configurar o Suricata para trabalhar em conjunto com o firewall via NFQUEUE. Nesse caso, a seção de captura mudaria para algo como:

nfqueue:
  mode: accept
  repeat: 1
  route-queue: 1
  batchcount: 20
  fail-open: yes          # Libera tráfego se Suricata falhar

Abordaremos o modo IPS com detalhes práticos na seção de Boas Práticas e Dicas Avançadas.

Verificando a Instalação e Testando a Configuração

Antes de colocar o Suricata em produção, é obrigatório validar que a configuração está sintaticamente correta e que o motor consegue inicializar sem erros. O Suricata oferece um modo de teste seco que carrega todas as regras, configura os mecanismos de captura e sai, reportando qualquer problema.

Comando de teste de configuração:

# Testar configuração sem iniciar a captura
sudo suricata -T -c /etc/suricata/suricata.yaml -v

Parâmetros:

  • -T: Testa a configuração e as regras, depois sai.
  • -c /etc/suricata/suricata.yaml: Especifica o caminho do arquivo de configuração.
  • -v: Modo verboso, para ver detalhes do carregamento.

Saída esperada de sucesso:

Info: conf: Running in test mode, not starting engine.
Info: suricata: This is Suricata version 7.0.6 RELEASE running in SYSTEM mode
Info: cpu: Setting affinity management to CPU 0
Info: cpu: Setting affinity worker to CPU 1,2,3
Info: suricata: Running suricata under test mode
Info: suricata: Setting engine mode to IDS mode by default
Warn: detect: No rules loaded from /var/lib/suricata/rules/suricata.rules
Info: pcap: No physical capture interface specified, using default 'eth0'
Info: RunMode: AF_PACKET picked as capture method
Info: AF_PACKET: using cluster_flow on iface eth0 with cluster-id 99
Info: All 3 packet processing threads, 3 management threads initialized, engine started.
Info: Signal Received: SIGUSR2
Info: cleaning up signature grouping structure... complete
Info: suricata: Test mode exit cleanly.

A ausência de erros fatais (Error) indica que a configuração é válida. O aviso sobre regras não carregadas é esperado, pois ainda não baixamos o conjunto de regras padrão.

Verificar se o serviço systemd está corretamente configurado:

# Verificar status do serviço (deve estar parado)
sudo systemctl status suricata

# Verificar se as variáveis de ambiente do serviço apontam para as interfaces corretas
sudo systemctl cat suricata

Gerenciamento de Regras com suricata-update

O Suricata sem regras é como um carro sem combustível. O conjunto padrão de regras é fornecido pela comunidade Emerging Threats (ET Open) e pela própria OISF. Utilizamos a ferramenta suricata-update, incluída na instalação, para baixar, atualizar e gerenciar regras facilmente.

  1. Atualizar o cache de regras e baixar o conjunto padrão:
# Executar suricata-update (primeira execução)
sudo suricata-update
Downloading Emerging Threats Open ruleset...
Processing downloaded rules...
Merging with local rules...
Successfully merged 35678 rules.
Writing rules to /var/lib/suricata/rules/suricata.rules
  1. Verificar o arquivo de regras gerado:
# Listar primeiras linhas das regras baixadas
head -20 /var/lib/suricata/rules/suricata.rules
  1. Configurar atualização automática (cron job ou timer systemd):
# O pacote instalou um timer systemd para atualização diária (opcional)
sudo systemctl enable suricata-update.timer
sudo systemctl start suricata-update.timer
  1. Habilitar regras específicas desativando categorias indesejadas:
# Exemplo: desabilitar regras de protocolo "chat", "games"
sudo suricata-update disable-conf /etc/suricata/disable.conf
sudo suricata-update

Você pode criar arquivos /etc/suricata/enable.conf e disable.conf para controlar quais SIDs (identificadores de regras) são ativados. Isso é útil para reduzir falsos positivos em ambientes específicos.

Executando o Suricata em Modo IDS e Interpretando os Logs

Com a configuração validada e as regras carregadas, podemos iniciar o Suricata em modo IDS ao vivo. Escolhemos uma interface de rede para monitoramento — de preferência uma interface que receba tráfego espelhado (port mirror/SPAN) ou uma bridge transparente. Neste exemplo, usaremos eth1 como interface de monitoramento.

  1. Parar o serviço padrão (se estiver rodando) e iniciar manualmente com configuração personalizada:
# Certifique-se de que o serviço systemd está parado
sudo systemctl stop suricata

# Iniciar Suricata em modo IDS na interface eth1
sudo suricata -c /etc/suricata/suricata.yaml -i eth1 -D -v
  • -i eth1: Interface de captura.
  • -D: Executa como daemon em segundo plano.
  • -v: Verboso (pode omitir em produção).

Para verificar se o Suricata está realmente capturando e gerando alertas, podemos gerar tráfego malicioso de teste ou simplesmente ver o log fast.log.

  1. Acompanhar os logs em tempo real:
# Visualizar alertas em tempo real
sudo tail -f /var/log/suricata/fast.log

# Em outro terminal, gerar um alerta de teste (ex: regra ICMP)
ping -c 3 8.8.8.8

Saída esperada no fast.log se houver regras para ICMP Echo Request:

08/03/2026-15:32:01.123456  [**] [1:1000001:0] ICMP Echo Request Detected [**] [Classification: Misc activity] [Priority: 3] {ICMP} 192.168.1.100:8 -> 8.8.8.8:0

O log eve.json conterá a mesma informação em formato JSON com riqueza de detalhes, incluindo metadados de fluxo, informações de protocolo e muito mais. Utilize jq para filtrar e processar esses dados:

sudo tail -f /var/log/suricata/eve.json | jq 'select(.event_type=="alert")'

Erros Comuns e Como Resolver

Durante a implantação do Suricata, alguns erros são recorrentes. Abaixo listamos os mais frequentes em nossa experiência na JRT Technology Solutions, com diagnóstico e solução.

  • Erro: “AF_PACKET: Failed to setup AF_PACKET capture: ioctl: No such device”
    Causa: A interface especificada não existe ou o nome está incorreto.
    Sintoma: O Suricata falha ao iniciar com mensagem de dispositivo não encontrado.
    Solução: Liste as interfaces disponíveis com ip link show e verifique o nome exato. Ajuste a diretiva interface: no suricata.yaml.
  • Erro: “Permission denied opening /var/log/suricata/eve.json”
    Causa: O usuário que tenta executar o Suricata não tem permissão de escrita no diretório de logs (geralmente ao rodar sem sudo ou com usuário sem grupo suricata).
    Sintoma: Suricata inicia mas não gera arquivos de log; mensagens de erro nos logs do sistema.
    Solução: Execute o Suricata com sudo ou adicione seu usuário ao grupo suricata (sudo usermod -a -G suricata $USER) e ajuste as permissões do diretório com sudo chown -R suricata:suricata /var/log/suricata.
  • Erro: “Warn: detect: No rules loaded from /var/lib/suricata/rules/suricata.rules”
    Causa: Arquivo de regras não existe ou está vazio.
    Sintoma: Suricata inicia, mas nenhum alerta é gerado, e o log mostra ausência de regras.
    Solução: Execute sudo suricata-update para baixar as regras e verifique se o caminho em default-rule-path: no suricata.yaml corresponde ao arquivo gerado.
  • Erro: “Performance: high packet loss (50%+) detectada no stats.log”
    Causa: Workers de captura insuficientes, buffer de anel pequeno ou CPU sobrecarregada.
    Sintoma: O arquivo stats.log mostra valores altos de capture.kernel_drops.
    Solução: Aumente o número de threads em af-packet, ajuste ring-size para 300000 ou mais, garanta que o cluster-type esteja como cluster_flow e considere usar workers em vez de autofp. Monitore com suricata –dump-stats.
  • Erro: “NFQUEUE: Failed to bind to queue 0”
    Causa: Ao tentar rodar em modo IPS, a fila NFQUEUE não foi configurada ou o módulo nfnetlink_queue não está carregado.
    Sintoma: Suricata sai com erro ao usar configuração nfqueue.
    Solução: Certifique-se de que o módulo está carregado (sudo modprobe nfnetlink_queue) e que as regras de iptables/nftables encaminham tráfego para a queue (ex: sudo iptables -I FORWARD -j NFQUEUE –queue-num 0).

Boas Práticas e Dicas Avançadas com Suricata

Após dominar a instalação e a configuração básica, você pode levar seu IDS/IPS a um nível de eficiência operacional muito superior. Aqui estão práticas que aplicamos rotineiramente nos projetos da JRT Technology Solutions.

1. Ajuste de afinidade de CPU e isolamento de threads: Use set-cpu-affinity: yes e especifique cores dedicados para workers. Em sistemas NUMA, garanta que cada worker e sua fila de captura estejam no mesmo nó NUMA para evitar latência de acesso remoto à memória. Isso pode ser feito com numactl ou configurando pinning no yaml.

2. Integração com o Elastic Stack (ELK): O formato eve.json é nativamente suportado pelo Filebeat e Logstash. Envie os logs para o Elasticsearch e crie dashboards no Kibana para monitorar alertas, transações DNS, TLS e HTTP em tempo real. Essa stack transforma o Suricata em uma verdadeira plataforma SOC.

3. Regras customizadas para ameaças específicas: Embora as regras Emerging Threats cubram uma ampla gama de ataques, você pode criar suas próprias assinaturas no arquivo /etc/suricata/rules/local.rules. Exemplo: alertar sobre acesso a um servidor interno específico fora do horário comercial. Use a sintaxe de regras do Suricata (similar à do Snort) e recarregue sem interrupção com sudo suricatasc -c reload-rules.

4. Modo IPS inline para bloqueio ativo: Configure o Suricata para atuar como IPS combinando-o com iptables NFQUEUE. O tráfego é passado para o Suricata, que decide se aceita ou descarta o pacote. Importante: use a opção fail-open: yes para que, em caso de falha do processo Suricata, o tráfego não seja interrompido. Essa configuração exige cuidados com performance, pois adiciona latência.

5. Monitoramento de performance contínuo: Ative o módulo stats no suricata.yaml e colete as métricas periodicamente. Use ferramentas como Prometheus com suricata_exporter para visualizar taxas de pacotes, perdas e uso de CPU, permitindo identificar gargalos antes que causem perda de eventos.

Resumo da Aula 26

Nesta aula de nível avançado, transformamos o Suricata de um simples conceito em uma instalação de IDS/IPS robusta e otimizada. Começamos compreendendo a arquitetura multi-thread que diferencia o Suricata no mercado, passamos pela instalação passo a passo em distribuições Debian e RHEL, detalhamos o arquivo de configuração suricata.yaml com suas seções mais críticas, aprendemos a gerenciar regras com o suricata-update e realizamos testes de validação essenciais. Abordamos a execução em modo IDS, interpretação de logs e, crucialmente, a solução dos erros mais comuns encontrados no mundo real.

Os profissionais da JRT Technology Solutions empregam exatamente esses procedimentos para implementar soluções de segurança de rede que protegem dados sensíveis e garantem conformidade regulatória. Lembre-se: um IDS/IPS é tão bom quanto sua configuração e as regras que o alimentam. Mantenha suas regras atualizadas, monitore a performance constantemente e ajuste os parâmetros de threading conforme a carga.

A tabela abaixo reúne os comandos essenciais utilizados ao longo da aula para sua referência rápida:

Comando Descrição
sudo apt install -y suricata Instala o Suricata via repo OISF no Ubuntu/Debian
sudo dnf install -y suricata Instala no Rocky Linux 9 / RHEL 9
sudo suricata -T -c /etc/suricata/suricata.yaml -v Testa a configuração sem iniciar o motor
sudo suricata-update Baixa e atualiza o conjunto de regras Emerging Threats
sudo suricata -c /etc/suricata/suricata.yaml -i eth1 -D Inicia o Suricata em modo IDS como daemon na interface eth1
sudo tail -f /var/log/suricata/eve.json | jq Acompanha logs JSON em tempo real com filtro
sudo suricatasc -c reload-rules Recarrega regras sem interromper a captura

Na próxima aula (Aula 27), mergulharemos na Integração de Suricata com Elastic Stack e Grafana — Dashboards de Segurança Operacional. Você aprenderá a construir um pipeline completo de monitoramento que transforma eventos brutos em inteligência acionável, fechando o ciclo de detecção e resposta. Ative o modo IPS inline em um cenário controlado, explore as regras baixadas e revise o suricata.yaml — o domínio dessa ferramenta é um diferencial poderoso na carreira de qualquer especialista em Segurança Linux.

Quer aprender na prática com especialistas?

A JRT Technology Solutions oferece treinamentos e implementação de Segurança Linux para equipes corporativas.



Falar no WhatsApp

Thiago Paes Rodrigues

Com mais de 22 anos de experiência em Tecnologia da Informação, este profissional construiu uma trajetória sólida como empresário, atuando de forma estratégica na implementação de soluções tecnológicas que otimizam processos e impulsionam resultados em diferentes setores.