Raccogliere i log di NGINX

Supportato in:

Questo parser NGINX gestisce i log in formato JSON e syslog. Estrae i campi da vari formati di log e li normalizza nel formato UDM. Il parser arricchisce l'evento con metadati per la gestione del server e l'attività di rete, inclusi gli accessi utente e le richieste HTTP. Gestisce anche la logica per gli eventi SSH e compila i campi UDM in base ai dati estratti.

Prima di iniziare

  • Assicurati di avere un'istanza Google Security Operations.
  • Assicurati che NGINX sia in esecuzione e generi log.
  • Assicurati di disporre dell'accesso root alla macchina host NGINX.

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 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 su 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 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: auditd
            raw_log_field: body
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - tcplog
                exporters:
                    - chronicle/chronicle_w_labels
    
  3. Riavvia l'agente BindPlane per applicare le modifiche:

    sudo systemctl restart bindplane
    

Identificare la posizione dei file di log di NGINX

I log NGINX vengono archiviati in: * Log di accesso: /var/log/nginx/access.log * Log di errore: /var/log/nginx/error.log 1. Accedi all'host NGINX utilizzando le credenziali amministrative. 1. Esegui il seguente comando e cerca i percorsi dei file di log sull'host NGINX:

  sudo cat /etc/nginx/nginx.conf | grep log

Configurare NGINX per inoltrare i log a Bindplane

  1. Apri il file di configurazione di NGINX (ad esempio /etc/nginx/nginx.conf):

    sudo vi /etc/nginx/nginx.conf
    
  2. Modifica la configurazione sostituendo <BINDPLANE_SERVER> e <BINDPLANE_PORT> con i tuoi valori:

    http {
        access_log syslog:server=<BINDPLANE_SERVER>:<BINDPLANE_PORT>,facility=local7,tag=nginx_access;
        error_log syslog:server=<BINDPLANE_SERVER>:<BINDPLANE_PORT>,facility=local7,tag=nginx_error;
    }
    
  3. Riavvia NGINX per applicare le modifiche:

    sudo systemctl reload nginx
    

Tabella di mappatura UDM

Campo log Mappatura UDM Logica
_Internal_WorkspaceResourceId target.resource.product_object_id Mappatura diretta
Computer principal.asset.hostname Mappatura diretta
Facility additional.fields["facility"] Mappatura diretta
HostName principal.asset.hostname Mappatura diretta se src_ip non è presente
ProcessName principal.application Mappatura diretta
SeverityLevel security_result.severity Mappato a INFORMATIONAL se il valore è "info"
SourceSystem principal.asset.platform Mappato a LINUX se il valore corrisponde a "Linux"
SyslogMessage Più campi Analizzata utilizzando grok per estrarre time, method, target_path, protocol, response_code, referral_url, user_agent, target_ip, target_host e cache
TenantId additional.fields["TenantId"] Mappatura diretta
acct principal.user.user_id Mappato direttamente se non vuoto o "?"
addr principal.asset.ip Mappatura diretta
audit_epoch metadata.event_timestamp Convertito in timestamp utilizzando il formato "UNIX". I nanosecondi vengono estratti dal messaggio di log originale.
cache additional.fields["cache"] Mappatura diretta
collection_time.nanos metadata.event_timestamp.nanos Utilizzato per i nanosecondi del timestamp dell'evento, se disponibile
collection_time.seconds metadata.event_timestamp.seconds Utilizzato per i secondi del timestamp dell'evento, se disponibili
data Più campi L'origine principale dei dati, analizzata in modo diverso in base al formato del log (Syslog, JSON o altro)
exe target.process.command_line Mappatura diretta dopo la rimozione di barre oblique e virgolette
hostname principal.asset.hostname OPPURE principal.asset.ip Se si tratta di un indirizzo IP, deve essere mappato a principal.asset.ip. In caso contrario, mappato a principal.asset.hostname
msg metadata.description Mappata direttamente come descrizione
node target.asset.hostname Mappatura diretta
pid target.process.pid Mappatura diretta
protocol network.application_protocol Mappato a HTTP se il valore corrisponde a "HTTP"
referral_url network.http.referral_url Mappato direttamente se non vuoto o "-"
res security_result.action_details Mappatura diretta
response_code network.http.response_code Mappato direttamente e convertito in numero intero
ses network.session_id Mappatura diretta
src_ip principal.asset.ip Mappatura diretta
target_host target.asset.hostname Mappatura diretta
target_ip target.asset.ip Mappato direttamente, dopo aver convertito la rappresentazione di stringa in un array JSON ed estratto i singoli IP
target_path target.url Mappatura diretta
time metadata.event_timestamp Analizzata per estrarre il timestamp utilizzando il formato "dd/MMM/yyyy:HH:mm:ss Z"
user_agent network.http.user_agent Mappato direttamente se non vuoto o "-"
metadata.event_type Impostato inizialmente su "GENERIC_EVENT", quindi potenzialmente sovrascritto in base ad altri campi come terminal e protocol. Il valore predefinito è "USER_UNCATEGORIZED" se il pattern grok principale non corrisponde. Imposta su "NETWORK_HTTP" se protocol è HTTP e target_ip è presente e su "STATUS_UPDATE" se protocol è HTTP, ma target_ip non è presente
metadata.log_type Impostato su "NGINX"
metadata.product_name Impostato su "NGINX"
metadata.vendor_name Impostato su "NGINX"
network.ip_protocol Impostato su "TCP" se terminal è "sshd" o "ssh" oppure se il pattern grok principale non corrisponde
principal.asset_id Imposta su "GCP.GCE:0001" se terminal è "sshd" o "ssh". Impostato su "GCP.GCE:0002" se il pattern Grok principale non corrisponde
extensions.auth.type Imposta su "MACCHINA" se terminal è "sshd" o "ssh"

Modifiche

2022-09-10

  • È stato creato un parser predefinito ed eliminato quello specifico per il cliente.
  • Versione iniziale del parser.