Arquivos de Configuração
config.json
Armazena as configurações do sistema, contribuindo para a personalização das análises realizadas.
Já falamos um pouco dele anteriormente
Restart
Sempre que o arquivo config.json
for modificado, é necessário reiniciar o serviço para que as alterações tenham efeito.
Pelo painel de admin ou terminal com comando systemctl restart rr-flow-api.service
Por padrão o arquivo vem com as seguintes configurações config.json
.
{
"api_allow_subnet": [
"127.0.0.1/32",
"::1",
"0.0.0.0/0",
"::/0"
],
"api_bind": "::",
"api_port": 5000,
"cache_lifetime": 1,
"collection_interval": 5,
"core_workers": 4,
"data_path": "/var/rr-flows/",
"debug": false,
"maximum_disk_gb": 70,
"password_admin_panel": "remontti",
"grafana": [
{
"datasources": "xxxxxxxxxxx",
"service_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"url": "http://localhost:3000"
}
],
"source_path": [
{
"buffer": 67108864,
"compress": "lz4",
"name": "Borda",
"port": 3055,
"sampling": 1024,
"snmp": [
{
"community": "public",
"ip": "10.10.10.2",
"port": 161,
"version": 2
}
],
"type": "netflow",
"vendor": "huawei"
}
]
}
Aqui está uma descrição dos itens de configuração:
Opções da API
api_allow_subnet
Uma lista de prefixos de IP que têm permissão para consumir a API. (Mantenha os IPs de localhost)
"api_allow_subnet": [
"127.0.0.1/32",
"::1",
"0.0.0.0/0"
],
api_allow_subnet
Altamente recomendado que você restrinja apenas para seus ips de gerencia, pois as saidas JSONs não passam por autenticação. Não me responsabilizo por vazamento de dados.
api_bind
Endereço IP ao qual a API será vinculada. Padrão 0.0.0.0 para todos.
"api_bind": "0.0.0.0",
api_port
Porta na qual a API estará disponível.
"api_port": "5000",
cache_lifetime
Tempo de vida do cache em dias. /var/cache/rr-flow/
"cache_lifetime": 3,
collection_interval
Intervalo de coleta do flow em minutos (Padrão 5). Não recomendo valores como 2,3 e 4, de preferencia para intervalos de 1,5,10… pois a complexidade de calculos pode acabar entregando ou não entregando alguns dados.
"collection_interval": 5,
core_workers
A quantidade de processos alocados para cada CPU. Padrão em 4.
"core_workers": 4,
Aviso
É possível considerar um aumento desse número, principalmente se houver capacidade de hardware adicional disponível. Contudo, é importante exercer cautela ao aumentar excessivamente, pois isso pode resultar em efeitos indesejados, como a sobrecarga do servidor ou a ocorrência de travamentos.
data_path
Caminho onde os dados de flows coletados serão armazenados.
"data_path": "/var/rr-flows/",
data_path/EXPORTADOR/ANO/MES/DIA/nfcapd.AnoMesDiaHoraMinuto
tree -sh /var/rr-flows/
├── Borda
│ ├── 2023
│ │ └── 07
│ │ └── 11
│ │ ├── nfcapd.202307111600
│ │ ├── nfcapd.202307111605
│ │ ├── nfcapd.202307111610
│ │ ├── nfcapd.202307111615
│ │ └── nfcapd.202307111620
│ └── nfcapd.current.29124
└── Cgnat
├── 2023
│ └── 07
│ └── 11
│ ├── nfcapd.202307111600
│ ├── nfcapd.202307111605
│ ├── nfcapd.202307111610
│ ├── nfcapd.202307111615
│ └── nfcapd.202307111620
└── nfcapd.current.29128
debug
Habilita ou desabilita o modo de depuração. >- false - Desativado >- true - Ativado
"debug": false,
Aviso
Ao ativar o arquivo de log /var/log/rr-flow/rr-flow.log
irá se tornar gigante, não recomendo ativar, apensas se estiver enfrentando alguma dificuldade e precisar tentar identificar um possível problema.
grafana
Configurações para integração com o Grafana.
- datasources UID da fonte de dados do Grafana.
- service_token Token de serviço para autenticação no Grafana.
- url URL do Grafana. (Padrão http://localhost:3000)
"grafana": [
{
"datasources": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"service_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"url": "http://localhost:3000"
}
],
maximum_disk_gb
Espaço máximo em que será armazenado no diretório data_path em gigabytes.
"maximum_disk_gb": "85",
Aviso
Não defina mais que 90% do seu disco.
password_admin_panel
Senha para acessar o painel de administração.
"password_admin_panel": "remontti",
Adicionar nova fonte de fluxo
Para adicionar uma ou mais fontes iremos adionar ao source_path
source_path
Lista de fontes de dados de fluxos (routers que enviarão os fluxos). É possível adicionar várias fontes de dados para diferentes routers, dependendo do nível de sua licença. Isso permite monitorar e coletar fluxos de múltiplas origens.
- buffer: Define o buffer de entrada do soquete de rede para bufflen bytes.
- compress: Algoritmo de compressão. (Padrão lz4)
- lzo: Comprime os arquivos de fluxo com compressão LZO1X-1. Compressão mais rápida.
- lz4: Comprime os arquivos de fluxo com compressão LZ4. Rápido e eficiente.
- bz2: Comprime os arquivos de fluxo com compressão bz2. Lento, mas mais eficiente.
- name: Nome da fonte de dados (Sem espaço).
- port: Porta que receberá os dados.
- sampling: Aplica a taxa de amostragem, a menos que a taxa de amostragem seja anunciada pelo dispositivo exportador, neste caso defina o valor como auto.
- snmp: Configurações SNMP.
- community: Comunidade SNMP. (Padrão public)
- ip: Endereço IP SNMP.
- port: Porta SNMP. (Padrão 161)
- version: Versão SNMP. (Padrão v2)
- type: Tipo de fonte de dados (neste caso, “”).
- netflow
- sflow
- vendor: Fornecedor da fonte de dados.
- huawei
- cisco
- juniper
- routeros / routeros6
- vyos
- linux
name
em “name”: “Nome-Aqui” não utilize espaço.
OBS: Licença
A quantidade de fonte de fluxo diponivel é relativo a sua licença.
Porta
Ao configurar novos fluxos, lembre-se de que a porta de coleta não deve ser a mesma para cada fluxo. Certifique-se de usar portas diferentes para evitar conflitos e garantir a coleta de dados.
Segue alguns exemplos exemplo:
{
//...
"source_path": [
{
"buffer": 67108864,
"compress": "lz4",
"name": "Borda",
"port": 3055,
"sampling": 1024,
"snmp": [
{
"community": "public",
"ip": "10.10.10.2",
"port": 161,
"version": 2
}
],
"type": "netflow",
"vendor": "huawei"
},
{
"buffer": 67108864,
"compress": "lz4",
"name": "Cgnat",
"port": 3066,
"sampling": 5,
"snmp": [
{
"community": "public",
"ip": "10.10.10.3",
"port": 161,
"version": 2
}
],
"type": "netflow",
"vendor": "routeros"
},
{
"buffer": 67108864,
"compress": "lz4",
"name": "Switch",
"port": 3077,
"sampling": 1024,
"snmp": [
{
"community": "public",
"ip": "10.10.10.4",
"port": 161,
"version": 2
}
],
"type": "sflow",
"vendor": "huawei"
}
]
//...
}
SNMP v3
SNMP v3 ainda não tem suporte, mas se desejar deixar configurado segue exemplo.
//...
"snmp": [
{
"auth_password": "senha",
"auth_protocol": "sha", // md5 | sha
"ip": "10.10.10.7",
"port": 161,
"priv_password": "senha",
"priv_protocol": "aes", // des | aes
"username": "usuario",
"version": 3
}
],
//...
license.json
Contém informações sobre a licença do software.
Estrutura
{
"key": "AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE"
}
license.json
É necessário reiniciar o serviço para que a licença tenham efeito.
Se estiver alterando a linceça pelo terminal pode reiniciar o serviço rr-flow-api com o comando:
systemctl restart rr-flow-api.service
custom-filters.json
Arquivo contendo um conjunto de filtros personalizados para otimizar a visualização dos dados nas dashboards, você pode criar seus filtros.
Composto por filter onde deve ser informado os filtros e name você define um nome para seu filtro.
Estrutura
// Exemplo onde tudo que destino ou origem for a porta 22
// e conter as flags FIN ou Reset
//...
{
"filter": "port 22 and (flags F or flags R)",
"name": "Força bruta SSH"
},
//...
custom-filters.json
Ao realizar edições, não é preciso reiniciar o serviço para que as alterações tenham efeito.
Segue uma lista básica para você criar seus próprios filtros e utilizar em Dashboars que possuem campo para inserir filtros manuais.
Filtros
Filtros
src » Origem.
dst » Destino.proto » Protocolo de comunicação.
port » Número da porta.
src port » Porta de origem.
dst port » Porta de destino.net » Prefixo de rede.
src net » Prefixo de rede de origem.
dst net » Prefixo rede de destino.ip » Endereço IP.
src ip » Endereço IP de origem.
dst ip » Endereço IP de destino.as » Sistema Autônomo.
src as » AS de origem.
dst as » AS de destino.
prev as » AS anterior.
next as » Próximo AS.bgpnext ip » Próximo IP BGP.
next ip » Próximo IP.
if número » Interface. (número SNMP)
in if número » Interface de entrada.
out if número » Interface de saída.xip » Endereço IP expandindo.
src xip » Endereço IP de origem expandindo.
dst xip » Endereço IP de destino expandindo.
Operadores
Operadores
AND » Operador lógico AND = E.
NOT » Operador lógico NOT = NÃO.
OR » Operador lógico OR = OU.
-
Operadora OR você deve ter cuidado ao utilizar mais de um filtro, exemplo quero combinar dois endereços IPs com dois tipos de protocolos, ficaria:
(ip 1.1.1.1 OR ip 8.8.8.8) AND (proto TCP OR proto UDP) AND (port 53 OR port 443)
-
Range de portas:
dst port >= 0 and dst port <= 100
Flags
Flags TCP
A » ACK (Acknowledgment) - Confirma o recebimento de dados.
S » SYN (Synchronize) - Inicia uma conexão.
F » FIN (Finish) - Indica o término do envio de dados.
R » RST (Reset) - Redefine a conexão.
P » PSH (Push) - Força a entrega imediata dos dados.
U » URG (Urgent) - Indica dados urgentes.
X » Todas as flags ativadas - Indica um pacote incomum.A ordem das flags dentro de tcpflags não é relevante. Flags não mencionadas são tratadas como não especificadas. Para obter os fluxos com apenas a flag SYN ativada, use a sintaxe flags S and not flags AFRPU
Exemplo
[
{
"filter": "(src ip 8.8.8.8 or src ip 1.1.1.1) AND src port 53 AND dst net 200.200.200.0/22",
"name": "Vido dos DNS famosos para com destino ao meu prefixo"
}
//...
]
fav-asn-prefix-graphs.json
Utilize este arquivo para declarar os ASN que você deseja explorar através de gráficos e análises estatísticas. Além disso, é possível especificar prefixos associados para maior granularidade.
Filtro de ASNs e Prefixos de Rede
Neste arquivo é possível criar um conjunto de elementos informando o Sistemas Autônomos (ASNs) e o prefixos de rede.
Estrutura
[
{
"description": "Descrição",
"filter": {
"as": [
"ASN A",
"ASN B",
"ASN C",
//..
],
"prefix": [
"Prefixos A",
"Prefixos B",
"Prefixos C"
//...
]
}
}
]
Exemplo ASN + Prefixo
Neste caso você pode combinar os ASN com os prefixos.
//...
{
"description": "A + B",
"filter": {
"as": [
"123",
"321"
],
"prefix": [
"123.123.123./22",
"321.321.321.0/22",
"2804:123::/32",
"2804:321::/32"
]
}
},
//...
Exemplo apenas ASN
Você pode adicionar quantos ASN quiser.
{
"description": "Youtube",
"filter": {
"as": [
"36040"
]
}
},
{
"description": "Google All",
"filter": {
"as": [
"15169"
"36040",
"396982"
]
}
},
//...
Exemplo apenas Prefixo
Se em description conter a palavra CDN na dashboard “Análise Geral - ASN + Prefixos (Favoritos)” ele irá aparecer separadamente como o “top CDNs”.
//...
{
"description": "CDN da minha Operadora",
"filter": {
"prefix": [
"192.192.0.0/26",
"2001:db8:face::/64"
]
}
},
//...
fav-asn-prefix-graphs.json
Ao realizar edições, não é preciso reiniciar o serviço para que as alterações tenham efeito.
fav-services-graphs.json
Lista com serviços conhecidos para simplificar no uso das Dashboards. É possível criar combinações com mais de uma porta e mais de um tipo de protocolo.
Estrutura
[
{
"NOME": {
"port": [
"número da porta"
],
"proto": [
"protocolo"
]
},
}
]
Exemplo
[
{
"DNS": {
"port": [
"53"
],
"proto": [
"udp",
"tcp"
]
},
"FTP": {
"port": [
"21",
"20"
],
"proto": [
"tcp"
]
},
"MySQL": {
"port": [
"3306"
],
"proto": [
"tcp"
]
},
"NTP": {
"port": [
"123"
],
"proto": [
"tcp",
"udp"
]
},
"POP E-Mail": {
"port": [
"110",
"143",
"995"
],
"proto": [
"tcp"
]
},
"Ping": {
"port": [],
"proto": [
"icmp"
]
},
"Port 0": {
"port": [
"0"
],
"proto": [
"udp"
]
},
"RDP": {
"port": [
"3389"
],
"proto": [
"tcp",
"udp"
]
},
"SMTP E-Mail": {
"port": [
"25",
"465",
"587"
],
"proto": [
"tcp"
]
},
"SSH": {
"port": [
"22"
],
"proto": [
"tcp",
"udp"
]
},
"SpeedTest": {
"port": [
"8080"
],
"proto": [
"tcp"
]
},
"Telnet": {
"port": [
"23"
],
"proto": [
"tcp",
"udp"
]
},
"Tunel GRE": {
"port": [],
"proto": [
"gre"
]
},
"Web HTTP/HTTPS": {
"port": [
"80",
"443"
],
"proto": [
"tcp",
"udp"
]
}
}
]
fav-services-graphs.json
Ao realizar edições, não é preciso reiniciar o serviço para que as alterações tenham efeito.
ignore-asn.json
Este arquivo permite a exclusão estratégica de determinados ASN (Sistemas Autônomos) da análise, útil para focar em informações relevantes.
Estrutura
[
{
"asn": "Número do AS",
"description": "Descrição"
}
]
Exemplo
[
{
"asn": 65530,
"description": "Ignore iBGPs"
},
{
"asn": 123,
"description": "Ignore meu AS"
},
{
"asn": 321,
"description": "Ignore meu Cliente AS"
},
{
"asn": 0,
"description": "Ignore o BUG"
}
]
ignore-asn.json
Ao realizar edições, não é preciso reiniciar o serviço para que as alterações tenham efeito.
my-prefix.json
Registre aqui seus próprios prefixos de rede. Ao incluir prefixos menores pode agilizar a visualização de gráficos mais detalhado.
Estrutura
{
"asn_prefix": {
"IPv4": [
"Prefixos IPv4"
],
"IPv6": [
"Prefixos IPv6"
]
}
}
Exemplo
{
"asn_prefix": {
"IPv4": [
"192.168.0.0/22",
"192.168.0.0/23",
"192.168.2.0/23",
"192.168.0.0/24",
"192.168.1.0/24",
"192.168.2.0/24",
"192.168.3.0/24"
],
"IPv6": [
"2001:db8::/32",
"2001:db8::/33",
"2001:0db8:8000::/33",
"2001:db8::/34",
"2001:db8:4000::/34",
"2001:db8:8000::/34",
"2001:db8:c000::/34"
]
}
}
my-prefix.json
Ao realizar edições, não é preciso reiniciar o serviço para que as alterações tenham efeito.
my-prefix-int.json
Registre aqui seus próprios prefixos ou de clientes bem como ASN se necessário. Exemplo servidores, clientes dedicados, clientes ASN entre outros.
Estrutura
[
{
"description": "Meus ASN e Prefixos",
"filter": {
"as": [
"ASN"
],
"prefix": [
"Prefixo"
]
}
}
]
Exemplo
[
{
"description": "Meus ASNs e Prefixos",
"filter": {
"as": [
"64512",
"64514"
],
"prefix": [
"192.168.0.0/21",
"192.168.128.0/22",
"2001:db8::/32",
"2001:db9::/32"
]
}
},
{
"description": "Todos meus cliente AS",
"filter": {
"as": [
"65530",
"65531",
"65532"
]
}
},
{
"description": "Cliente ASN X",
"filter": {
"as": [
"65530"
],
"prefix": [
"192.168.144.0/21"
]
}
},
{
"description": "Todos os IPs",
"filter": {
"prefix": [
"0.0.0.0/0",
"::/0"
]
}
},
{
"description": "Servidores",
"filter": {
"prefix": [
"192.168.168.0/26",
"2001:db8:bebe:cafe::/64"
]
}
},
{
"description": "Cliente Dedicado",
"filter": {
"prefix": [
"192.168.168.225/32",
"2001:db8:bebe:100::/56"
]
}
}
{
"description": "Cliente Dedicado",
"filter": {
"prefix": [
"192.168.169.128/28",
"2001:db8:f0da::/48"
]
}
}
]
my-prefix.json
Ao realizar edições, não é preciso reiniciar o serviço para que as alterações tenham efeito.
botnet.json
Este arquivo não está listado na inteface admin, mas se encontra no diretório /opt/rr-flow-api/config/
ele é automaticamente atualizado com a lista de botnets fornecida pela Feodotracker, auxiliando na identificação de atividades maliciosas.
botnet.json
O arquivo botnet.json
é atualizado automaticamente a cada 30min.
interfaces.json
Lista as interfaces das fontes de fluxos. Este arquivo é criado automaticamente durante o início do serviço caso ele não exista. A conexão SNMP é estabelecida a partir dos dados presentes em source_path. O mesmo pode ser editado para customização, bem como remover interfaces desnecessárias. Recomendo deixar apenas as interfaces que estão sendo coletadas, desta forma evita erros quando for coletar, eu partcularmente deixo apenas as de upstream, mas vai depender de cada caso.
Extrutura
{
"NOME DO FLUXO": [
{
"desc_value": "Descrição da interface",
"indice": "Número do indice obtido por SNMP",
"name_value": "Nome da interface"
}
]
}
Obtendo interfaces via SNMP
Para obter os dados de interface automaticamente acesse o painel de administração exemplo http://ip:5000/login clique no botão [Obter dados SNMP]
Aguarde até que o arquivo interfaces.json
seja atualizado. Ele será sobrescrito caso tenham sido feitas alterações antes da atualização. Recomenda-se fazer uma cópia de segurança antes de proceder com a atualização.
Erro ao obter dados SNMP
Se não for possível estabelecer conexão, será criado um exemplo para a origem do fluxo.
Os OIDs consultados para opter os dados são:
Número de indice
1.3.6.1.2.1.2.2.1.2
nome da interface1.3.6.1.2.1.31.1.1.1.18
Você pode utilizar ferramentas como snmpwalk para verificar se consegue estabelecer conexão, nmap para verificar se a porta SNMP/UDP esta aberta.
Criando manualmente
É possível você criar seu próprio arquivo de interfaces, porém você ira necessitar do snmpwalk para obter os indices, exemplo do comando snmpwalk -v2c -c public 10.250.250.1 IF-MIB::ifIndex
Exemplo
{
"Border": [
{
"desc_value": "OPERADORA A",
"indice": "42",
"name_value": "40GE0/1/49.1234"
},
{
"desc_value": "OPERADORA B",
"indice": "43",
"name_value": "40GE0/1/49.2345"
}
],
"Cgnat": [
{
"desc_value": "BORDA",
"indice": "1",
"name_value": "sfp-sfpplus1"
},
],
}
interfaces.json
Ao realizar edições, não é preciso reiniciar o serviço para que as alterações tenham efeito.
peers.json
Obtem a lista de Peers BGP. Também é gerado automaticamente ao iniciar caso não exista. Necessário estabelecer conexão SNMP a partir dos dados presentes em source_path. Pode ser editado para adequação às suas necessidades.
Extrutura
{
"NOME DO FLUXO": [
{
"asn": "NUM AS",
"ip_peer": "ENDERECO IP DO PEER REMOTO",
"name": "DESCRIÇÃO PARA SESSÃO"
},
]
}
Obtendo Peer via SNMP
Através do painel de administração, clique no botão [Obter dados SNMP] e, em seguida, [Obter dados de peers]. É fundamental ressaltar que essa ação sempre substituirá o arquivo existente.
Suporte
Até o momento é possivel obter os peer apensar de Huawei e Cisco. No entanto, você pode criar manualmente este arquivo com facilidade.
Criando manualmente
É possível você criar seu próprio arquivo de interfaces, porém você ira necessitar do snmpwalk para obter os indices, exemplo do comando snmpwalk -v2c -c public 10.250.250.1 IF-MIB::ifIndex
Exemplo
{
"Border": [
{
"asn": "15169",
"ip_peer": "187.16.216.55",
"name": "GOOGLE"
},
{
"asn": "65530",
"ip_peer": "10.50.50.1",
"name": "Cgnat"
}
],
"Cgnat": [
{
"asn": "65530",
"ip_peer": "10.50.50.2",
"name": "iBGP Borda"
},
{
"asn": "65530",
"ip_peer": "10.50.50.6",
"name": "iBGP BNG"
}
]
}
Erro ao obter dados SNMP
Se não for possível estabelecer conexão, será criado um exemplo para a origem do fluxo.
Os OIDs consultados para obter os dados são:
OID PEER HUAWEI
IP : 1.3.6.1.4.1.2011.5.25.177.1.1.2.1.4.0
AS : 1.3.6.1.4.1.2011.5.25.177.1.1.2.1.2.0
OID PEER CISCO
IP : 1.3.6.1.2.1.15.3.1.7
AS : 1.3.6.1.2.1.15.3.1.9
Você pode utilizar ferramentas como snmpwalk para verificar se consegue estabelecer conexão, nmap para verificar se a porta SNMP/UDP esta aberta.
peers.json
Ao realizar edições, não é preciso reiniciar o serviço para que as alterações tenham efeito.