Collecter les journaux du routeur Nokia

Compatible avec :

Ce document explique comment collecter les journaux de routeur Nokia dans Google Security Operations à l'aide d'un agent Bindplane. L'analyseur extrait d'abord des champs tels que les codes temporels, les adresses IP, les noms d'hôte et les détails des événements à l'aide de modèles Grok. Il mappe ensuite ces champs extraits aux champs correspondants du schéma UDM Google SecOps, en transformant les données et en les enrichissant avec un contexte supplémentaire en fonction de types et de conditions d'événements spécifiques.

Avant de commencer

  • Assurez-vous de disposer d'une instance Google SecOps.
  • Assurez-vous d'utiliser Windows 2016 ou une version ultérieure, ou un hôte Linux avec systemd.
  • Si vous exécutez le programme derrière un proxy, assurez-vous que les ports du pare-feu sont ouverts.
  • Assurez-vous de disposer d'un accès privilégié au routeur Nokia.

Obtenir le fichier d'authentification d'ingestion Google SecOps

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres du SIEM > Agents de collecte.
  3. Téléchargez le fichier d'authentification d'ingestion. Enregistrez le fichier de manière sécurisée sur le système sur lequel Bindplane sera installé.

Obtenir l'ID client Google SecOps

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres SIEM> Profil.
  3. Copiez et enregistrez le numéro client de la section Informations sur l'organisation.

Installer l'agent Bindplane

Installation de fenêtres

  1. Ouvrez l'invite de commandes ou PowerShell en tant qu'administrateur.
  2. Exécutez la commande suivante :

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

Installation de Linux

  1. Ouvrez un terminal avec les droits root ou sudo.
  2. Exécutez la commande suivante :

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

Ressources d'installation supplémentaires

Configurer l'agent Bindplane pour ingérer Syslog et l'envoyer à Google SecOps

  1. Accédez au fichier de configuration :

    1. Recherchez le fichier config.yaml. En règle générale, il se trouve dans le répertoire /etc/bindplane-agent/ sous Linux ou dans le répertoire d'installation sous Windows.
    2. Ouvrez le fichier à l'aide d'un éditeur de texte (par exemple, nano, vi ou le Bloc-notes).
  2. Modifiez le fichier config.yaml comme suit :

    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. Remplacez le port et l'adresse IP selon les besoins de votre infrastructure.

  4. Remplacez <customer_id> par le numéro client réel.

  5. Mettez à jour /path/to/ingestion-authentication-file.json en indiquant le chemin d'accès où le fichier d'authentification a été enregistré dans la section Obtenir le fichier d'authentification pour l'ingestion Google SecOps.

Redémarrez l'agent Bindplane pour appliquer les modifications.

  • Pour redémarrer l'agent Bindplane sous Linux, exécutez la commande suivante :

    sudo systemctl restart bindplane-agent
    
  • Pour redémarrer l'agent Bindplane sous Windows, vous pouvez utiliser la console Services ou saisir la commande suivante :

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Configurer Syslog sur un routeur de service Nokia

  1. Passez en mode Configuration :

    config# log
    
  2. Définissez une destination Syslog :

    config>log# syslog 1
    
  3. Configurez les paramètres 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"
    
    • Remplacez <syslog-server-ip> par l'adresse IP de l'agent Bindplane et <port-number> par le port approprié (par exemple, 514 pour UDP).
  4. Appliquez la destination Syslog à un fichier journal :

    config>log# log-id 1
    config>log>log-id# to syslog 1
    
  5. Activez le fichier journal :

    config>log>log-id# no shutdown
    
  6. Enregistrez la configuration :

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

Exemple de configuration complète :

```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
```

Table de mappage UDM

Champ de journal Mappage UDM Logique
%{SYSLOGTIMESTAMP:date_time} metadata.event_timestamp Extrait du journal brut et converti en code temporel.
%{IP:src_ip} principal.ip Extrait du journal brut.
%{HOSTNAME:host_name} principal.hostname Extrait du journal brut.
%{INT:sequence_id} metadata.product_log_id Extrait du journal brut.
%{DATA:router_name} metadata.product_name Extrait du journal brut.
%{DATA:application} target.application Extrait du journal brut.
%{WORD:severity} security_result.severity Mappé à partir de la gravité du journal brut selon la logique suivante :
- CLEARED, INFO -> INFORMATIONAL
- MINOR -> ERROR
- WARNING -> LOW
- MAJOR -> HIGH
- CRITICAL -> CRITICAL
%{DATA:event_name} metadata.product_event_type Extrait du journal brut.
%{INT:event_id} additional.fields.value.string_value Extrait du journal brut et placé dans additional fields avec la clé Event Id.
%{GREEDYDATA:message1} Utilisé pour extraire différents champs en fonction de event_name. Consultez la logique pour des champs spécifiques ci-dessous.
Group %{NOTSPACE:group_id} target.group.product_object_id Extrait de message1 lorsque event_name est lié à des événements BGP.
%{WORD} %{IP:dest_ip} target.ip Extrait de message1 lorsque event_name est lié à des événements BGP.
%{GREEDYDATA:desc} security_result.description Extrait de message1 pour différents scénarios event_name.
SAP %{DATA:sap_id} additional.fields.value.string_value Extrait de message1 lorsque event_name est sapStatusChanged et placé dans additional fields avec la clé SAP Id.
in service %{INT:service_id} additional.fields.value.string_value Extrait de message1 lorsque event_name est sapStatusChanged et placé dans additional fields avec la clé Service Id.
\\(customer %{INT:customer_id}\\) additional.fields.value.string_value Extrait de message1 lorsque event_name est sapStatusChanged et placé dans additional fields avec la clé Customer Id.
admin=%{WORD:admin_status} additional.fields.value.string_value Extrait de message1 lorsque event_name est sapStatusChanged et placé dans additional fields avec la clé Admin Status.
oper=%{WORD:operation_status} additional.fields.value.string_value Extrait de message1 lorsque event_name est sapStatusChanged et placé dans additional fields avec la clé Operation Status.
flags=%{WORD:flag} additional.fields.value.string_value Extrait de message1 lorsque event_name est sapStatusChanged et placé dans additional fields avec la clé Flag.
with MI:SCI %{DATA:mi_sci} additional.fields.value.string_value Extrait de message1 lorsque event_name est tmnxMkaSessionEstablished et placé dans additional fields avec la clé MI:SCI.
on port %{DATA:port_id} additional.fields.value.string_value Extrait de message1 lorsque event_name est tmnxMkaSessionEstablished et placé dans additional fields avec la clé Port Id.
sub-port %{INT:sub_port_id} additional.fields.value.string_value Extrait de message1 lorsque event_name est tmnxMkaSessionEstablished et placé dans additional fields avec la clé Sub-port Id.
CA %{INT:ca} additional.fields.value.string_value Extrait de message1 lorsque event_name est tmnxMkaSessionEstablished et placé dans additional fields avec la clé CA.
EAPOL-destination %{MAC:dest_mac} target.mac Extrait de message1 lorsque event_name est tmnxMkaSessionEstablished.
local port-id %{DATA:local_port_id} target.resource.attribute.labels.value Extrait de message1 pour des valeurs event_name spécifiques et placé dans target.resource.attribute.labels avec la clé local_port_id.
dest-mac-type %{NOTSPACE:mac_type} target.resource.attribute.labels.value Extrait de message1 pour des valeurs event_name spécifiques et placé dans target.resource.attribute.labels avec la clé mac_type.
remote system name %{HOSTNAME:dest_host} target.hostname Extrait de message1 pour des valeurs event_name spécifiques.
remote chassis-id %{DATA:dest_mac} target.mac Extrait de message1 pour des valeurs event_name spécifiques.
remote port-id %{DATA:port_id} target.resource.attribute.labels.value Extrait de message1 pour des valeurs event_name spécifiques et placé dans target.resource.attribute.labels avec la clé port_id.
remote-index %{INT:remote_index} target.resource.attribute.labels.value Extrait de message1 pour des valeurs event_name spécifiques et placé dans target.resource.attribute.labels avec la clé remote_index.
remote management address %{IP:dest_ip} target.ip Extrait de message1 pour des valeurs event_name spécifiques.
advRtr:%{HOSTNAME:dest_host}%{GREEDYDATA}, ip@:%{IP:dest_ip}/%{INT:dest_port} target.hostname, target.ip, target.port Extrait de message1 pour des valeurs event_name spécifiques.
SID:%{INT:sid} network.session_id Extrait de message1 pour des valeurs event_name spécifiques.
level:%{DATA:level} target.resource.attribute.labels.value Extrait de message1 pour des valeurs event_name spécifiques et placé dans target.resource.attribute.labels avec la clé level.
mtid:%{INT:mtid} target.resource.attribute.labels.value Extrait de message1 pour des valeurs event_name spécifiques et placé dans target.resource.attribute.labels avec la clé mtid.
type:%{WORD:type} target.resource.attribute.labels.value Extrait de message1 pour des valeurs event_name spécifiques et placé dans target.resource.attribute.labels avec la clé type.
flags:%{WORD:flag} target.resource.attribute.labels.value Extrait de message1 pour des valeurs event_name spécifiques et placé dans target.resource.attribute.labels avec la clé flag.
, algo:%{INT:algo} target.resource.attribute.labels.value Extrait de message1 pour des valeurs event_name spécifiques et placé dans target.resource.attribute.labels avec la clé algo.
Description:%{GREEDYDATA:desc}. security_result.description Extrait de message1 lorsque event_name est mafEntryMatch.
SrcIP principal.ip Extrait du champ kv_data lorsque event_name est défini sur mafEntryMatch.
SrcIP: %{INT:src_port} principal.port Extrait du champ kv_data lorsque event_name est défini sur mafEntryMatch.
DstIP target.ip Extrait du champ kv_data lorsque event_name est défini sur mafEntryMatch.
DstIP: %{INT:dest_port} target.port Extrait du champ kv_data lorsque event_name est défini sur mafEntryMatch.
Protocol network.ip_protocol Extrait du champ kv_data lorsque event_name est défini sur mafEntryMatch.
N/A metadata.vendor_name Variable définie sur NOKIA_ROUTER.
N/A metadata.event_type Déterminé en fonction de la présence et de la combinaison des champs extraits :
 – src_ip, dest_ip et network présents → NETWORK_CONNECTION
 – principal présent → STATUS_UPDATE
 – Autre → GENERIC_EVENT
%{GREEDYDATA:description} metadata.description Extrait de message1 lorsque event_name est tmnxMkaSessionEstablished.

Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.