Por que isso importa
Sem flow, não há detecção de DDoS. Quando o dashboard fica vazio, a causa quase sempre está em um de poucos pontos: rede, firewall, porta, template, licença, cadastro, buffer do kernel ou relógio.
Os passos seguem o caminho do pacote, do roteador até a tela. Faça-os em ordem.
Antes de começar
- Acesso root (ou sudo) ao servidor do EdgeWarden, instalado conforme o guia de instalação.
- Acesso de leitura ao roteador exportador.
- O IP de origem que o roteador usa para exportar. Nos exemplos: coletor
192.0.2.10e roteador198.51.100.1. - As portas do coletor: 2055/UDP para NetFlow v5, v9 e IPFIX, e 6343/UDP para sFlow v5.
Passo 1: os pacotes chegam ao servidor?
No servidor do EdgeWarden:
tcpdump -i any -n -c 20 'udp port 2055 or udp port 6343'Se nada aparece em um ou dois minutos, o problema está antes do servidor: configuração de exportação no roteador, rota até 192.0.2.10, ACL ou firewall no caminho (inclusive o security group do provedor, se o servidor estiver em nuvem). O firewall do próprio servidor não explica um tcpdump vazio, porque a captura acontece antes do netfilter. Se os pacotes aparecem, o problema está dentro do servidor: siga para o passo 2.
Passo 2: firewall e porta de escuta
Confira as regras do ufw criadas pelo guia de instalação, o firewall do servidor do próprio EdgeWarden e se o coletor está escutando:
ufw status
nft list table inet flowspec_host
ss -ulnpme | grep -A1 -E "2055|6343"O EdgeWarden tem firewall do host próprio (Segurança → Firewall do Servidor), aplicado pelo core na tabela nftables inet flowspec_host. Uma regra ali bloqueando a 2055 ou a 6343, ou política padrão de descarte sem liberar o roteador, derruba os flows mesmo com o ufw certo. Tabela inexistente significa que esse firewall nunca foi aplicado.
O coletor deve aparecer em 0.0.0.0:2055 e 0.0.0.0:6343. Ele recebe por IPv4: aponte a exportação do roteador para o endereço IPv4 do servidor. Se aparecer em 127.0.0.1, o nó está configurado com papel de scrubber, que de propósito não recebe flow de roteador. Se não aparecer nada, veja systemctl status flowspec-core e journalctl -u flowspec-core -n 50. Com o serviço ativo e sem socket, o coletor não conseguiu abrir a porta (por exemplo, outro coletor já ocupa a 2055). Esse erro vai para o log do core, não para o journal: grep -h -i listener /opt/flowspec-analyzer/logs/core.log.* | tail -n 5.
Qualquer um que alcance a 2055/UDP pode injetar flows forjados. Depois que tudo funcionar, restrinja por origem: ufw allow from 198.51.100.1 to any port 2055 proto udp e depois ufw delete allow 2055/udp, porque a regra genérica do guia continua liberando a porta para todos enquanto existir. Faça o mesmo com a 6343 e atualize a regra se o roteador passar a exportar de outro IP.
Passo 3: porta e versão certas
NetFlow e IPFIX dividem a 2055; o sFlow usa a 6343. O coletor identifica a versão pelos dois primeiros bytes do datagrama e descarta o que não reconhece.
| O roteador envia | Porta no EdgeWarden | Primeiros bytes do payload |
|---|---|---|
| NetFlow v5 | 2055/UDP | 0005 |
| NetFlow v9 | 2055/UDP | 0009 |
| IPFIX | 2055/UDP | 000a |
| sFlow v5 | 6343/UDP | 00000005 |
Para conferir no próprio pacote, mostre um datagrama em hexadecimal. Num pacote IPv4 sem opções, o payload UDP começa no byte 28: é o sétimo grupo da linha 0x0010.
tcpdump -i any -n -X -c 1 udp port 2055
0x0010: c000 020a c350 0807 05dc 0000 000a 05d4 .....P..........No exemplo, 0807 é a porta 2055 e 000a indica IPFIX. sFlow enviado para a 2055 (ou NetFlow para a 6343) chega ao servidor, mas nunca vira flow.
Passo 4: templates de NetFlow v9 e IPFIX
No v9 e no IPFIX, o registro de dados só pode ser decodificado depois que o template correspondente chega. Logo após configurar o roteador ou reiniciar o flowspec-core, os pacotes chegam, mas nada aparece até o próximo envio de template. O intervalo depende do fabricante:
| Plataforma | Onde ajustar | Padrão documentado |
|---|---|---|
| Juniper (Junos) | template-refresh-rate seconds no template de version-ipfix ou version9 | 600 s no Junos OS; 60 s no Junos OS Evolved |
| Cisco IOS XE | template data timeout no flow exporter | 600 s |
| Cisco IOS XR | template data timeout no submodo version v9 ou version ipfix do flow exporter-map | varia por versão (1800 s na referência do ASR 9000); confira com show flow exporter-map |
| MikroTik RouterOS | v9-template-refresh e v9-template-timeout em /ip traffic-flow target | 20 pacotes |
| Huawei VRP | ip netstream export template timeout-rate (minutos) | varia por linha; 30 min na documentação da linha AR |
Um intervalo entre 60 s e 300 s é um bom equilíbrio. Com o roteador recém-configurado, espere pelo menos um ciclo de template.
Passo 5: cota de exportadores da licença
Cada plano aceita um número fixo de exportadores: Starter 1, Professional 2 e Enterprise 10. As vagas são ocupadas na ordem em que os exportadores começam a enviar. Pacote de exportador além da cota é descartado antes do parse, sem erro na tela. O core grava as próprias mensagens em /opt/flowspec-analyzer/logs/, um arquivo por dia (o journalctl mostra só a partida e as quedas do serviço). Procure lá:
grep -h -i exporter /opt/flowspec-analyzer/logs/core.log.* | tail -n 20A linha Exporter 198.51.100.1 registrado (1/2 vagas da licença) confirma que o roteador foi aceito. Já Exporter 198.51.100.2 IGNORADO — limite de 2 exporter(s) do plano de licença atingido explica o silêncio. Cada linha sai uma vez por execução do core e os logs antigos são apagados após alguns dias; se nenhuma aparecer, systemctl restart flowspec-core registra de novo. Confira o plano em Configurações → Sistema → Licença.
Um roteador de laboratório ou de borda secundário apontado para o coletor também ocupa vaga, assim como cada IP de origem diferente do mesmo roteador. As vagas ficam na memória do core: depois de remover a exportação dos equipamentos indesejados, rode systemctl restart flowspec-core para liberá-las.
Passo 6: cadastro e IP de origem
Cadastre o roteador em Configurações → Rede → Dispositivos. O campo Endereço IP precisa ser exatamente o IP de origem dos pacotes que você viu no passo 1. Se o roteador exporta de uma loopback diferente da cadastrada, os flows chegam, mas as interfaces aparecem como if:12 em vez do nome, o tráfego por interface some e a taxa de amostragem cadastrada não é aplicada.
O cadastro também define:
- Amostragem: em NetFlow v5 a taxa precisa ser cadastrada; em v9 e IPFIX, a taxa anunciada pelo roteador vence a cadastrada.
- SNMP: a tela de Interfaces cruza o flow com o SNMP. Interface sem SNMP desaparece da tela, mesmo com flow chegando.
Passo 7: descarte de UDP no kernel
Se os pacotes chegam mas parte do tráfego some, o kernel pode estar descartando datagramas por falta de buffer. O core pede 16 MB por socket; sem o sysctl do guia de instalação, o pedido é truncado e o descarte é silencioso.
ss -ulnpme | grep -A1 -E "2055|6343"
nstat -az | grep -iE "Udp.*(InErrors|RcvbufErrors)"
UdpInErrors 0 0.0
UdpRcvbufErrors 0 0.0No ss, o valor certo é rb33554432 (o kernel dobra os 16 MB pedidos). Se aparecer rb425984, o arquivo /etc/sysctl.d/99-flowspec-tuning.conf do guia não foi aplicado: aplique-o com sysctl --system e reinicie o flowspec-core. Os contadores do nstat não podem crescer com o tempo. Se o kernel está limpo e ainda falta tráfego, o descarte pode ser dentro do core: procure Canal de flows cheio com grep -h "Canal de flows cheio" /opt/flowspec-analyzer/logs/core.log.*.
Passo 8: relógio e fuso horário
No NetFlow e no IPFIX, o EdgeWarden data o flow com o horário informado pelo roteador. Roteador sem NTP, com horas ou dias de diferença, grava flows fora da janela das telas. O fuso do roteador não interfere, porque o horário viaja em UTC; o erro clássico é o relógio acertado à mão com a hora local, que no horário de Brasília desloca os flows em 3 horas. No sFlow vale o relógio do servidor. Sincronize servidor e roteador com o mesmo NTP.
timedatectl status
System clock synchronized: yesVerificação no roteador e no EdgeWarden
No roteador, confirme que o contador de pacotes exportados está subindo. Os comandos mudam por fabricante e, em alguns casos, por plataforma:
| Plataforma | Comando |
|---|---|
| Juniper MX (inline) | show services accounting flow inline-jflow fpc-slot 0 |
| Cisco IOS XE | show flow exporter statistics |
| Cisco IOS XR | show flow exporter location 0/0/CPU0 |
| MikroTik RouterOS | /ip traffic-flow print e /ip traffic-flow target print |
| Huawei NE40E/NE8000 | display ip netstream statistics slot 1 |
Ajuste o número de slot e a localização ao seu chassi. No EdgeWarden:
- Em Configurações → Rede → Dispositivos, confira se o roteador está cadastrado com o IP de origem correto e se a amostragem mostra o selo detectado (o roteador anuncia a taxa por v9/IPFIX) ou manual (vale a taxa cadastrada).
- Espere 1 a 2 minutos, abra a tela Flows e preencha o filtro Exporter IP com o IP de origem do roteador: os registros devem aparecer.
- Confira o log do core. Depois de cerca de 50 mil flows (somando todos os exportadores), ele avisa uma vez se nenhum flow traz campos como
minimumTTL (IE 52),fragmentOffset/fragmentFlags (IE 88/197)outcpControlBits (IE 6), e qual detector fica inerte: procure comgrep -h INERTE /opt/flowspec-analyzer/logs/core.log.*. Não é ausência de ataque, é ausência de dado: habilite o campo no template do roteador.
Armadilhas comuns
- Active timeout longo: fluxos longos só são exportados quando o active timeout vence. No MikroTik o padrão é 30 minutos; use
/ip traffic-flow set active-flow-timeout=1m. Cerca de 60 s é a recomendação comum. - Firewall stateful próprio: com regras nftables e conntrack, isente as portas de flow com
udp dport { 2055, 6343 } notrack, como indica o guia de instalação. - Volume dividido ou multiplicado: se o flow mostra exatamente
1/Ndo SNMP, falta a taxa de amostragem; se mostraN×, ela foi aplicada duas vezes. Logo depois de reiniciar o core, v9 e IPFIX sem taxa cadastrada ficam em 1:1 até o roteador reenviar o options template. - Ajuste de sysctl que some: o updater reescreve
99-flowspec-tuning.conf. Ponha valores próprios em/etc/sysctl.d/99-zz-meus-ajustes.conf, lido depois e que vence.
Se nada aparecer, guarde a saída do tcpdump e do nstat e o log do dia em /opt/flowspec-analyzer/logs/ antes de abrir um chamado.
Próximos passos
Com os flows chegando, configure a exportação com os campos completos seguindo o guia do seu fabricante: Juniper MX, Cisco IOS-XE e IOS-XR, Huawei NE40E/NE8000 ou MikroTik RouterOS v7. Para acertar a taxa de amostragem e o active timeout, leia Amostragem e timeouts de NetFlow e IPFIX sem perder ataques. Para revisar portas, buffers e serviços, volte ao guia de instalação, e veja em Recursos como o EdgeWarden usa esses dados para detectar ataques.