Raccogliere i log del firewall OPNsense
Questo parser estrae i campi dai log del firewall OPNsense (formati syslog e CSV) e li mappa all'UDM. Utilizza l'analisi di log grok e CSV per i log dell'applicazione "filterlog", gestisce diversi formati di log e protocolli di rete (TCP, UDP, ICMP e così via) per compilare i campi UDM come principal, target, network e security_result. Aggiunge inoltre metadati come il nome del fornitore e del prodotto e determina il tipo di evento in base alla presenza di informazioni principali e di destinazione.
Prima di iniziare
- Assicurati di avere un'istanza Google Security Operations.
- Assicurati di disporre dell'accesso privilegiato all'interfaccia web di OPNsense.
Recupera il file di autenticazione di importazione di Google SecOps
- Accedi alla console Google SecOps.
- Vai a Impostazioni SIEM > Agenti di raccolta.
- Scarica il file di autenticazione dell'importazione.
Ottenere 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 BindPlane Agent
- Per l'installazione su Windows, esegui il seguente script:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
- Per l'installazione di Linux, esegui il seguente script:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
- Ulteriori opzioni di installazione sono disponibili in questa guida all'installazione.
Configurare l'agente BindPlane per importare i syslog e inviarli a Google SecOps
- Accedi al computer su cui è installato BindPlane.
Modifica il file
config.yaml
come segue:receivers: tcplog: # Replace the below port <54525> and IP (0.0.0.0) with your specific values listen_address: "0.0.0.0:54525" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the creds location below according the placement of the credentials file you downloaded creds: '{ json file for creds }' # Replace <customer_id> below with your actual ID that you copied customer_id: <customer_id> endpoint: malachiteingestion-pa.googleapis.com # You can apply ingestion labels below as preferred ingestion_labels: log_type: SYSLOG namespace: testNamespace raw_log_field: body service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - tcplog exporters: - chronicle/chronicle_w_labels
Riavviare BindPlane Agent per applicare le modifiche utilizzando il seguente comando:
sudo systemctl bindplane restart
Aggiungere la configurazione del server syslog a OPNsense
- Accedi all'interfaccia web di OPNsense.
- Vai a Sistema > Impostazioni > Registrazione.
- Nella sezione Logging remoto, abilita Invia log al server syslog remoto selezionando la casella.
- Nel campo Server syslog remoti, inserisci l'indirizzo IP del server syslog, inclusa la PORTA (ad esempio 10.10.10.10:54525).
- Seleziona Local0 come strumento syslog.
Imposta il livello Syslog su Alert.
Fai clic su Salva per applicare le modifiche.
Tabella di mappatura UDM
Campo log | Mappatura UDM | Logica |
---|---|---|
column1 |
security_result.rule_id |
Mappata direttamente da column1 . |
column10 |
additional.fields[].key : "tos"additional.fields[].value.string_value : valore di column10 |
Mappato direttamente da column10 , nidificato in additional.fields con chiave "tos". |
column12 |
additional.fields[].key : "ttl"additional.fields[].value.string_value : valore di column12 |
Mappato direttamente da column12 , nidificato in additional.fields con chiave "ttl". |
column13 |
additional.fields[].key : "Id"additional.fields[].value.string_value : valore di column13 |
Mappato direttamente da column13 , nidificato in additional.fields con chiave "Id". |
column14 |
additional.fields[].key : "offset"additional.fields[].value.string_value : valore di column14 |
Mappato direttamente da column14 , nidificato in additional.fields con chiave "offset". |
column15 |
additional.fields[].key : "flags"additional.fields[].value.string_value : valore di column15 |
Mappato direttamente da column15 , nidificato in additional.fields con chiave "flags". |
column17 |
network.ip_protocol |
Mappato direttamente da column17 dopo la conversione in lettere maiuscole. |
column18 |
network.received_bytes |
Mappato direttamente da column18 dopo la conversione in numero intero non firmato. |
column19 |
principal.ip |
Mappata direttamente da column19 . |
column20 |
target.ip |
Mappata direttamente da column20 . |
column21 |
principal.port (se column17 è TCP o UDP)additional.fields[].key : "data_length"additional.fields[].value.string_value : valore estratto (se column17 è ICMP, GRE, ESP o IGMP) |
Se column17 è TCP/UDP, mappato direttamente da column21 e convertito in numero intero. In caso contrario, il valore "datalength" viene estratto utilizzando Grok e inserito in additional.fields con la chiave "data_length". |
column22 |
target.port |
Mappata direttamente da column22 se column17 è TCP o UDP e convertita in numero intero. |
column24 |
additional.fields[].key : "tcp_flags"additional.fields[].value.string_value : valore di column24 |
Mappato direttamente da column24 se column17 è TCP, nidificato in additional.fields con chiave "tcp_flags". |
column29 |
additional.fields[].key : "tcp_options"additional.fields[].value.string_value : valore di column29 |
Mappato direttamente da column29 se column17 è TCP, nidificato in additional.fields con chiave "tcp_options". |
column4 |
additional.fields[].key : "tracker"additional.fields[].value.string_value : valore di column4 |
Mappato direttamente da column4 , nidificato in additional.fields con chiave "tracker". |
column5 |
additional.fields[].key : "interface"additional.fields[].value.string_value : valore di column5 |
Mappato direttamente da column5 , nidificato in additional.fields con chiave "interface". |
column6 |
security_result.rule_type |
Mappata direttamente da column6 . |
column7 |
security_result.action |
Mappatura da column7 . Se "block", viene convertito in maiuscolo "BLOCK". Se "pass", imposta "ALLOW". |
column8 |
network.direction |
Mappatura da column8 . Se "in", imposta "INBOUND". Se "out", imposta "OUTBOUND". |
domain |
principal.administrative_domain |
Mappato direttamente dal domain estratto da Grok. Imposta su "NETWORK_CONNECTION" se sono presenti entrambi gli indirizzi IP principali e di destinazione, altrimenti su "GENERIC_EVENT". Hardcoded su "OPNSENSE". Hardcoded su "OPNSENSE". |
message |
Vari campi | Analizzati utilizzando i filtri grok e csv per estrarre vari campi. Consulta le altre righe per mappature specifiche. |
ts |
metadata.event_timestamp.seconds , timestamp.seconds |
Analizzata dal campo del messaggio utilizzando grok e poi convertita in un timestamp. Il valore secondi viene utilizzato per compilare sia metadata.event_timestamp.seconds che timestamp.seconds . |
application |
principal.application |
Mappato direttamente dal application estratto da Grok. |
Modifiche
2023-11-22
- Parser appena creato.