Raccogliere i log del firewall OPNsense

Supportato in:

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

  1. Accedi alla console Google SecOps.
  2. Vai a Impostazioni SIEM > Agenti di raccolta.
  3. Scarica il file di autenticazione dell'importazione.

Ottenere 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 BindPlane Agent

  1. 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
  2. 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
  3. Ulteriori opzioni di installazione sono disponibili in questa guida all'installazione.

Configurare l'agente BindPlane per importare i syslog e inviarli a Google SecOps

  1. Accedi al computer su cui è installato BindPlane.
  2. 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
    
  3. Riavviare BindPlane Agent per applicare le modifiche utilizzando il seguente comando: sudo systemctl bindplane restart

Aggiungere la configurazione del server syslog a OPNsense

  1. Accedi all'interfaccia web di OPNsense.
  2. Vai a Sistema > Impostazioni > Registrazione.
  3. Nella sezione Logging remoto, abilita Invia log al server syslog remoto selezionando la casella.
  4. Nel campo Server syslog remoti, inserisci l'indirizzo IP del server syslog, inclusa la PORTA (ad esempio 10.10.10.10:54525).
  5. Seleziona Local0 come strumento syslog.
  6. Imposta il livello Syslog su Alert.

  7. 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.