Raccogliere i log di Juniper Junos
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
- Accedi alla console Google SecOps.
- Vai a Impostazioni SIEM > Agenti di raccolta.
- 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
- Accedi alla console Google SecOps.
- Vai a Impostazioni SIEM > Profilo.
- 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
- Apri Prompt dei comandi o PowerShell come amministratore.
Esegui questo comando:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quietAttendi il completamento dell'installazione.
Verifica l'installazione eseguendo il comando:
sc query observiq-otel-collector
Il servizio dovrebbe essere visualizzato come IN ESECUZIONE.
Installazione di Linux
- Apri un terminale con privilegi di root o sudo.
Esegui questo comando:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.shAttendi il completamento dell'installazione.
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.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
Modifica il file di configurazione
Sostituisci l'intero contenuto di
config.yamlcon 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: utilizzaudplogper syslog UDP otcplogper syslog TCP0.0.0.0: indirizzo IP su cui ascoltare (0.0.0.0per 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
- Linux:
YOUR_CUSTOMER_ID: l'ID cliente della sezione Recupera ID clienteendpoint: 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.
- Stati Uniti:
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, poiEntere infineCtrl+X. - Windows: fai clic su File > Salva.
- Linux: premi
Riavvia l'agente Bindplane per applicare le modifiche
Per riavviare l'agente Bindplane in Linux, esegui questo comando:
sudo systemctl restart observiq-otel-collectorVerifica che il servizio sia in esecuzione:
sudo systemctl status observiq-otel-collectorControlla 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-collectorConsole dei servizi:
- Premi
Win+R, digitaservices.msce premi Invio. - Individua observIQ OpenTelemetry Collector.
Fai clic con il tasto destro del mouse e seleziona Riavvia.
Verifica che il servizio sia in esecuzione:
sc query observiq-otel-collectorControlla i log per individuare eventuali errori:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- Premi
Configurare l'inoltro di Syslog su Juniper Junos
- Connettiti al dispositivo Juniper tramite SSH o console.
Attiva la modalità di configurazione:
configureConfigura 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_IPcon l'indirizzo IP dell'host dell'agente Bindplane.
- Sostituisci
(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(Facoltativo per l'analisi avanzata) Configura i dati syslog strutturati:
set system syslog host BINDPLANE_IP structured-dataEsegui il commit della configurazione:
commit and-quitVerifica la configurazione di syslog:
show system syslog host BINDPLANE_IPVerifica 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.