Recolha registos do router Nokia

Compatível com:

Este documento explica como recolher registos do router Nokia para o Google Security Operations através de um agente Bindplane. O analisador extrai primeiro campos como datas/horas, endereços IP, nomes de anfitriões e detalhes de eventos através de padrões Grok. Em seguida, mapeia estes campos extraídos para os campos correspondentes no esquema UDM do Google SecOps, realizando transformações de dados e enriquecendo os dados com contexto adicional com base em tipos e condições de eventos específicos.

Antes de começar

  • Certifique-se de que tem uma instância do Google SecOps.
  • Certifique-se de que está a usar o Windows 2016 ou posterior, ou um anfitrião Linux com systemd.
  • Se estiver a executar o serviço através de um proxy, certifique-se de que as portas da firewall estão abertas.
  • Certifique-se de que tem acesso privilegiado ao router Nokia.

Obtenha o ficheiro de autenticação de carregamento do Google SecOps

  1. Inicie sessão na consola Google SecOps.
  2. Aceda a Definições do SIEM > Agentes de recolha.
  3. Transfira o ficheiro de autenticação de carregamento. Guarde o ficheiro de forma segura no sistema onde o Bindplane vai ser instalado.

Obtenha o ID de cliente do Google SecOps

  1. Inicie sessão na consola Google SecOps.
  2. Aceda a Definições do SIEM > Perfil.
  3. Copie e guarde o ID do cliente da secção Detalhes da organização.

Instale o agente do Bindplane

Instalação do Windows

  1. Abra a Linha de comandos ou o PowerShell como administrador.
  2. Execute o seguinte comando:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Instalação do Linux

  1. Abra um terminal com privilégios de raiz ou sudo.
  2. Execute o seguinte comando:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    

Recursos de instalação adicionais

Configure o agente Bindplane para carregar o Syslog e enviá-lo para o Google SecOps

  1. Aceda ao ficheiro de configuração:

    1. Localize o ficheiro config.yaml. Normalmente, encontra-se no diretório /etc/bindplane-agent/ no Linux ou no diretório de instalação no Windows.
    2. Abra o ficheiro com um editor de texto (por exemplo, nano, vi ou Bloco de notas).
  2. Edite o ficheiro config.yaml da seguinte forma:

    receivers:
        udplog:
            # Replace the port and IP address as required
            listen_address: "0.0.0.0:514"
    
    exporters:
        chronicle/chronicle_w_labels:
            compression: gzip
            # Adjust the path to the credentials file you downloaded in Step 1
            creds: '/path/to/ingestion-authentication-file.json'
            # Replace with your actual customer ID from Step 2
            customer_id: <customer_id>
            endpoint: malachiteingestion-pa.googleapis.com
            # Add optional ingestion labels for better organization
            ingestion_labels:
                log_type: NOKIA_ROUTER
                raw_log_field: body
    
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - udplog
                exporters:
                    - chronicle/chronicle_w_labels
    
  3. Substitua a porta e o endereço IP conforme necessário na sua infraestrutura.

  4. Substitua <customer_id> pelo ID de cliente real.

  5. Atualize /path/to/ingestion-authentication-file.json para o caminho onde o ficheiro de autenticação foi guardado na secção Obtenha o ficheiro de autenticação de carregamento do Google SecOps.

Reinicie o agente do Bindplane para aplicar as alterações

  • Para reiniciar o agente do Bindplane no Linux, execute o seguinte comando:

    sudo systemctl restart bindplane-agent
    
  • Para reiniciar o agente do Bindplane no Windows, pode usar a consola Services ou introduzir o seguinte comando:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Configure o Syslog no router de serviços Nokia

  1. Entre no modo de configuração:

    config# log
    
  2. Defina um destino Syslog:

    config>log# syslog 1
    
  3. Configure os parâmetros do Syslog:

    config>log>syslog# address <syslog-server-ip>
    config>log>syslog# port <port-number>
    config>log>syslog# facility local0
    config>log>syslog# level info
    config>log>syslog# log-prefix "Nokia-SR"
    config>log>syslog# description "Google SecOps syslog server"
    
    • Substitua <syslog-server-ip> pelo endereço IP do agente do Bindplane e <port-number> pela porta adequada (por exemplo, 514 para UDP).
  4. Aplique o destino Syslog a um ficheiro de registo:

    config>log# log-id 1
    config>log>log-id# to syslog 1
    
  5. Ative o ficheiro de registo:

    config>log>log-id# no shutdown
    
  6. Guarde a configuração:

    config>log>log-id# exit
    config>log# save
    

Exemplo de configuração completa:

```bash
config# log
config>log# syslog 1
config>log>syslog# address 192.168.1.100
config>log>syslog# port 514
config>log>syslog# facility local0
config>log>syslog# level info
config>log>syslog# log-prefix "Nokia-SR"
config>log>syslog# description "Google SecOps syslog server"
config>log>syslog# exit
config>log# log-id 1
config>log>log-id# to syslog 1
config>log>log-id# no shutdown
config>log>log-id# exit
config>log# save
```

Tabela de mapeamento da UDM

Campo de registo Mapeamento de UDM Lógica
%{SYSLOGTIMESTAMP:date_time} metadata.event_timestamp Extraído do registo não processado e convertido numa data/hora.
%{IP:src_ip} principal.ip Extraído do registo não processado.
%{HOSTNAME:host_name} principal.hostname Extraído do registo não processado.
%{INT:sequence_id} metadata.product_log_id Extraído do registo não processado.
%{DATA:router_name} metadata.product_name Extraído do registo não processado.
%{DATA:application} target.application Extraído do registo não processado.
%{WORD:severity} security_result.severity Mapeado a partir da gravidade do registo não processado com base na seguinte lógica:
- CLEARED, INFO -> INFORMATIONAL
- MINOR -> ERROR
- WARNING -> LOW
- MAJOR -> HIGH
- CRITICAL -> CRITICAL
%{DATA:event_name} metadata.product_event_type Extraído do registo não processado.
%{INT:event_id} additional.fields.value.string_value Extraído do registo não processado e colocado em additional fields com a chave Event Id.
%{GREEDYDATA:message1} Usado para extrair vários campos com base no event_name. Veja a lógica para campos específicos abaixo.
Group %{NOTSPACE:group_id} target.group.product_object_id Extraído de message1 quando event_name está relacionado com eventos BGP.
%{WORD} %{IP:dest_ip} target.ip Extraído de message1 quando event_name está relacionado com eventos BGP.
%{GREEDYDATA:desc} security_result.description Extraído de message1 para vários cenários de event_name.
SAP %{DATA:sap_id} additional.fields.value.string_value Extraído de message1 quando event_name é sapStatusChanged e colocado no interior de additional fields com a chave SAP Id.
in service %{INT:service_id} additional.fields.value.string_value Extraído de message1 quando event_name é sapStatusChanged e colocado no interior de additional fields com a chave Service Id.
\\(customer %{INT:customer_id}\\) additional.fields.value.string_value Extraído de message1 quando event_name é sapStatusChanged e colocado no interior de additional fields com a chave Customer Id.
admin=%{WORD:admin_status} additional.fields.value.string_value Extraído de message1 quando event_name é sapStatusChanged e colocado no interior de additional fields com a chave Admin Status.
oper=%{WORD:operation_status} additional.fields.value.string_value Extraído de message1 quando event_name é sapStatusChanged e colocado no interior de additional fields com a chave Operation Status.
flags=%{WORD:flag} additional.fields.value.string_value Extraído de message1 quando event_name é sapStatusChanged e colocado no interior de additional fields com a chave Flag.
with MI:SCI %{DATA:mi_sci} additional.fields.value.string_value Extraído de message1 quando event_name é tmnxMkaSessionEstablished e colocado no interior de additional fields com a chave MI:SCI.
on port %{DATA:port_id} additional.fields.value.string_value Extraído de message1 quando event_name é tmnxMkaSessionEstablished e colocado no interior de additional fields com a chave Port Id.
sub-port %{INT:sub_port_id} additional.fields.value.string_value Extraído de message1 quando event_name é tmnxMkaSessionEstablished e colocado no interior de additional fields com a chave Sub-port Id.
CA %{INT:ca} additional.fields.value.string_value Extraído de message1 quando event_name é tmnxMkaSessionEstablished e colocado no interior de additional fields com a chave CA.
EAPOL-destination %{MAC:dest_mac} target.mac Extraído de message1 quando event_name é tmnxMkaSessionEstablished.
local port-id %{DATA:local_port_id} target.resource.attribute.labels.value Extraído de message1 para valores de event_name específicos e colocado em target.resource.attribute.labels com a chave local_port_id.
dest-mac-type %{NOTSPACE:mac_type} target.resource.attribute.labels.value Extraído de message1 para valores de event_name específicos e colocado em target.resource.attribute.labels com a chave mac_type.
remote system name %{HOSTNAME:dest_host} target.hostname Extraído de message1 para valores event_name específicos.
remote chassis-id %{DATA:dest_mac} target.mac Extraído de message1 para valores event_name específicos.
remote port-id %{DATA:port_id} target.resource.attribute.labels.value Extraído de message1 para valores de event_name específicos e colocado em target.resource.attribute.labels com a chave port_id.
remote-index %{INT:remote_index} target.resource.attribute.labels.value Extraído de message1 para valores de event_name específicos e colocado em target.resource.attribute.labels com a chave remote_index.
remote management address %{IP:dest_ip} target.ip Extraído de message1 para valores event_name específicos.
advRtr:%{HOSTNAME:dest_host}%{GREEDYDATA}, ip@:%{IP:dest_ip}/%{INT:dest_port} target.hostname, target.ip, target.port Extraído de message1 para valores event_name específicos.
SID:%{INT:sid} network.session_id Extraído de message1 para valores event_name específicos.
level:%{DATA:level} target.resource.attribute.labels.value Extraído de message1 para valores de event_name específicos e colocado em target.resource.attribute.labels com a chave level.
mtid:%{INT:mtid} target.resource.attribute.labels.value Extraído de message1 para valores de event_name específicos e colocado em target.resource.attribute.labels com a chave mtid.
type:%{WORD:type} target.resource.attribute.labels.value Extraído de message1 para valores de event_name específicos e colocado em target.resource.attribute.labels com a chave type.
flags:%{WORD:flag} target.resource.attribute.labels.value Extraído de message1 para valores de event_name específicos e colocado em target.resource.attribute.labels com a chave flag.
, algo:%{INT:algo} target.resource.attribute.labels.value Extraído de message1 para valores de event_name específicos e colocado em target.resource.attribute.labels com a chave algo.
Description:%{GREEDYDATA:desc}. security_result.description Extraído de message1 quando event_name é mafEntryMatch.
SrcIP principal.ip Extraído do campo kv_data quando event_name é mafEntryMatch.
SrcIP: %{INT:src_port} principal.port Extraído do campo kv_data quando event_name é mafEntryMatch.
DstIP target.ip Extraído do campo kv_data quando event_name é mafEntryMatch.
DstIP: %{INT:dest_port} target.port Extraído do campo kv_data quando event_name é mafEntryMatch.
Protocol network.ip_protocol Extraído do campo kv_data quando event_name é mafEntryMatch.
N/A metadata.vendor_name Definido como NOKIA_ROUTER.
N/A metadata.event_type Determinado com base na presença e na combinação dos campos extraídos:
- src_ip, dest_ip e network presentes -> NETWORK_CONNECTION
- principal presente -> STATUS_UPDATE
- Caso contrário -> GENERIC_EVENT
%{GREEDYDATA:description} metadata.description Extraído de message1 quando event_name é tmnxMkaSessionEstablished.

Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.