Collecter les journaux du routeur Nokia
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
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres du SIEM > Agents de collecte.
- 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
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres SIEM> Profil.
- Copiez et enregistrez le numéro client de la section Informations sur l'organisation.
Installer l'agent Bindplane
Installation de fenêtres
- Ouvrez l'invite de commandes ou PowerShell en tant qu'administrateur.
Exécutez la commande suivante :
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Installation de Linux
- Ouvrez un terminal avec les droits root ou sudo.
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
- Pour plus d'options d'installation, consultez ce guide d'installation.
Configurer l'agent Bindplane pour ingérer Syslog et l'envoyer à Google SecOps
Accédez au fichier de configuration :
- 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. - Ouvrez le fichier à l'aide d'un éditeur de texte (par exemple,
nano
,vi
ou le Bloc-notes).
- Recherchez le fichier
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
Remplacez le port et l'adresse IP selon les besoins de votre infrastructure.
Remplacez
<customer_id>
par le numéro client réel.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
Passez en mode Configuration :
config# log
Définissez une destination Syslog :
config>log# syslog 1
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).
- Remplacez
Appliquez la destination Syslog à un fichier journal :
config>log# log-id 1 config>log>log-id# to syslog 1
Activez le fichier journal :
config>log>log-id# no shutdown
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.