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 a UDM. Utilizza l'analisi grok e CSV per i log delle applicazioni "filterlog", gestendo diversi formati di log e protocolli di rete (TCP, UDP, ICMP e così via) per compilare i campi UDM come principal, target, rete e security_result. Inoltre, aggiunge metadati come il nome del fornitore e del prodotto e determina il tipo di evento in base alla presenza di informazioni sul principale e sul target.

Prima di iniziare

  • Assicurati di avere un'istanza Google Security Operations.
  • Assicurati di disporre dell'accesso con privilegi all'interfaccia web di OPNsense.

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.

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

  1. Per l'installazione di 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.

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

  1. Accedi alla macchina in cui è installato l'agente 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. Riavvia 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, attiva Invia log al server syslog remoto selezionando la casella.
  4. Nel campo Remote Syslog Servers (Server syslog remoti), inserisci l'indirizzo IP del server syslog, inclusa la PORTA (ad esempio, 10.10.10.10:54525).
  5. Seleziona Local0 come struttura syslog.
  6. Imposta Livello Syslog su Avviso.

  7. Fai clic su Salva per applicare le modifiche.

Tabella di mappatura UDM

Campo log Mappatura UDM Logic
column1 security_result.rule_id Mappato 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 la chiave "tos".
column12 additional.fields[].key: "ttl"
additional.fields[].value.string_value: Valore di column12
Mappato direttamente da column12, nidificato in additional.fields con la chiave "ttl".
column13 additional.fields[].key: "Id"
additional.fields[].value.string_value: Valore di column13
Mappato direttamente da column13, nidificato in additional.fields con la chiave "Id".
column14 additional.fields[].key: "offset"
additional.fields[].value.string_value: Valore di column14
Mappato direttamente da column14, nidificato in additional.fields con la chiave "offset".
column15 additional.fields[].key: "flags"
additional.fields[].value.string_value: Valore di column15
Mappato direttamente da column15, nidificato in additional.fields con la chiave "flags".
column17 network.ip_protocol Mappato direttamente da column17 dopo la conversione in maiuscolo.
column18 network.received_bytes Mappato direttamente da column18 dopo la conversione in numero intero senza segno.
column19 principal.ip Mappato direttamente da column19.
column20 target.ip Mappato 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, viene 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 Mappato direttamente da column22 se column17 è TCP o UDP e convertito 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 la chiave "tcp_flags".
column29 additional.fields[].key: "tcp_options"
additional.fields[].value.string_value: Value of column29
Mappato direttamente da column29 se column17 è TCP, nidificato in additional.fields con la 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 la chiave "tracker".
column5 additional.fields[].key: "interface"
additional.fields[].value.string_value: Valore di column5
Mappato direttamente da column5, nidificato in additional.fields con la chiave "interface".
column6 security_result.rule_type Mappato direttamente da column6.
column7 security_result.action Mappato da column7. Se "block", convertito in "BLOCK" in maiuscolo. Se "pass", imposta "ALLOW".
column8 network.direction Mappato da column8. Se "in", imposta "INBOUND". Se "out", imposta "OUTBOUND".
domain principal.administrative_domain Mappato direttamente da domain estratto da Grok. Impostato su "NETWORK_CONNECTION" se sono presenti sia l'indirizzo IP principale sia quello di destinazione, altrimenti "GENERIC_EVENT". Codificato in modo permanente su "OPNSENSE". Codificato in modo permanente 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 Analizzato dal campo del messaggio utilizzando grok e poi convertito in un timestamp. Il valore in secondi viene utilizzato per compilare sia metadata.event_timestamp.seconds sia timestamp.seconds.
application principal.application Mappato direttamente da application estratto da Grok.

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