A API Flow expõe o ambiente Flow do Ravi Monitor (coleta NetFlow/IPFIX/sFlow, detecção e mitigação de DDoS). Permite acompanhar tudo (tráfego em tempo real, eventos/ataques, anomalias, saúde do coletor, enriquecimento BGP, mitigações ativas e configuração) e gerenciar tudo (disparar/remover mitigação, resolver eventos, prefixos monitorados, whitelist/allowlist, regras de detecção, janelas de manutenção e mais) — sem abrir a interface.
⚠️ IMPORTANTE:
Acesso a Flow (Configurações → Integrações → Gerenciamento de Chave API).ravi-flow em execução). Use operation=overview para confirmar collector_online.Todas as operações Flow requerem:
action=flowoperation: Operação específicatoken: Token com permissão flowOs parâmetros são aceitos via GET ou POST.
Atenção: diferente das APIs OLT/DNS/WhatsApp (que devolvem
{"msg": ...}), a API Flow usa um envelope padronizado:
{
"status": "success",
"data": { }
}
{
"status": "error",
"message": "Invalid Flow operation"
}
Sempre verifique status antes de ler data. Erros comuns: Token not provided (400), Invalid token (401), Access denied for flow (403 — o token não tem a permissão Flow), Please provide a valid operation (400).
Indicadores gerais: estado do coletor, tráfego agregado e contadores (exportadores, prefixos, eventos, anomalias, mitigações, alertas BGP).
curl -X POST "https://seu-servidor-ravi/api.php" \
-d "token=SEU_TOKEN" \
-d "action=flow" \
-d "operation=overview"
{
"status": "success",
"data": {
"collector_online": true,
"collector_version": "1.0.0",
"snapshot_age_sec": 2,
"flows_per_sec": 1488,
"total_in_bps": 24393479106,
"total_out_bps": 24393479007,
"exporters_total": 5,
"exporters_active": 5,
"prefixes_monitored": 8,
"events_active": 0,
"events_mitigating": 0,
"anomalies_active": 1,
"mitigations_active": 0,
"bgp_alerts_open": 0,
"bgp_rib": { "ativa": true, "v4": 0, "v6": 0, "built_at": 1782167047 }
}
}
Snapshot ao vivo do coletor: tráfego por exportador e por interface (bps/pps + capacidade), além do top-N (ASN/proto/país) e top por exportador. Exportadores cadastrados sem fluxo aparecem com sem_fluxo: true.
curl -X POST "https://seu-servidor-ravi/api.php" \
-d "token=SEU_TOKEN" \
-d "action=flow" \
-d "operation=live"
{
"status": "success",
"data": {
"collector_online": true,
"flows_per_sec": 1488,
"total_in_bps": 24393479106,
"total_out_bps": 24393479007,
"exporters": [
{
"id": 30, "nome": "NE-8000-JONNY",
"total_in_bps": 12000000000, "total_out_bps": 11000000000,
"interfaces": [
{ "if_index": 12, "nome": "Uplink-Transito", "in_bps": 8000000000, "out_bps": 1000000, "in_pps": 900000, "out_pps": 1200, "cap_bps": 100000000000 }
],
"top": { }
}
],
"top": { "dst_as": [], "proto": [], "dst_pais": [] }
}
}
Self-health: idade do snapshot, fps/pps, bloco health do coletor (drops de canal/kernel, RSS/heap/goroutines, RIB), lag do rollup e tamanho das tabelas flow_*.
curl ... -d "action=flow" -d "operation=health"
Lista as fontes de fluxo (NetFlow/IPFIX/sFlow) com modelo, versão, sampling, ASN e estado.
curl ... -d "action=flow" -d "operation=exporters"
Interfaces conhecidas (via SNMP). Opcional: filtrar por exportador.
exporter_id: ID do exportadorcurl ... -d "action=flow" -d "operation=interfaces" -d "exporter_id=30"
Lista os CIDRs monitorados (flow_prefixos).
curl ... -d "action=flow" -d "operation=prefixes"
Lista os eventos de detecção. Por padrão, os mais recentes (até 100).
status: ativo, mitigando, resolvido ou ativos (atalho para ativo+mitigando)severity: info, warning, criticalexporter_id: filtra por exportadorsince_id: retorna apenas eventos com id maior (polling incremental)limit: máximo de registros (1–1000, padrão 100)curl ... -d "action=flow" -d "operation=events" -d "status=ativos" -d "severity=critical" -d "limit=50"
Detalhe completo de um evento + as origens do ataque (src_ip, ASN, packets, país, cidade).
id: ID do eventocurl ... -d "action=flow" -d "operation=event" -d "id=484"
Lista anomalias (desvio sazonal). Opcional status = ativa | resolvida.
curl ... -d "action=flow" -d "operation=anomalies" -d "status=ativa"
Lista as regras de detecção (flow_deteccao): escopo, assinatura, limiares, severidade e auto-mitigação.
curl ... -d "action=flow" -d "operation=detections"
Lista as regras de mitigação (FlowSpec/RTBH). Opcional status = active | withdrawn | expired (padrão active).
curl ... -d "action=flow" -d "operation=mitigations" -d "status=active"
Prefixos protegidos da auto-mitigação (flow_mitig_whitelist).
curl ... -d "action=flow" -d "operation=whitelist"
Exceções anti-falso-positivo (flow_allowlist).
curl ... -d "action=flow" -d "operation=allowlist"
Peers de mitigação (anúncio FlowSpec/RTBH) e peers de coleta de rota (enriquecimento da RIB).
curl ... -d "action=flow" -d "operation=peers"
Estado da coleta de rota: flag collection_active, RIB do snapshot, peers de rota e alertas de roteamento (origin change / sub-prefix hijack).
curl ... -d "action=flow" -d "operation=bgp"
Lista os templates de FlowSpec (flow_flowspec_templates).
curl ... -d "action=flow" -d "operation=templates"
Catálogo de comunidades BGP (flow_communities).
curl ... -d "action=flow" -d "operation=communities"
Feriados usados no baseline sazonal (flow_feriados).
curl ... -d "action=flow" -d "operation=holidays"
Lista as janelas de manutenção/silêncio (flow_manutencao).
curl ... -d "action=flow" -d "operation=maintenance"
Top-N do snapshot ao vivo. Opcional dimension (ex.: dst_as, src_ip, proto, dst_pais) para retornar apenas uma dimensão.
curl ... -d "action=flow" -d "operation=top" -d "dimension=dst_as"
Configurações do Flow (flow_settings) em formato chave/valor.
curl ... -d "action=flow" -d "operation=settings"
⚠️ As operações de mitigação atuam no plano de roteamento (anúncio BGP FlowSpec/RTBH). Use com critério — o coletor
ravi-flowaplica o comando enfileirado.
Mitiga um destino sob ataque. O PHP não fala BGP diretamente: enfileira o comando para o daemon ravi-flow.
dst: IP (/32) ou CIDR (carpet bombing). Ex.: 192.0.2.10 ou 192.0.2.0/24modo: vetor (FlowSpec cirúrgico, padrão) ou rtbh (blackhole do IP inteiro)vetor: vetor do ataque para o FlowSpec (ex.: udp_flood, ampl_dns)proto: número do protocolo IP (ex.: 17 = UDP)port: portaacao: discard (padrão) ou ratelimitrate: bps quando acao=ratelimitgrupo_id: grupo de anúncio para direcionamento (0 = todos)event_id: vincula a mitigação a um evento (marca o evento como mitigando)curl -X POST "https://seu-servidor-ravi/api.php" \
-d "token=SEU_TOKEN" \
-d "action=flow" \
-d "operation=mitigate" \
-d "event_id=484" \
-d "dst=192.0.2.10" \
-d "modo=vetor" \
-d "vetor=udp_flood" \
-d "proto=17" \
-d "acao=discard"
curl ... -d "operation=mitigate" -d "dst=192.0.2.10" -d "modo=rtbh"
{ "status": "success", "data": { "queued": true, "modo": "vetor", "dst": "192.0.2.10" } }
Remove a mitigação por evento e/ou destino.
event_id: ID do eventodst: IP ou CIDRcurl ... -d "action=flow" -d "operation=mitigate_clear" -d "event_id=484"
Marca um evento como resolvido.
id: ID do eventocurl ... -d "action=flow" -d "operation=event_resolve" -d "id=484"
Resolve o evento e, quando o destino é um IP, adiciona-o à allowlist (origem auto) para reduzir reincidência.
id: ID do eventocurl ... -d "action=flow" -d "operation=event_false_positive" -d "id=484"
Marca uma anomalia como resolvida.
id: ID da anomaliacurl ... -d "action=flow" -d "operation=anomaly_resolve" -d "id=15"
cidr: CIDR ou IP (ex.: 203.0.113.0/24)nome: rótulocliente: cliente associadocurl ... -d "action=flow" -d "operation=prefix_add" -d "cidr=203.0.113.0/24" -d "nome=Cliente-X"
id ou cidrcurl ... -d "action=flow" -d "operation=prefix_del" -d "cidr=203.0.113.0/24"
id: ID da regraativo: 1 (ativa) ou 0 (desativa)curl ... -d "action=flow" -d "operation=detection_toggle" -d "id=22" -d "ativo=0"
cidr: CIDR ou IPnome: rótulocurl ... -d "action=flow" -d "operation=whitelist_add" -d "cidr=198.51.100.0/24" -d "nome=Core"
id ou cidrcurl ... -d "action=flow" -d "operation=whitelist_del" -d "cidr=198.51.100.0/24"
escopo: src_asn, src_prefixo, dst_ip ou dst_prefixovalor: o valor conforme o escopo (ASN, CIDR ou IP)motivo: justificativacurl ... -d "action=flow" -d "operation=allowlist_add" -d "escopo=src_asn" -d "valor=15169" -d "motivo=Google"
id: ID da entradacurl ... -d "action=flow" -d "operation=allowlist_del" -d "id=7"
id: ID do exportadorativo: 1 ou 0curl ... -d "action=flow" -d "operation=exporter_toggle" -d "id=30" -d "ativo=1"
Silencia alertas durante uma janela. Por padrão começa "agora".
inicio: YYYY-MM-DD HH:MM:SS (vazio = agora)fim: YYYY-MM-DD HH:MM:SS (obrigatório se indefinida=0)indefinida: 1 para janela sem fim (ignora fim)escopo: global (padrão) ou exportadorexportador_id: necessário quando escopo=exportadormotivo: descriçãocurl ... -d "action=flow" -d "operation=maintenance_add" \
-d "fim=2026-06-23 04:00:00" -d "motivo=Janela de upgrade"
id: ID da janelacurl ... -d "action=flow" -d "operation=maintenance_end" -d "id=3"
#!/bin/bash
TOKEN="seu_token_aqui"
API_URL="https://seu-servidor-ravi/api.php"
flow() {
# $1 = operation, demais = pares chave=valor
local op="$1"; shift
local args=()
for kv in "$@"; do args+=( -d "$kv" ); done
curl -s -X POST "$API_URL" \
-d "token=$TOKEN" -d "action=flow" -d "operation=$op" "${args[@]}"
}
# Estado geral
flow overview
# Ataques ativos
flow events "status=ativos" "limit=20"
# Mitigar um destino com FlowSpec por vetor
flow mitigate "event_id=484" "dst=192.0.2.10" "vetor=udp_flood" "acao=discard"
# Remover a mitigação
flow mitigate_clear "event_id=484"
<?php
/**
* Chama a API Flow do Ravi Monitor.
*
* @param string $operation Operação (overview, events, mitigate, ...)
* @param array $params Parâmetros adicionais (chave => valor)
* @return array Resposta decodificada ({status, data|message})
*/
function raviFlow(string $operation, array $params = []): array {
$token = 'seu_token_aqui';
$apiUrl = 'https://seu-servidor-ravi/api.php';
$data = array_merge([
'token' => $token,
'action' => 'flow',
'operation' => $operation,
], $params);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true) ?: ['status' => 'error', 'message' => 'sem resposta'];
}
// Uso
$r = raviFlow('overview');
if (($r['status'] ?? '') === 'success') {
echo "Coletor online: " . var_export($r['data']['collector_online'], true) . "\n";
}
// Mitigar (RTBH)
$r = raviFlow('mitigate', ['dst' => '192.0.2.10', 'modo' => 'rtbh']);
?>
| Mensagem | HTTP | Descrição |
|---|---|---|
status: success |
200 | Operação concluída (ler data) |
Token not provided |
400 | Falta token |
Action not provided |
400 | Falta action |
Please provide a valid operation |
400 | Falta operation |
Invalid Flow operation |
400 | operation desconhecida |
Invalid token |
401 | Token não encontrado |
Access denied for flow |
403 | Token sem a permissão Flow |
Invalid dst (use IP or CIDR) |
400 | dst inválido em mitigate |
Invalid CIDR/IP |
400 | cidr inválido (prefixo/whitelist) |
Event not found |
404 | id de evento inexistente |
Database error |
500 | Falha ao gravar/ler |
flow.ravi-flow em execução e dos peers BGP de mitigação configurados; o disparo é assíncrono (enfileirado).events retorna no máximo 1000 registros por chamada; para histórico extenso, pagine com since_id.live, health, top) refletem o snapshot mais recente do coletor (/opt/Ravi/flow/live/live.json).Nota: As operações de gerenciamento alteram o comportamento de detecção/mitigação em produção. Em automações, prefira validar antes com as operações de leitura (ex.: confirmar o
evente odstantes demitigate).