Raccogli i log di Juniper Junos

Supportato in:

Questo documento spiega come importare i log di Juniper Junos in Google Security Operations utilizzando Bindplane.

Juniper Junos OS è il sistema operativo che alimenta i router, gli switch e i dispositivi di sicurezza di Juniper Networks. Fornisce una piattaforma unificata per la gestione dell'infrastruttura di rete, il routing, lo switching e le funzioni di sicurezza con un logging completo degli eventi di sistema, degli eventi di sicurezza e del traffico di rete. Il parser estrae i campi dai log di Juniper Junos in formato syslog e coppia chiave-valore. Utilizza grok e/o kv per analizzare il messaggio di log e poi mappa questi valori al modello UDM (Unified Data Model). Imposta anche i valori predefiniti dei metadati per l'origine e il tipo di evento.

Prima di iniziare

Assicurati di soddisfare i seguenti prerequisiti:

  • Un'istanza Google SecOps
  • Windows Server 2016 o versioni successive oppure host Linux con systemd
  • Se l'agente viene eseguito dietro un proxy, assicurati che le porte del firewall siano aperte in base ai requisiti dell'agente Bindplane.
  • Accesso con privilegi al dispositivo Juniper con Junos OS

Ottieni le credenziali di Google SecOps per l'agente Bindplane

Per autenticare l'agente Bindplane in Google SecOps, scegli uno dei seguenti metodi:

  • Nuovi deployment: utilizza l'API Chronicle (opzione 1).
  • Deployment legacy: continua a utilizzare il file di autenticazione dell'acquisizione (Opzione 2) fino alla dismissione dell'API Ingestion il 20 luglio 2027.
  1. Accedi alla Google Cloud console e seleziona il progetto Google Cloud collegato alla tua istanza Google SecOps.
  2. Vai a IAM e amministrazione > Service account.
  3. Fai clic su Crea service account.
  4. Fornisci i seguenti dettagli di configurazione:
    • Nome service account: inserisci un nome per l'account (ad esempio bindplane-ingest).
    • Descrizione service account: inserisci una descrizione (ad esempio Bindplane agent log ingestion).
  5. Fai clic su Crea e continua.
  6. Nella sezione Concedi a questo account di servizio l'accesso al progetto, fai clic su Seleziona un ruolo e seleziona Editor Chronicle.
  7. Fai clic su Continua e poi su Fine.
  8. Fai clic sul account di servizio che hai creato, quindi vai alla scheda Chiavi.
  9. Fai clic su Aggiungi chiave > Crea nuova chiave.
  10. Seleziona JSON e fai clic su Crea. Il file della chiave viene scaricato sul computer.
  11. Salva il file della chiave come ingestion-auth.json nella directory del raccoglitore Bindplane (/opt/observiq-otel-collector/ingestion-auth.json su Linux o C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json su Windows) oppure aggiorna creds_file_path in config.yaml in modo che corrisponda al percorso in cui lo salvi.
  12. Vai a IAM e amministrazione > Impostazioni e copia il Numero progetto. Ti servirà per la configurazione dell'esportatore.

Opzione 2: scarica il file di autenticazione dell'acquisizione (legacy)

  1. Accedi alla console Google SecOps.
  2. Vai a Impostazioni SIEM > Agenti di raccolta.
  3. Scarica il file di autenticazione dell'acquisizione.
  4. Salva il file in modo sicuro sul sistema in cui verrà installato l'agente Bindplane.

Ottieni l'ID cliente Google SecOps

  1. Accedi alla console Google SecOps.
  2. Vai a Impostazioni SIEM > Profilo.
  3. Copia e salva l'ID cliente dalla sezione Dettagli dell'organizzazione.

Installa l'agente Bindplane

Installa l'agente Bindplane sul tuo sistema operativo Windows o Linux seguendo le istruzioni riportate di seguito.

Installazione di finestre

  1. Apri Prompt dei comandi o PowerShell come amministratore.
  2. Esegui questo comando:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. Attendi il completamento dell'installazione.

  4. Verifica l'installazione eseguendo:

    sc query observiq-otel-collector
    

Il servizio dovrebbe essere visualizzato come RUNNING.

Installazione di Linux

  1. Apri un terminale con privilegi root o sudo.
  2. Esegui questo comando:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    
  3. Attendi il completamento dell'installazione.

  4. Verifica l'installazione eseguendo:

    sudo systemctl status observiq-otel-collector
    

Il servizio dovrebbe essere visualizzato come attivo (in esecuzione).

Risorse aggiuntive per l'installazione

Per ulteriori opzioni di installazione e risoluzione dei problemi, consulta la guida all'installazione dell'agente Bindplane.

Configura l'agente Bindplane per importare il syslog e inviarlo a Google SecOps

Individua il file di configurazione

  • Linux:

    sudo nano /opt/observiq-otel-collector/config.yaml
    
  • Windows:

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

Modifica il file di configurazione

  • Sostituisci l'intero contenuto di config.yaml con la seguente configurazione:

    receivers:
      udplog:
        listen_address: "0.0.0.0:514"
    
    exporters:
      chronicle/chronicle_w_labels:
        protocol: https
        # Region of your instance, for example us, europe, asia-southeast1
        location: <LOCATION>
        # Project number of the Google Cloud project linked to the instance
        project: '<PROJECT_NUMBER>'
        compression: gzip
        creds_file_path: '/path/to/ingestion-authentication-file.json'
        customer_id: 'YOUR_CUSTOMER_ID'
        endpoint: chronicle.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
    

Parametri di configurazione

  • Sostituisci i seguenti segnaposto:

    • Configurazione del destinatario:

      • udplog: utilizza udplog per il syslog UDP o tcplog per il syslog TCP
      • 0.0.0.0: indirizzo IP su cui ascoltare (0.0.0.0 per ascoltare su tutte le interfacce)
      • 514: il numero di porta su cui ascoltare (porta syslog standard)
    • Configurazione dell'esportatore:

      • creds_file_path: percorso completo del file della chiave JSON del account di servizio (opzione 1):
        • Linux: /opt/observiq-otel-collector/ingestion-auth.json
        • Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
      • YOUR_CUSTOMER_ID: l'ID cliente della sezione Recupera l'ID cliente
      • location: sostituisci <LOCATION> con la regione della tua istanza Google SecOps (ad esempio us, europe o asia-southeast1). L'esportatore aggiunge chronicle.googleapis.com come prefisso a questo valore. Per l'elenco completo, consulta Endpoint regionali.
      • project: sostituisci <PROJECT_NUMBER> con il numero di progetto in IAM e amministrazione > Impostazioni.
      • endpoint: mantieni l'impostazione chronicle.googleapis.com.
      • log_type: Tipo di log esattamente come appare in Chronicle (JUNIPER_JUNOS)

Esportatore dell'API di importazione precedente

  • Se utilizzi il file di autenticazione dell'importazione dell'opzione 2, sostituisci il blocco exporters con il seguente. Imposta creds_file_path sul percorso del file di autenticazione dell'importazione e, se la tua istanza si trova al di fuori degli Stati Uniti, sostituisci malachiteingestion-pa.googleapis.com con l'endpoint regionale (ad esempio, europe-malachiteingestion-pa.googleapis.com).

    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:
    

Salva il file di configurazione

  • Dopo la modifica, salva il file:
    • Linux: premi Ctrl+O, poi Enter e infine Ctrl+X
    • Windows: fai clic su File > Salva

Riavvia l'agente Bindplane per applicare le modifiche

  • Per riavviare l'agente Bindplane in Linux, esegui questo comando:

    sudo systemctl restart observiq-otel-collector
    
    1. Verifica che il servizio sia in esecuzione:

        sudo systemctl status observiq-otel-collector
      
    2. Controlla i log per verificare la presenza di errori:

        sudo journalctl -u observiq-otel-collector -f
      
  • Per riavviare l'agente Bindplane in Windows, scegli una delle seguenti opzioni:

    • Prompt dei comandi o PowerShell come amministratore:

      net stop observiq-otel-collector && net start observiq-otel-collector
      
    • Console dei servizi:

      1. Premi Win+R, digita services.msc e premi Invio.
      2. Individua observIQ OpenTelemetry Collector.
      3. Fai clic con il tasto destro del mouse e seleziona Riavvia.

      4. Verifica che il servizio sia in esecuzione:

        sc query observiq-otel-collector
        
      5. Controlla i log per individuare eventuali errori:

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

Configura l'inoltro di Syslog su Juniper Junos

  1. Connettiti al dispositivo Juniper tramite SSH o console.
  2. Attiva la modalità di configurazione:

    configure
    
  3. Configura l'host syslog con i seguenti comandi:

    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
    
    • Sostituisci BINDPLANE_IP con l'indirizzo IP dell'host dell'agente Bindplane.
  4. (Facoltativo, ma consigliato) Configura origini log aggiuntive:

    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. Configura i dati syslog strutturati (facoltativo per l'analisi avanzata):

    set system syslog host BINDPLANE_IP structured-data
    
  6. Esegui il commit della configurazione:

    commit and-quit
    
  7. Verifica la configurazione di syslog:

    show system syslog host BINDPLANE_IP
    
  8. Verifica che i messaggi syslog vengano inviati controllando i log dell'agente Bindplane.

Tabella di mappatura UDM

Campo log Mappatura UDM Logica
DPT target.port La porta di destinazione della connessione di rete, convertita in un numero intero.
DST target.ip L'indirizzo IP di destinazione della connessione di rete.
FLAG additional.fields{}.key: "FLAG", additional.fields{}.value.string_value: valore di FLAG Il flag TCP associato alla connessione di rete.
ID additional.fields{}.key: "ID", additional.fields{}.value.string_value: valore dell'ID Il campo di identificazione IP.
IN additional.fields{}.key: "IN", additional.fields{}.value.string_value: Value of IN L'interfaccia di rete in entrata.
LEN additional.fields{}.key: "LEN", additional.fields{}.value.string_value: valore di LEN La lunghezza del pacchetto IP.
MAC principal.mac L'indirizzo MAC estratto dal campo MAC.
OUT additional.fields{}.key: "OUT", additional.fields{}.value.string_value: Valore di OUT L'interfaccia di rete in uscita.
PREC additional.fields{}.key: "PREC", additional.fields{}.value.string_value: Value of PREC Il campo Precedenza nell'intestazione IP.
PROTO network.ip_protocol Il protocollo IP utilizzato nella connessione di rete.
RES additional.fields{}.key: "RES", additional.fields{}.value.string_value: Value of RES Campo riservato nell'intestazione TCP.
SPT principal.port La porta di origine della connessione di rete, convertita in un numero intero.
SRC principal.ip L'indirizzo IP di origine della connessione di rete.
TOS additional.fields{}.key: "TdS", additional.fields{}.value.string_value: Value of TdS Il campo Tipo di servizio nell'intestazione IP.
TTL network.dns.additional.ttl Valore della durata (TTL), convertito in un numero intero senza segno.
URGP additional.fields{}.key: "URGP", additional.fields{}.value.string_value: valore di URGP campo Urgent pointer nell'intestazione TCP.
WINDOW additional.fields{}.key: "WINDOW_SIZE", additional.fields{}.value.string_value: valore di WINDOW La dimensione della finestra TCP.
azione security_result.action L'azione intrapresa dal firewall, estratta dal messaggio CEF.
agt observer.ip L'indirizzo IP dell'agente.
amac target.mac L'indirizzo MAC della destinazione, convertito in minuscolo e con i trattini sostituiti dai due punti.
app target.application L'applicazione coinvolta nell'evento.
artz observer.zone Il fuso orario dell'osservatore.
atz target.location.country_or_region Il fuso orario di destinazione.
categoryBehavior additional.fields{}.key: "Category Behavior", additional.fields{}.value.string_value: Value of categoryBehavior with slashes removed Il comportamento della categoria.
categoryDeviceGroup additional.fields{}.key: "Category Device Group", additional.fields{}.value.string_value: Value of categoryDeviceGroup with slashes removed Il gruppo di dispositivi della categoria.
categoryObject additional.fields{}.key: "Category Object", additional.fields{}.value.string_value: valore di categoryObject senza barre L'oggetto della categoria.
categoryOutcome additional.fields{}.key: "Category Outcome", additional.fields{}.value.string_value: valore di categoryOutcome senza barre Il risultato della categoria.
categorySignificance additional.fields{}.key: "category Significance", additional.fields{}.value.string_value: Value of categorySignificance La rilevanza della categoria.
comando target.process.command_line Il comando eseguito.
cs1Label additional.fields{}.key: cs1Label, additional.fields{}.value.string_value: Value of corresponding CEF field Etichetta e valore del campo stringa personalizzata 1 del messaggio CEF.
cs2Label additional.fields{}.key: cs2Label, additional.fields{}.value.string_value: valore del campo CEF corrispondente Etichetta e valore del campo stringa personalizzato 2 del messaggio CEF.
cs3Label additional.fields{}.key: cs3Label, additional.fields{}.value.string_value: valore del campo CEF corrispondente Etichetta e valore del campo stringa personalizzato 3 del messaggio CEF.
cs4Label additional.fields{}.key: cs4Label, additional.fields{}.value.string_value: Value of corresponding CEF field Etichetta e valore del campo stringa personalizzato 4 del messaggio CEF.
cs5Label additional.fields{}.key: cs5Label, additional.fields{}.value.string_value: Value of corresponding CEF field Etichetta e valore del campo di stringa personalizzato 5 del messaggio CEF.
cs6Label additional.fields{}.key: cs6Label, additional.fields{}.value.string_value: valore del campo CEF corrispondente Etichetta e valore del campo stringa personalizzato 6 del messaggio CEF.
dhost target.hostname Nome host di destinazione.
deviceCustomString1 additional.fields{}.key: cs1Label, additional.fields{}.value.string_value: Value of deviceCustomString1 Stringa personalizzata dispositivo 1.
deviceCustomString2 additional.fields{}.key: cs2Label, additional.fields{}.value.string_value: Value of deviceCustomString2 Stringa personalizzata del dispositivo 2.
deviceCustomString3 additional.fields{}.key: cs3Label, additional.fields{}.value.string_value: Value of deviceCustomString3 Stringa personalizzata del dispositivo 3.
deviceCustomString4 additional.fields{}.key: cs4Label, additional.fields{}.value.string_value: Value of deviceCustomString4 Stringa personalizzata 4 del dispositivo.
deviceCustomString5 additional.fields{}.key: cs5Label, additional.fields{}.value.string_value: Value of deviceCustomString5 Stringa personalizzata 5 del dispositivo.
deviceCustomString6 additional.fields{}.key: cs6Label, additional.fields{}.value.string_value: Value of deviceCustomString6 Stringa personalizzata 6 del dispositivo.
deviceDirection network.direction La direzione del traffico di rete.
deviceEventClassId additional.fields{}.key: "eventId", additional.fields{}.value.string_value: Value of deviceEventClassId L'ID della classe di eventi del dispositivo.
deviceFacility observer.product.subproduct L'impianto del dispositivo.
deviceProcessName about.process.command_line Il nome del processo del dispositivo.
deviceSeverity security_result.severity La gravità del dispositivo.
deviceTimeZone observer.zone Il fuso orario del dispositivo.
deviceVendor metadata.vendor_name Il fornitore del dispositivo.
deviceVersion metadata.product_version La versione del dispositivo.
dpt target.port La porta di destinazione.
dst target.ip L'indirizzo IP di destinazione.
duser target.user.user_display_name L'utente di destinazione.
eventId additional.fields{}.key: "eventId", additional.fields{}.value.string_value: Value of eventId ID evento.
event_time metadata.event_timestamp L'ora in cui si è verificato l'evento, analizzata dal messaggio.
firewall_action security_result.action_details L'azione del firewall intrapresa.
host principal.hostname, intermediary.hostname Il nome host del dispositivo che genera il log. Utilizzato sia per il principale che per l'intermediario in casi diversi.
msg security_result.summary Il messaggio associato all'evento, utilizzato come riepilogo del risultato di sicurezza.
nome metadata.product_event_type Il nome dell'evento.
process_name additional.fields{}.key: "process_name", additional.fields{}.value.string_value: Value of process_name Il nome del processo.
p_id target.process.pid L'ID processo, convertito in una stringa.
sha256 principal.process.file.sha256 L'hash SHA256 di un file, estratto dalle informazioni sulla chiave SSH2.
shost principal.hostname Nome host di origine.
source_address principal.ip L'indirizzo IP di origine.
source_port principal.port La porta di origine, convertita in un numero intero.
src principal.ip L'indirizzo IP di origine.
src_ip principal.ip L'indirizzo IP di origine.
src_port principal.port La porta di origine, convertita in un numero intero.
ssh2 security_result.detection_fields{}.key: "ssh2", security_result.detection_fields{}.value: Value of ssh2 Informazioni sulla chiave SSH2.
subtype metadata.product_event_type Il sottotipo dell'evento.
task_summary security_result.description Il riepilogo dell'attività, utilizzato come descrizione del risultato di sicurezza.
timestamp metadata.event_timestamp Il timestamp dell'evento.
utente target.user.userid L'utente associato all'evento.
nome utente principal.user.userid Il nome utente associato all'evento.
user_name principal.user.userid Il nome utente.
metadata.vendor_name Codificato in modo permanente su "Juniper Firewall". Codificato in modo permanente su "Juniper Firewall". Impostato come hardcoded su "JUNIPER_JUNOS". Determinato dalla logica del parser in base ai contenuti del log. Il valore predefinito è "STATUS_UPDATE" se non si tratta di un messaggio CEF e non viene identificato nessun altro tipo di evento specifico. Imposta "NETWORK_HTTP" per i messaggi CEF. Se non è presente alcun campo desc, questo campo viene compilato con il valore message_description estratto dal messaggio di log non elaborato.
protocol-name network.ip_protocol Mappato dal log delle modifiche
application_name target.application Mappato dal log delle modifiche
desc sec_result.summary Mappato dal log delle modifiche
mac-address principal.mac Mappato dal log delle modifiche

Log delle modifiche

Visualizza il log delle modifiche per questo parser

Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.