Como exportar IPFIX de um Juniper MX para o EdgeWarden

Inline J-Flow no Juniper MX passo a passo: templates IPFIX IPv4 e IPv6, instância de amostragem, timeouts e conferência no roteador e no EdgeWarden.

Por que IPFIX com inline J-Flow

Nos Juniper MX com placas MPC (Trio), o inline J-Flow amostra os pacotes e monta os flows no próprio Packet Forwarding Engine, sem placa de serviço. A exportação sai em IPFIX ou NetFlow v9, com IPv6, ASN de origem e destino e o índice das interfaces de entrada e saída. É com esses campos que o EdgeWarden identifica o destino atacado, o protocolo e a interface por onde o ataque entra.

Você vai configurar templates IPFIX para IPv4 e IPv6, a instância de amostragem que exporta para 192.0.2.10:2055, a FPC, as interfaces de borda e o SNMP, e depois conferir tudo no roteador e no EdgeWarden.

Pré-requisitos

  • Juniper MX com chipset Trio e Junos OS. O que muda por versão está indicado no texto.
  • Next Gen Services desativado: com ele ligado, o MX não faz inline J-Flow.
  • Um endereço de origem estável para a exportação, de preferência a loopback (198.51.100.1 nos exemplos), com rota até o coletor pela rede de dados. O MX não exporta flow inline pela interface de gerência fxp0.
  • Porta 2055/UDP liberada no servidor do EdgeWarden.
  • Vaga na licença: cada IP de origem conta como um exportador (Starter 1, Professional 2, Enterprise 10); acima da cota, os flows são descartados sem aviso na tela.

Passo 1: templates IPFIX

Crie um template por família. Os timeouts aceitam de 10 a 600 segundos (padrão 60).

Junos: templates IPFIX IPv4 e IPv6
set services flow-monitoring version-ipfix template ew-ipv4 ipv4-template
set services flow-monitoring version-ipfix template ew-ipv4 flow-active-timeout 60
set services flow-monitoring version-ipfix template ew-ipv4 flow-inactive-timeout 15
set services flow-monitoring version-ipfix template ew-ipv4 template-refresh-rate seconds 60
set services flow-monitoring version-ipfix template ew-ipv4 option-refresh-rate seconds 60
set services flow-monitoring version-ipfix template ew-ipv6 ipv6-template
set services flow-monitoring version-ipfix template ew-ipv6 flow-active-timeout 60
set services flow-monitoring version-ipfix template ew-ipv6 flow-inactive-timeout 15
set services flow-monitoring version-ipfix template ew-ipv6 template-refresh-rate seconds 60
set services flow-monitoring version-ipfix template ew-ipv6 option-refresh-rate seconds 60

O active timeout define de quanto em quanto tempo um flow longo, como o de um ataque, é exportado, e se soma ao ciclo de análise do EdgeWarden (10 s por padrão). 60 s é a recomendação comum; menos detecta mais cedo e gera mais exportação. O template refresh padrão é 600 s: depois de reiniciar o coletor, os dados só são decodificados quando o template chega de novo. Com 60 s, a espera cai para um minuto.

Passo 2: instância de amostragem

Junos: instância de amostragem e coletor
set forwarding-options sampling instance ew-sampling input rate 1000
set forwarding-options sampling instance ew-sampling family inet output flow-server 192.0.2.10 port 2055
set forwarding-options sampling instance ew-sampling family inet output flow-server 192.0.2.10 version-ipfix template ew-ipv4
set forwarding-options sampling instance ew-sampling family inet output inline-jflow source-address 198.51.100.1
set forwarding-options sampling instance ew-sampling family inet output inline-jflow flow-export-rate 10
set forwarding-options sampling instance ew-sampling family inet6 output flow-server 192.0.2.10 port 2055
set forwarding-options sampling instance ew-sampling family inet6 output flow-server 192.0.2.10 version-ipfix template ew-ipv6
set forwarding-options sampling instance ew-sampling family inet6 output inline-jflow source-address 198.51.100.1
set forwarding-options sampling instance ew-sampling family inet6 output inline-jflow flow-export-rate 10
  • input rate 1000 amostra 1 de cada 1.000 pacotes. Anote esse valor: ele vai para o cadastro do dispositivo.
  • Use o mesmo source-address nas duas famílias. O EdgeWarden identifica o exportador pelo IP de origem; assim o MX ocupa uma vaga da licença e um único cadastro.
  • Coletor e origem ficam em IPv4 também na família inet6: os flows IPv6 viajam em pacotes IPv4. A documentação da Juniper só registra endereço IPv6 em flow-server e source-address a partir do Junos OS Evolved 23.1R1, em roteadores PTX.
  • flow-export-rate é em milhares de pacotes por segundo e vale para a FPC inteira (padrão 1, pouco para uma borda sob ataque). O teto depende do chip: 100 por PFE com chip LU (200 numa MPC2, que tem dois) e 800 por PFE XL/EA. Valor acima do suportado é aceito no commit, mas pode gerar erro no log do Junos.

Prefere NetFlow v9? Troque version-ipfix por version9 nos templates e nas linhas flow-server. No inline J-Flow, o v9 para IPv6 só existe a partir do Junos 18.1R1.

Passo 3: associar a instância à FPC

Sem isso a instância fica inativa. Cada FPC aceita uma instância; repita para cada FPC com interface amostrada.

Junos: instância na FPC e tabelas de flow
set chassis fpc 0 sampling-instance ew-sampling
set chassis fpc 0 inline-services flow-table-size ipv4-flow-table-size 8
set chassis fpc 0 inline-services flow-table-size ipv6-flow-table-size 4

No MX5, MX10, MX40 e MX80 use set chassis tfeb slot 0 sampling-instance ew-sampling; no MX104, set chassis afeb slot 0 sampling-instance ew-sampling.

Cada unidade de flow-table-size vale 256K entradas. Desde o Junos 16.1R1 e 15.1F2 as tabelas IPv4 e IPv6 nascem com só 1.024 entradas cada, pouco para uma borda sob ataque com origens forjadas. O máximo por tabela depende da placa (Junos 17.3R1 ou mais novo): 15 unidades nas MPC2E, MPC3E e MPC4E, 48 nas MPC7E e 220 nas MPC5E e MPC6E.

Antes do Junos 16.1R1 e 15.1F2, mudar flow-table-size reinicia a FPC. Nessas versões, faça a alteração em janela de manutenção.

Passo 4: amostragem nas interfaces

Amostre a entrada das interfaces de trânsito e PTT, por onde o ataque chega. Para ver ataques saindo de clientes, amostre também a entrada das interfaces deles.

Junos: amostragem na entrada das interfaces de borda
set interfaces xe-0/0/0 unit 0 family inet sampling input
set interfaces xe-0/0/0 unit 0 family inet6 sampling input
set interfaces xe-0/0/1 unit 0 family inet sampling input
set interfaces xe-0/0/1 unit 0 family inet6 sampling input
commit check
commit confirmed 10
commit

Se a interface já tem filtro de entrada, a alternativa é um termo com then sample e then accept nesse filtro.

Passo 5: SNMP para o nome das interfaces

Os flows trazem o ifIndex; nome e capacidade da interface vêm por SNMP. Sem SNMP, a interface some da tela de Interfaces.

Junos: SNMP somente leitura para o coletor
set snmp community ew-readonly authorization read-only
set snmp community ew-readonly clients 192.0.2.10/32

Use uma community longa ou SNMPv3, e libere UDP 161 a partir de 192.0.2.10 se houver filtro na lo0. A amostragem é configurada na unidade, e o ifIndex que vai no flow é o da interface lógica (xe-0/0/0.0), não o da porta física. Para cruzar um ifIndex com a interface:

Junos: ifIndex de uma interface
show interfaces xe-0/0/0 | match "SNMP ifIndex"
  Interface index: 148, SNMP ifIndex: 526
  Logical interface xe-0/0/0.0 (Index 333) (SNMP ifIndex 527)

Conferência no roteador

Segundo a Juniper, os flows só começam a ser criados após a sincronização dos route records, cerca de 120 s depois do commit.

Junos: estado da exportação na FPC 0
show services accounting status inline-jflow fpc-slot 0
FPC Slot: 0
     IPV4 export format: Version-IPFIX, IPV6 export format: Version-IPFIX
     Route-Records Set: Yes, Config Set: Yes
     Service Status: PFE-0: Steady
show services accounting flow inline-jflow fpc-slot 0
Flow information
    FPC Slot: 0
    Flow Packets: 1843220, Flow Bytes: 1503127744
    Active Flows: 20915, Total Flows: 611043
    Flows Exported: 590128, Flow Packets Exported: 21870
    Flows Inactive Timed Out: 561200, Flows Active Timed Out: 28928
show services accounting errors inline-jflow fpc-slot 0
  Error information
    FPC Slot: 0
    Flow Creation Failures: 0
    Route Record Lookup Failures: 0, AS Lookup Failures: 0
    Export Packet Failures: 0
    Memory Overload: No, Memory Alloc Fail Count: 0

Config Set: Yes e Route-Records Set: Yes mostram que a instância chegou à FPC. Em versões mais novas, a mesma saída traz IPv4 MAX FLOW Count e IPv6 MAX FLOW Count: compare antes e depois do passo 3 para confirmar que o novo tamanho de tabela entrou. Flows Exported precisa crescer a cada execução. Flow Creation Failures subindo ou Memory Overload: Yes indicam tabela de flow pequena.

Conferência no EdgeWarden

  1. Em Configurações → Rede → Dispositivos, cadastre o MX com Endereço IP 198.51.100.1 (o source-address), Taxa de Amostragem de Flow 1000 e os dados de SNMP.
  2. Na lista, a coluna SNMP deve mostrar Online e a coluna Tráfego atual deve sair do traço.
  3. A coluna Amostragem mostra detectado quando o roteador anuncia a taxa por Options Template, e esse valor vence o cadastro; manual quando vale o cadastro. Se aparecer cadastro: 1:N (ignorado), corrija o cadastro para o valor anunciado.
  4. Em 1 a 2 minutos depois que o roteador começar a exportar, os flows aparecem na tela Flows. Filtre por Exporter IP 198.51.100.1. Os valores já vêm multiplicados pela taxa.
  5. Valide a taxa no painel Fluxo × SNMP nas interfaces da tela Análise do instante (menu Tráfego → Análise do instante, ou clique num ponto de um gráfico de tráfego): 1/N do SNMP indica taxa faltando; N×, taxa aplicada duas vezes.

Se nada chegar, rode no servidor tcpdump -i any -n udp port 2055 and host 198.51.100.1 e acompanhe journalctl -u flowspec-core -f.

Armadilhas comuns

  • Origem diferente do cadastro: as interfaces aparecem como if:527 e o tráfego por interface some.
  • Instância sem FPC: interfaces numa FPC sem sampling-instance não geram flow.
  • sFlow e inline J-Flow na mesma interface: comportamento imprevisível, segundo a Juniper.
  • LAG na saída: na amostragem de entrada, se a interface de saída é um ae, o MX reporta a interface de saída como inválida.
  • Campos fixos: o template do MX traz flags TCP (IE 6) e TTL mínimo e máximo (IE 52/53), mas não fragmentOffset/fragmentFlags (IE 88/197), e nenhum template IPFIX do MX documentado pela Juniper os inclui. O fragmentIdentification (IE 54) que ele exporta não diz se o pacote é fragmento. O detector de Fragment Flood fica cego para o tráfego do MX; se só MX exporta para o EdgeWarden, o log avisa que o detector ficou inerte.
  • ECMP: quando o destino tem vários caminhos, o MX informa o primeiro caminho em IPv4 e zera interface de saída e next-hop em IPv6. A correção é o aprendizado de next-hop (Junos 15.1F2 ou mais novo), mostrado abaixo.
Junos: next-hop correto com ECMP
set services flow-monitoring version-ipfix template ew-ipv4 nexthop-learning enable
set services flow-monitoring version-ipfix template ew-ipv6 nexthop-learning enable

Quem alcança a 2055/UDP pode injetar flows forjados e envenenar a detecção. Restrinja a porta aos IPs dos roteadores.

Próximos passos

Ainda em dúvida entre IPFIX, NetFlow v9 e sFlow? Veja NetFlow v5, v9, IPFIX ou sFlow: qual exportar. Se algum passo falhar, siga o checklist Nenhum flow aparece no EdgeWarden?. Revise portas e buffers no guia de instalação e veja em Recursos como o EdgeWarden usa esses flows para detectar ataques.

Artigos relacionados

Todos os artigos

Quer ver esses flows no EdgeWarden?

Peça uma demonstração com a exportação da sua própria rede, ou siga o guia de instalação para subir o coletor.