Raccogliere 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 router, switch e dispositivi di sicurezza Juniper Networks. Fornisce una piattaforma unificata per la gestione dell'infrastruttura di rete, il routing, lo switching e le funzioni di sicurezza con la registrazione completa di eventi di sistema, eventi di sicurezza e traffico di rete. L'analizzatore sintattico estrae i campi dai log formattati in formato chiave-valore e syslog Juniper Junos. Utilizza grok e/o kv per analizzare il messaggio di log e quindi 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 che esegue Junos OS

Recuperare il file di autenticazione importazione di Google SecOps

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

Recuperare 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 sistema operativo Windows o Linux seguendo le istruzioni riportate di seguito.

Installazione di Windows

  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 il comando:

    sc query observiq-otel-collector
    

Il servizio dovrebbe essere visualizzato come IN ESECUZIONE.

Installazione di Linux

  1. Apri un terminale con privilegi di 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 il comando:

    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 syslog e inviarli a Google SecOps

Individua il file di configurazione

  • Linux:

    sudo nano /etc/bindplane-agent/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:
            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
    

Parametri di configurazione

  • Sostituisci i seguenti segnaposto:

    • Configurazione del ricevitore:

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

      • creds_file_path: percorso completo del file di autenticazione importazione:
        • Linux: /etc/bindplane-agent/ingestion-auth.json
        • Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
      • YOUR_CUSTOMER_ID: l'ID cliente della sezione Recupera ID cliente
      • endpoint: URL endpoint regionale:
        • Stati Uniti: malachiteingestion-pa.googleapis.com
        • Europa: europe-malachiteingestion-pa.googleapis.com
        • Asia: asia-southeast1-malachiteingestion-pa.googleapis.com
        • Per l'elenco completo, vedi Endpoint regionali.
      • log_type: Tipo di log esattamente come appare in Chronicle (JUNIPER_JUNOS)

Salvare 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 individuare eventuali 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"
        

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

    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 Logic
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: Value of FLAG Il flag TCP associato alla connessione di rete.
ID additional.fields{}.key: "ID", additional.fields{}.value.string_value: Value of 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: Value of 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: Value of OUT L'interfaccia di rete in uscita.
PREC additional.fields{}.key: "PREC", additional.fields{}.value.string_value: Value of PREC Il campo Precedence (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 Time To Live, convertito in un numero intero senza segno.
URGP additional.fields{}.key: "URGP", additional.fields{}.value.string_value: Value of URGP Campo Urgent pointer nell'intestazione TCP.
WINDOW additional.fields{}.key: "WINDOW_SIZE", additional.fields{}.value.string_value: Value of 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: Value of categoryObject with slashes removed L'oggetto categoria.
categoryOutcome additional.fields{}.key: "Category Outcome", additional.fields{}.value.string_value: Value of categoryOutcome with slashes removed Il risultato della categoria.
categorySignificance additional.fields{}.key: "category Significance", additional.fields{}.value.string_value: Value of categorySignificance Il significato della categoria.
comando target.process.command_line Il comando è stato 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: Value of corresponding CEF field Etichetta e valore del campo stringa personalizzato 2 del messaggio CEF.
cs3Label additional.fields{}.key: cs3Label, additional.fields{}.value.string_value: Value of corresponding CEF field Etichetta e valore del campo stringa personalizzata 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 personalizzata 4 del messaggio CEF.
cs5Label additional.fields{}.key: cs5Label, additional.fields{}.value.string_value: Value of corresponding CEF field Etichetta e valore del campo stringa personalizzata 5 del messaggio CEF.
cs6Label additional.fields{}.key: cs6Label, additional.fields{}.value.string_value: Value of corresponding CEF field Etichetta e valore del campo stringa personalizzata 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 del 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 La struttura 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 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 della 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.
sottotipo 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". Codificato come "JUNIPER_JUNOS". Determinato dalla logica del parser in base ai contenuti del log. Se non è un messaggio CEF e non viene identificato nessun altro tipo di evento specifico, il valore predefinito è "STATUS_UPDATE". Imposta "NETWORK_HTTP" per i messaggi CEF. Se non è presente alcun campo desc, questo campo viene compilato con message_description estratto dal messaggio di log non elaborato.

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