Raccogliere i log di pfSense

Supportato in:

Questo documento spiega come importare i log di pfSense in Google Security Operations utilizzando Bindplane.

pfSense è una distribuzione software di firewall e router open source basata su FreeBSD. Fornisce funzionalità di filtro dei pacchetti stateful, VPN, gestione del traffico, NAT, server DHCP, agente di inoltro DNS e rilevamento delle intrusioni, tutte gestite tramite un'interfaccia basata sul web. Il parser estrae i campi dai log formattati di syslog di pfSense. Utilizza grok 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 all'interfaccia web di pfSense

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. Salva il file in modo sicuro sul sistema in cui verrà installato 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 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

  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 il comando:

    sc query observiq-otel-collector
    

Il servizio dovrebbe essere visualizzato come IN ESECUZIONE.

Installazione di Linux

  1. Apri un terminale con privilegi di 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 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.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/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: 'PFSENSE'
            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: utilizza udplog per syslog UDP o tcplog per syslog TCP
      • 0.0.0.0: indirizzo IP su cui ascoltare (0.0.0.0 per 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
      • YOUR_CUSTOMER_ID: l'ID cliente della sezione Recupera ID cliente
      • endpoint: 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.
      • log_type: Tipo di log esattamente come appare in Chronicle (PFSENSE)

Salvare 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 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-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"
        

Configura l'inoltro Syslog su pfSense

pfSense viene eseguito su FreeBSD e fornisce un'interfaccia basata sul web per tutte le attività di configurazione, incluso l'inoltro syslog remoto.

  1. Accedi all'interfaccia web di pfSense.
  2. Vai a Stato > Log di sistema > Impostazioni.
  3. Vai alla sezione Opzioni di logging remoto.
  4. Seleziona Attiva logging remoto.
  5. Fornisci i seguenti dettagli di configurazione:
    • Indirizzo di origine: seleziona Qualsiasi (o un'interfaccia specifica).
    • Protocollo IP: seleziona IPv4.
    • Server di log remoti: inserisci BINDPLANE_IP:514 nel primo campo disponibile. Sostituisci BINDPLANE_IP con l'indirizzo IP dell'host dell'agente Bindplane.
  6. Nella sezione Contenuti Syslog remoto, seleziona le categorie di log da inoltrare:
    • Eventi di sistema
    • Eventi firewall
    • Eventi DNS (Resolver/unbound, Forwarder/dnsmasq)
    • Eventi DHCP (servizio DHCP)
    • Eventi PPP
    • Eventi di autenticazione (autenticazione del portale, RADIUS)
    • Eventi VPN (IPsec, OpenVPN, L2TP)
    • Eventi gateway (monitoraggio gateway)
    • Eventi di routing (demone di routing)
    • Eventi NTP
    • Pacchetti (pacchetti installati)
  7. Fai clic su Salva.
  8. Verifica che i messaggi syslog vengano inviati controllando i log dell'agente Bindplane.

Tabella di mappatura UDM

Campo log Mappatura UDM Logic
applicazione principal.application Il valore viene estratto dal messaggio di log utilizzando i pattern grok. Per i messaggi syslog, il nome dell'applicazione si trova in genere dopo l'hostname e il timestamp.
comando principal.process.command_line Estratto dal campo della descrizione quando il log indica l'esecuzione di un comando.
descrizione metadata.description Il campo della descrizione è mappato alla descrizione dei metadati UDM, ad eccezione dei log dell'applicazione syslog-ng, in cui è mappato a metadata.description. Per gli eventi DHCP, il tipo dhcp_type viene anteposto alla descrizione.
dhcp_type metadata.product_event_type Il tipo di messaggio DHCP (ad es. DHCPDISCOVER, DHCPOFFER) viene estratto e mappato.
host intermediary.hostname OR intermediary.ip Se il valore host è un indirizzo IP valido, viene mappato su intermediary.ip. In caso contrario, viene mappato su intermediary.hostname.
host principal.hostname, principal.asset.hostname Se non è presente alcun IP principale, l'host viene considerato come nome host principale.
mac principal.mac, network.dhcp.chaddr L'indirizzo MAC associato a una richiesta DHCP viene estratto e mappato.
src_ip principal.ip, principal.asset.ip Estratti da formati di log specifici utilizzando un pattern grok.
src_mac principal.mac Estratti da formati di log specifici utilizzando un pattern grok.
dst_mac target.mac Estratti da formati di log specifici utilizzando un pattern grok.
timestamp metadata.event_timestamp Il timestamp viene estratto dal messaggio di log e convertito in un formato timestamp UDM. Se disponibili, le informazioni sul fuso orario (tz) vengono aggiunte al timestamp prima della conversione.
timestamp_no_year metadata.event_timestamp Se è presente un timestamp senza anno, viene analizzato e l'anno corrente viene aggiunto durante la procedura di analisi.
utente principal.user.userid Il nome utente associato a un evento viene estratto e mappato.
colonna1 security_result.rule_id Mappata dalla prima colonna CSV se la descrizione è in formato CSV.
column6 security_result.rule_type Mappata dalla sesta colonna del file CSV se la descrizione è in formato CSV.
column7 security_result.action Mappata dalla settima colonna CSV se la descrizione è in formato CSV. Convertito in "BLOCK" o "ALLOW".
column8 network.direction Mappata dalla ottava colonna CSV se la descrizione è in formato CSV. Convertito in "INBOUND" o "OUTBOUND".
column13 network.ip_protocol (se UDP o ICMP) Mappato dalla tredicesima colonna CSV se la descrizione è in formato CSV e il protocollo è UDP o ICMP. Per gli eventi TCP/UDP, viene utilizzato per creare un campo aggiuntivo con la chiave "Id".
column16 principal.ip, principal.asset.ip (se IPv6 e column9 è 6) Mappato dalla sedicesima colonna CSV se la descrizione è in formato CSV e la colonna 9 è 6. Per gli eventi TCP/UDP, viene utilizzato per l'identificazione del protocollo se column9 è 4.
column17 target.ip, target.asset.ip (se IPv6 e non ip_failure) Mappato dalla diciassettesima colonna CSV se la descrizione è in formato CSV, la colonna 9 è 6 e il valore è un IP valido. Per gli eventi TCP/UDP, viene utilizzato per l'identificazione del protocollo.
column18 principal.port (se UDP) Mappato dalla diciottesima colonna CSV se la descrizione è in formato CSV e il protocollo è UDP. Per gli eventi TCP/UDP, viene mappato a network.received_bytes.
column19 target.port (se UDP) Mappato dalla diciannovesima colonna CSV se la descrizione è in formato CSV e il protocollo è UDP. Per gli eventi DHCP, viene mappato a network.dhcp.yiaddr. Per gli altri eventi, viene mappato a principal.ip, principal.asset.ip.
column20 additional.fields (chiave: "data_length") (se UDP) Mappato dalla ventesima colonna CSV se la descrizione è in formato CSV e il protocollo è UDP. Per gli altri eventi, viene mappato a target.ip, target.asset.ip.
column21 principal.port (se TCP/UDP) Mappato dalla ventunesima colonna CSV se la descrizione è in formato CSV e il protocollo è TCP o UDP.
column22 target.port (se TCP/UDP) Mappato dalla ventiduesima colonna CSV se la descrizione è in formato CSV e il protocollo è TCP o UDP.
column23 additional.fields (key: "data_length") (se TCP/UDP) Mappato dalla ventitreesima colonna del file CSV se la descrizione è in formato CSV e il protocollo è TCP o UDP.
column24 additional.fields (key: "tcp_flags") (se TCP) Mappato dalla ventiquattresima colonna del file CSV se la descrizione è in formato CSV e il protocollo è TCP.
column25 additional.fields (chiave: "sequence_number") (se TCP/UDP) Mappato dalla venticinquesima colonna del file CSV se la descrizione è in formato CSV e il protocollo è TCP o UDP.
column29 additional.fields (key: "tcp_options") (se TCP) Mappato dalla ventinovesima colonna CSV se la descrizione è in formato CSV e il protocollo è TCP.
compression_algo additional.fields (key: "Compression Algorithm") Estratto dal campo Descrizione e aggiunto come campo aggiuntivo.
decr metadata.description Estratto dal campo del messaggio e utilizzato come descrizione.
principal_ip principal.ip, principal.asset.ip Estratto dal campo Descrizione e rappresenta l'indirizzo IP principale.
principal_username principal.user.userid Estratto dal campo della descrizione e rappresenta il nome utente principale.
stato security_result.detection_fields (chiave: "status") Estratto dal campo della descrizione e aggiunto come campo di rilevamento all'interno del risultato di sicurezza.
target_host target.hostname, target.asset.hostname Estratto dal campo della descrizione e rappresenta il nome host di destinazione.
src_port principal.port Estratto dal campo Descrizione e rappresenta la porta di origine. Determinato in base a vari campi di log e alla logica del parser. Può essere NETWORK_CONNECTION, NETWORK_DHCP, STATUS_UPDATE o GENERIC_EVENT. Codificato in modo permanente su "PFSENSE". Codificato in modo permanente su "PFSENSE". Codificato in modo permanente su "PFSENSE". Imposta "DHCP" per gli eventi DHCP. Imposta "BOOTREQUEST" per DHCPDISCOVER e DHCPREQUEST e "BOOTREPLY" per DHCPOFFER e DHCPACK. Imposta "DISCOVER", "REQUEST", "OFFER" o "ACK" in base al campo dhcp_type.

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