Raccogli i log del firewall OPNsense

Supportato in:

Questo documento spiega come importare i log del firewall OPNsense in Google Security Operations utilizzando l'agente Bindplane.

OPNsense è una piattaforma di routing e firewall open source che genera messaggi syslog per le corrispondenze delle regole firewall, le connessioni di rete e gli eventi di sistema. Il parser estrae i campi dai messaggi filterlog in formato CSV utilizzando l'analisi grok e CSV e li mappa al modello UDM (Unified Data Model).

Prima di iniziare

Assicurati di soddisfare i seguenti prerequisiti:

  • Un'istanza Google SecOps
  • Windows Server 2016 o versioni successive o host Linux con systemd
  • Connettività di rete tra l'agente Bindplane e il firewall OPNsense
  • Se l'agente viene eseguito dietro un proxy, assicurati che le porte del firewall siano aperte in base ai requisiti dell'agente Bindplane.
  • Accesso amministrativo all'interfaccia web di OPNsense

Recupera le credenziali Google SecOps per l'agente Bindplane

Per autenticare l'agente Bindplane in Google SecOps, scegli uno dei seguenti metodi:

  • Nuovi deployment: utilizza l'API Chronicle (opzione 1).
  • Deployment legacy: continua a utilizzare il file di autenticazione dell'acquisizione (Opzione 2) fino alla dismissione dell'API Ingestion il 20 luglio 2027.
  1. Accedi alla Google Cloud console e seleziona il progetto Google Cloud collegato alla tua istanza Google SecOps.
  2. Vai a IAM e amministrazione > Service account.
  3. Fai clic su Crea service account.
  4. Fornisci i seguenti dettagli di configurazione:
    • Nome service account: inserisci un nome per l'account (ad esempio bindplane-ingest).
    • Descrizione service account: inserisci una descrizione (ad esempio Bindplane agent log ingestion).
  5. Fai clic su Crea e continua.
  6. Nella sezione Concedi a questo account di servizio l'accesso al progetto, fai clic su Seleziona un ruolo e seleziona Editor Chronicle.
  7. Fai clic su Continua e poi su Fine.
  8. Fai clic sul account di servizio che hai creato, quindi vai alla scheda Chiavi.
  9. Fai clic su Aggiungi chiave > Crea nuova chiave.
  10. Seleziona JSON e fai clic su Crea. Il file della chiave viene scaricato sul tuo computer.
  11. Salva il file della chiave come ingestion-auth.json nella directory del raccoglitore Bindplane (/opt/observiq-otel-collector/ingestion-auth.json su Linux o C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json su Windows) o aggiorna creds_file_path in config.yaml in modo che corrisponda al percorso in cui lo salvi.
  12. Vai a IAM e amministrazione > Impostazioni e copia il numero di progetto. Ti servirà per la configurazione dell'esportatore.

Opzione 2: scarica il file di autenticazione dell'acquisizione (legacy)

  1. Accedi alla console Google SecOps.
  2. Vai a Impostazioni SIEM > Agenti di raccolta.
  3. Scarica il file di autenticazione dell'acquisizione.
  4. Salva il file in modo sicuro sul sistema in cui verrà installato l'agente 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 organizzazione.

Installa l'agente Bindplane

Installa l'agente Bindplane sul sistema operativo Windows o Linux seguendo le istruzioni riportate di seguito.

Installazione di finestre

  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:

    sc query observiq-otel-collector
    

    Il servizio dovrebbe essere visualizzato come RUNNING.

Installazione di Linux

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

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

Individua il file di configurazione

  • Linux:

    sudo nano /opt/observiq-otel-collector/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/opnsense:
        protocol: https
        # Region of your instance, for example us, europe, asia-southeast1
        location: <LOCATION>
        # Project number of the Google Cloud project linked to the instance
        project: '<PROJECT_NUMBER>'
        compression: gzip
        creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json'
        customer_id: '<customer_id>'
        endpoint: chronicle.googleapis.com
        log_type: OPNSENSE
        raw_log_field: body
    
    service:
      pipelines:
        logs/opnsense_to_chronicle:
          receivers:
            - udplog
          exporters:
            - chronicle/opnsense
    

Parametri di configurazione

Sostituisci i seguenti segnaposto:

  • Configurazione del destinatario:

    • listen_address: indirizzo IP e porta su cui ascoltare:
      • 0.0.0.0 per ascoltare su tutte le interfacce (consigliato)
      • La porta 514 è la porta syslog standard (richiede l'accesso root su Linux; utilizza 1514 per l'accesso non root)
  • Configurazione dell'esportatore:

    • creds_file_path: percorso completo del file della chiave JSON del account di servizio (opzione 1):
      • Linux: /opt/observiq-otel-collector/ingestion-auth.json
      • Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
    • customer_id: ID cliente copiato dalla console Google SecOps
    • location: sostituisci <LOCATION> con la regione della tua istanza Google SecOps (ad esempio us, europe o asia-southeast1). L'esportatore aggiunge chronicle.googleapis.com come prefisso a questo valore. Per l'elenco completo, consulta Endpoint regionali.
    • project: sostituisci <PROJECT_NUMBER> con il numero di progetto in IAM e amministrazione > Impostazioni.
    • endpoint: mantieni l'impostazione chronicle.googleapis.com.

Esportatore dell'API di importazione precedente

  • Se utilizzi il file di autenticazione dell'acquisizione dell'Opzione 2, sostituisci il blocco exporters con il seguente. Imposta creds_file_path sul percorso del file di autenticazione dell'acquisizione e, se l'istanza si trova al di fuori degli Stati Uniti, sostituisci malachiteingestion-pa.googleapis.com con il tuo endpoint regionale (ad esempio, europe-malachiteingestion-pa.googleapis.com).

    exporters:
      chronicle/opnsense:
        compression: gzip
        creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json'
        customer_id: '<customer_id>'
        endpoint: malachiteingestion-pa.googleapis.com
        log_type: OPNSENSE
        raw_log_field: body
    

Salva 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 verificare la presenza di 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"
        

Aggiungere la configurazione del server syslog a OPNsense

  1. Accedi all'interfaccia web di OPNsense.
  2. Vai a Sistema > Impostazioni > Logging.
  3. Nella sezione Logging remoto, attiva Invia i 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:514).
  5. Seleziona Local0 come facility syslog.
  6. Imposta il livello di 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 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 un 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: valore di 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", viene convertito in "BLOCK" in lettere maiuscole. Se il risultato è "pass", imposta il valore su "ALLOW".
column8 network.direction Mappato da column8. Se "in", imposta "INBOUND". Se è "out", imposta su "OUTBOUND".
domain principal.administrative_domain Mappato direttamente dal domain estratto da grok. Impostato su "NETWORK_CONNECTION" se sono presenti sia l'indirizzo IP principal sia quello di destinazione, altrimenti su "GENERIC_EVENT". Codificato in modo permanente su "OPNSENSE". Impostato come 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 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 che timestamp.seconds.
application principal.application Mappato direttamente dal application estratto da grok.
column27 event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
column2 event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
column3 event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
column11 event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
column26 event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
column28 event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
column25 event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
column16 event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
column9 event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche

Log delle modifiche

Visualizza il log delle modifiche per questo parser

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