Collecter les journaux de commutateur Arista
Cet analyseur extrait les champs des journaux de commutateurs Arista, en gérant les formats JSON et syslog. Il utilise des modèles grok pour analyser différents types de messages de journaux, mapper les champs extraits à l'UDM et enrichir les événements avec des métadonnées telles que le type d'événement, la gravité et les informations sur le principal/la cible en fonction des détails extraits.
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.
- Arista EOS 4.23.x ou version ultérieure installé et accessible.
- Assurez-vous de disposer d'un accès privilégié sur le commutateur Arista EOS.
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: ARISTA_SWITCH 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 dans un commutateur Arista
- Connectez-vous au routeur Arista.
Accédez au mode configuration :
Arista# config terminal
Fournissez au commutateur la configuration suivante pour envoyer les journaux à l'agent Bindplane.
Arista(config)# logging host <bindplane-server-ip> <port-number> protocol [tcp/udp] Arista(config)# logging trap information Arista(config)# copy running-config startup-config
* Replace `<bindplane-server-ip>` with Bindplane agent IP address and `<port-number>` with the port configured to listen.
Saisissez une configuration supplémentaire pour les journaux d'exécution des commandes :
Arista (config)# aaa accounting commands all console start-stop logging Arista (config)# aaa accounting commands all default start-stop logging Arista (config)# aaa accounting exec console start-stop logging Arista (config)# aaa accounting exec default start-stop logging Arista (config)# copy running-config startup-config
Saisissez une configuration supplémentaire pour les journaux de connexion :
Arista (config)# aaa authentication policy on-success log Arista (config)# aaa authentication policy on-failure log Arista (config)# copy running-config startup-config
Table de mappage UDM
Champ de journal | Mappage UDM | Logique |
---|---|---|
appname |
target.application |
Mappé directement à partir du champ appname . |
description |
metadata.description |
Directement mappé à partir du champ description , qui est extrait du champ message à l'aide de modèles Grok basés sur product_event_type . |
dst_ip |
target.ip , target.asset.ip |
Mappé directement à partir du champ dst_ip , qui est extrait du champ message à l'aide de modèles grok. |
dst_mac |
target.mac |
Mappé directement à partir du champ dst_mac , qui est extrait du champ message à l'aide de modèles grok. |
dst_port |
target.port |
Mappé directement à partir du champ dst_port , qui est extrait du champ message à l'aide de modèles grok. |
facility |
additional.fields[facility].string_value |
Mappé directement à partir du champ facility . |
hostname |
principal.hostname , principal.asset.hostname |
Mappé directement à partir du champ hostname . |
inner_msg |
metadata.description |
Mappé directement à partir du champ inner_msg , qui est extrait du champ message à l'aide de modèles grok. |
ip_protocol |
network.ip_protocol |
Mappé directement à partir du champ ip_protocol , qui est extrait du champ message à l'aide de modèles grok. Si la valeur est "tcp", elle est convertie en "TCP". Si le type d'événement est"NO_IGMP_QUERIER", il est défini sur "IGMP". |
pid |
principal.process.pid |
Mappé directement à partir du champ pid , qui est extrait du champ message à l'aide de modèles grok. |
prin_ip |
principal.ip , principal.asset.ip |
Mappé directement à partir du champ prin_ip , qui est extrait du champ message à l'aide de modèles grok. |
product_event_type |
metadata.product_event_type |
Mappé directement à partir du champ product_event_type , qui est extrait du champ message à l'aide de modèles grok. |
proto |
network.application_protocol |
Si le champ proto est "sshd", le champ UDM est défini sur "SSH". |
severity |
security_result.severity , security_result.severity_details |
security_result.severity est dérivé du champ severity en fonction des mappages suivants : "DEFAULT", "DEBUG", "INFO", "NOTICE" → "INFORMATIONAL" ; "WARNING", "ERROR", "ERR", "WARN" → "MEDIUM" ; "CRITICAL", "ALERT", "EMERGENCY" → "HIGH". La valeur brute de severity est mappée sur security_result.severity_details . |
session_id |
network.session_id |
Mappé directement à partir du champ session_id , qui est extrait du champ message à l'aide de modèles grok. |
source_ip |
principal.ip , principal.asset.ip |
Mappé directement à partir du champ source_ip , qui est extrait du champ message à l'aide de modèles grok. |
source_port |
principal.port |
Mappé directement à partir du champ source_port , qui est extrait du champ message à l'aide de modèles grok. |
src_ip |
principal.ip , principal.asset.ip |
Mappé directement à partir du champ src_ip , qui est extrait du champ message à l'aide de modèles grok. |
table_name |
target.resource.name |
Mappé directement à partir du champ table_name , qui est extrait du champ message à l'aide de modèles grok. Si ce champ est renseigné, target.resource.resource_type est défini sur "TABLE". |
target_host |
target.hostname , target.asset.hostname |
Mappé directement à partir du champ target_host , qui est extrait du champ message à l'aide de modèles grok. |
target_ip |
target.ip , target.asset.ip |
Mappé directement à partir du champ target_ip , qui est extrait du champ message à l'aide de modèles grok. |
target_package |
target.process.command_line |
Mappé directement à partir du champ target_package , qui est extrait du champ message à l'aide de modèles grok. |
target_port |
target.port |
Mappé directement à partir du champ target_port , qui est extrait du champ message à l'aide de modèles grok. |
timestamp |
metadata.event_timestamp |
Directement mappé à partir du champ timestamp après avoir été analysé dans un objet d'horodatage. |
user |
principal.user.userid |
Mappé directement à partir du champ user , qui est extrait du champ message à l'aide de modèles grok. |
user_name |
target.user.userid |
Mappé directement à partir du champ user_name , qui est extrait du champ message à l'aide de modèles grok. |
vrf |
additional.fields[vrf].string_value |
Mappé directement à partir du champ vrf , qui est extrait du champ message à l'aide de modèles grok. Dérivé d'une combinaison des champs has_principal , has_target , user , message , product_event_type et description à l'aide d'une logique conditionnelle complexe, comme décrit dans le code du parseur. La valeur par défaut est "GENERIC_EVENT". Codé en dur sur "ARISTA_SWITCH". Codé en dur sur "Arista Switch". Codé en dur sur "Arista". Définissez la valeur sur "BLOCK" si le champ description contient "connection rejected". |
dpid |
additional.fields[DPID].string_value |
Mappé directement à partir du champ dpid . |
intf |
additional.fields[intf].string_value |
Mappé directement à partir du champ intf . |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.