Collecter les journaux Juniper Junos

Compatible avec :

Ce document explique comment ingérer des journaux Juniper Junos dans Google Security Operations à l'aide de Bindplane.

Juniper Junos OS est le système d'exploitation qui alimente les routeurs, les commutateurs et les dispositifs de sécurité Juniper Networks. Elle fournit une plate-forme unifiée pour la gestion de l'infrastructure réseau, le routage, la commutation et les fonctions de sécurité, avec une journalisation complète des événements système, des événements de sécurité et du trafic réseau. L'analyseur extrait les champs des journaux syslog et au format clé-valeur Juniper Junos. Il utilise grok et/ou kv pour analyser le message de journal, puis mappe ces valeurs au modèle de données unifié (UDM). Il définit également les valeurs de métadonnées par défaut pour la source et le type d'événement.

Avant de commencer

Assurez-vous de remplir les conditions suivantes :

  • Une instance Google SecOps
  • Windows Server 2016 ou version ultérieure, ou hôte Linux avec systemd
  • Si vous exécutez l'agent derrière un proxy, assurez-vous que les ports de pare-feu sont ouverts conformément aux exigences de l'agent Bindplane.
  • Accès privilégié à l'appareil Juniper exécutant Junos OS

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

Installez l'agent Bindplane sur votre système d'exploitation Windows ou Linux en suivant les instructions ci-dessous.

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
    
  3. Attendez la fin de l'installation.

  4. Vérifiez l'installation en exécutant la commande suivante :

    sc query observiq-otel-collector
    

Le service doit être indiqué comme RUNNING (EN COURS D'EXÉCUTION).

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
    
  3. Attendez la fin de l'installation.

  4. Vérifiez l'installation en exécutant la commande suivante :

    sudo systemctl status observiq-otel-collector
    

Le service doit être indiqué comme actif (en cours d'exécution).

Autres ressources d'installation

Pour obtenir d'autres options d'installation et de dépannage, consultez le guide d'installation de l'agent Bindplane.

Configurer l'agent Bindplane pour ingérer les journaux syslog et les envoyer à Google SecOps

Localiser le fichier de configuration

  • Linux :

    sudo nano /etc/bindplane-agent/config.yaml
    
  • Windows :

    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    

Modifiez le fichier de configuration

  • Remplacez l'intégralité du contenu de config.yaml par la configuration suivante :

    receivers:
        udplog:
            listen_address: "0.0.0.0:514"
    
    exporters:
        chronicle/chronicle_w_labels:
            compression: gzip
            creds_file_path: '/path/to/ingestion-authentication-file.json'
            customer_id: 'YOUR_CUSTOMER_ID'
            endpoint: malachiteingestion-pa.googleapis.com
            log_type: 'JUNIPER_JUNOS'
            raw_log_field: body
            ingestion_labels:
    
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - udplog
                exporters:
                    - chronicle/chronicle_w_labels
    

Paramètres de configuration

  • Remplacez les espaces réservés suivants :

    • Configuration du récepteur :

      • udplog : utilisez udplog pour syslog UDP ou tcplog pour syslog TCP.
      • 0.0.0.0 : adresse IP à écouter (0.0.0.0 pour écouter sur toutes les interfaces)
      • 514 : numéro de port à écouter (port syslog standard)
    • Configuration de l'exportateur :

      • creds_file_path : chemin d'accès complet au fichier d'authentification de l'ingestion :
        • Linux : /etc/bindplane-agent/ingestion-auth.json
        • Windows : C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
      • YOUR_CUSTOMER_ID : ID client de la section "Obtenir l'ID client"
      • endpoint : URL du point de terminaison régional :
        • États-Unis : malachiteingestion-pa.googleapis.com
        • Europe : europe-malachiteingestion-pa.googleapis.com
        • Asie : asia-southeast1-malachiteingestion-pa.googleapis.com
        • Pour obtenir la liste complète, consultez Points de terminaison régionaux.
      • log_type : type de journal tel qu'il apparaît dans Chronicle (JUNIPER_JUNOS)

Enregistrez le fichier de configuration.

  • Après avoir modifié le fichier, enregistrez-le :
    • Linux : appuyez sur Ctrl+O, puis sur Enter, puis sur Ctrl+X.
    • Windows : cliquez sur Fichier > Enregistrer.

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 observiq-otel-collector
    
    1. Vérifiez que le service est en cours d'exécution :

        sudo systemctl status observiq-otel-collector
      
    2. Recherchez les erreurs dans les journaux :

        sudo journalctl -u observiq-otel-collector -f
      
  • Pour redémarrer l'agent Bindplane dans Windows, choisissez l'une des options suivantes :

    • Invite de commandes ou PowerShell en tant qu'administrateur :

      net stop observiq-otel-collector && net start observiq-otel-collector
      
    • Console Services :

      1. Appuyez sur Win+R, saisissez services.msc, puis appuyez sur Entrée.
      2. Localisez observIQ OpenTelemetry Collector.
      3. Effectuez un clic droit, puis sélectionnez Redémarrer.

      4. Vérifiez que le service est en cours d'exécution :

        sc query observiq-otel-collector
        
      5. Recherchez les erreurs dans les journaux :

        type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
        

Configurer le transfert Syslog sur Juniper Junos

  1. Connectez-vous à l'appareil Juniper via SSH ou la console.
  2. Passez en mode configuration :

    configure
    
  3. Configurez l'hôte syslog à l'aide des commandes suivantes :

    set system syslog host BINDPLANE_IP any info
    set system syslog host BINDPLANE_IP port 514
    set system syslog host BINDPLANE_IP facility-override local7
    set system syslog host BINDPLANE_IP log-prefix JUNOS
    
    • Remplacez BINDPLANE_IP par l'adresse IP de l'hôte de l'agent Bindplane.
  4. Configurez des sources de journaux supplémentaires (facultatif, mais recommandé) :

    set system syslog host BINDPLANE_IP authorization info
    set system syslog host BINDPLANE_IP daemon info
    set system syslog host BINDPLANE_IP kernel info
    set system syslog host BINDPLANE_IP firewall any
    set system syslog host BINDPLANE_IP interactive-commands info
    
  5. Configurer les données syslog structurées (facultatif pour une analyse améliorée) :

    set system syslog host BINDPLANE_IP structured-data
    
  6. Validez la configuration :

    commit and-quit
    
  7. Vérifiez la configuration syslog :

    show system syslog host BINDPLANE_IP
    
  8. Vérifiez que les messages syslog sont envoyés en consultant les journaux de l'agent Bindplane.

Table de mappage UDM

Champ de journal Mappage UDM Logique
DPT target.port Port de destination de la connexion réseau, converti en entier.
DST target.ip Adresse IP de destination de la connexion réseau.
FLAG additional.fields{}.key: "FLAG", additional.fields{}.value.string_value: Valeur de FLAG Option TCP associée à la connexion réseau.
ID additional.fields{}.key: "ID", additional.fields{}.value.string_value: Valeur de l'ID Champ d'identification de l'adresse IP.
IN additional.fields{}.key: "IN", additional.fields{}.value.string_value: Valeur de IN Interface réseau entrante.
LEN additional.fields{}.key: "LEN", additional.fields{}.value.string_value: Valeur de LEN Longueur du paquet IP.
MAC principal.mac Adresse MAC extraite du champ MAC.
OUT additional.fields{}.key: "OUT", additional.fields{}.value.string_value: Value of OUT Interface réseau sortante.
PREC additional.fields{}.key: "PREC", additional.fields{}.value.string_value: Valeur de PREC Champ "Précédence" dans l'en-tête IP.
PROTO network.ip_protocol Protocole IP utilisé dans la connexion réseau.
RES additional.fields{}.key: "RES", additional.fields{}.value.string_value: Valeur de RES Champ réservé dans l'en-tête TCP.
SPT principal.port Port source de la connexion réseau, converti en entier.
SRC principal.ip Adresse IP source de la connexion réseau.
TOS additional.fields{}.key: "TOS", additional.fields{}.value.string_value: Value of TOS Champ "Type de service" dans l'en-tête IP.
Valeur TTL network.dns.additional.ttl Valeur TTL (Time To Live), convertie en entier non signé.
URGP additional.fields{}.key: "URGP", additional.fields{}.value.string_value: Valeur de l'URGP Champ de pointeur urgent dans l'en-tête TCP.
WINDOW additional.fields{}.key: "WINDOW_SIZE", additional.fields{}.value.string_value: Value of WINDOW Taille de la fenêtre TCP.
action security_result.action Action effectuée par le pare-feu, extraite du message CEF.
agt observer.ip Adresse IP de l'agent.
amac target.mac Adresse MAC de la cible, convertie en minuscules et dont les traits d'union sont remplacés par des deux-points.
application target.application Application concernée par l'événement.
artz observer.zone Fuseau horaire de l'observateur.
atz target.location.country_or_region Fuseau horaire cible.
categoryBehavior additional.fields{}.key: "Category Behavior", additional.fields{}.value.string_value: Valeur de categoryBehavior sans les barres obliques Comportement de la catégorie.
categoryDeviceGroup additional.fields{}.key: "Category Device Group", additional.fields{}.value.string_value: Valeur de categoryDeviceGroup sans barres obliques Groupe d'appareils de catégorie.
categoryObject additional.fields{}.key: "Category Object", additional.fields{}.value.string_value: Valeur de categoryObject sans barres obliques Objet de catégorie.
categoryOutcome additional.fields{}.key: "Category Outcome", additional.fields{}.value.string_value: Valeur de categoryOutcome sans les barres obliques Résultat pour la catégorie.
categorySignificance additional.fields{}.key: "category Significance", additional.fields{}.value.string_value: Value of categorySignificance Importance de la catégorie.
commande target.process.command_line La commande exécutée.
cs1Label additional.fields{}.key: cs1Label, additional.fields{}.value.string_value: Valeur du champ CEF correspondant Libellé et valeur du champ de chaîne personnalisée 1 du message CEF.
cs2Label additional.fields{}.key: cs2Label, additional.fields{}.value.string_value: Valeur du champ CEF correspondant Libellé et valeur du champ de chaîne personnalisée 2 du message CEF.
cs3Label additional.fields{}.key: cs3Label, additional.fields{}.value.string_value: Valeur du champ CEF correspondant Libellé et valeur du champ de chaîne personnalisé 3 du message CEF.
cs4Label additional.fields{}.key: cs4Label, additional.fields{}.value.string_value: Valeur du champ CEF correspondant Libellé et valeur du champ de chaîne personnalisé 4 du message CEF.
cs5Label additional.fields{}.key: cs5Label, additional.fields{}.value.string_value: Valeur du champ CEF correspondant Libellé et valeur du champ de chaîne personnalisée 5 du message CEF.
cs6Label additional.fields{}.key: cs6Label, additional.fields{}.value.string_value: valeur du champ CEF correspondant Libellé et valeur du champ de chaîne personnalisé 6 du message CEF.
dhost target.hostname Nom d'hôte de destination.
deviceCustomString1 additional.fields{}.key: cs1Label, additional.fields{}.value.string_value: Value of deviceCustomString1 Chaîne personnalisée de l'appareil 1.
deviceCustomString2 additional.fields{}.key: cs2Label, additional.fields{}.value.string_value: Value of deviceCustomString2 Chaîne personnalisée de l'appareil 2.
deviceCustomString3 additional.fields{}.key: cs3Label, additional.fields{}.value.string_value: Value of deviceCustomString3 Chaîne personnalisée de l'appareil 3.
deviceCustomString4 additional.fields{}.key: cs4Label, additional.fields{}.value.string_value: Value of deviceCustomString4 Chaîne personnalisée de l'appareil 4.
deviceCustomString5 additional.fields{}.key: cs5Label, additional.fields{}.value.string_value: Value of deviceCustomString5 Chaîne personnalisée de l'appareil 5.
deviceCustomString6 additional.fields{}.key: cs6Label, additional.fields{}.value.string_value: Value of deviceCustomString6 Chaîne personnalisée 6 de l'appareil.
deviceDirection network.direction Sens du trafic réseau.
deviceEventClassId additional.fields{}.key: "eventId", additional.fields{}.value.string_value: Value of deviceEventClassId ID de la classe d'événement de l'appareil.
deviceFacility observer.product.subproduct L'établissement de l'appareil.
deviceProcessName about.process.command_line Nom du processus de l'appareil.
deviceSeverity security_result.severity Gravité de l'appareil.
deviceTimeZone observer.zone Fuseau horaire de l'appareil.
deviceVendor metadata.vendor_name Fournisseur de l'appareil.
deviceVersion metadata.product_version Version de l'appareil.
dpt target.port Port de destination.
dst target.ip Adresse IP de destination.
duser target.user.user_display_name Utilisateur de destination.
eventId additional.fields{}.key: "eventId", additional.fields{}.value.string_value: Value of eventId ID de l'événement.
event_time metadata.event_timestamp Heure à laquelle l'événement s'est produit, analysée à partir du message.
firewall_action security_result.action_details Action de pare-feu effectuée.
hôte principal.hostname, intermediary.hostname Nom d'hôte de l'appareil qui génère le journal. Utilisé à la fois pour le principal et l'intermédiaire dans différents cas.
Message security_result.summary Message associé à l'événement, utilisé comme résumé du résultat de sécurité.
nom metadata.product_event_type Nom de l'événement.
process_name additional.fields{}.key: "process_name", additional.fields{}.value.string_value: Value of process_name Nom du processus.
p_id target.process.pid ID du processus, converti en chaîne.
sha256 principal.process.file.sha256 Hachage SHA-256 d'un fichier, extrait des informations de clé SSH2.
shost principal.hostname Nom d'hôte source.
source_address principal.ip Adresse IP source.
source_port principal.port Port source, converti en entier.
src principal.ip Adresse IP source.
src_ip principal.ip Adresse IP source.
src_port principal.port Port source, converti en entier.
ssh2 security_result.detection_fields{}.key: "ssh2", security_result.detection_fields{}.value: Value of ssh2 Informations sur la clé SSH2.
subtype metadata.product_event_type Sous-type de l'événement.
task_summary security_result.description Résumé de la tâche, utilisé comme description du résultat de sécurité.
timestamp metadata.event_timestamp Horodatage de l'événement.
utilisateur target.user.userid Utilisateur associé à l'événement.
nom d'utilisateur principal.user.userid Nom d'utilisateur associé à l'événement.
user_name principal.user.userid Nom d'utilisateur.
metadata.vendor_name Codé en dur sur "Juniper Firewall". Codé en dur sur "Juniper Firewall". Codé en dur sur "JUNIPER_JUNOS". Déterminé par la logique de l'analyseur en fonction du contenu du journal. La valeur par défaut est "STATUS_UPDATE" si le message n'est pas un message CEF et qu'aucun autre type d'événement spécifique n'est identifié. Définissez-le sur "NETWORK_HTTP" pour les messages CEF. Si aucun champ "desc" n'est présent, ce champ est renseigné avec la description du message extraite du message de journal brut.

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