NGINX-Protokolle erfassen

Unterstützt in:

Dieser NGINX-Parser verarbeitet Protokolle im JSON- und syslog-Format. Es extrahiert Felder aus verschiedenen Protokollformaten und normalisiert sie in das UDM-Format. Der Parser ergänzt das Ereignis um Metadaten für die Serververwaltung und Netzwerkaktivitäten, einschließlich Nutzeranmeldungen und HTTP-Anfragen. Außerdem verarbeitet er die Logik für SSH-Ereignisse und füllt UDM-Felder basierend auf extrahierten Daten aus.

Hinweis

  • Sie benötigen eine Google Security Operations-Instanz.
  • Prüfen Sie, ob NGINX ausgeführt wird und Protokolle generiert.
  • Sie benötigen Root-Zugriff auf den NGINX-Hostcomputer.

Authentifizierungsdatei für die Aufnahme in Google SecOps abrufen

  1. Melden Sie sich in der Google SecOps Console an.
  2. Gehen Sie zu SIEM-Einstellungen > Erfassungsagenten.
  3. Lade die Datei zur Authentifizierung der Datenaufnahme herunter.

Google SecOps-Kundennummer abrufen

  1. Melden Sie sich in der Google SecOps Console an.
  2. Gehen Sie zu SIEM-Einstellungen > Profile.
  3. Kopieren und speichern Sie die Kundennummer aus dem Bereich Organisationsdetails.

BindPlane-Agent installieren

  1. Führen Sie für die Windows-Installation das folgende Script aus:
    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
  2. Führen Sie für die Linux-Installation das folgende Script aus:
    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
  3. Weitere Installationsoptionen finden Sie in diesem Installationsleitfaden.

BindPlane-Agent so konfigurieren, dass er Syslog-Protokolle aufnimmt und an Google SecOps sendet

  1. Rufen Sie den Computer auf, auf dem BindPlane installiert ist.
  2. Bearbeiten Sie die Datei config.yamlso:

    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. Starten Sie den BindPlane-Agent neu, um die Änderungen anzuwenden:

    sudo systemctl restart bindplane
    

Speicherort der NGINX-Logdateien ermitteln

NGINX-Logs werden hier gespeichert: * Zugriffsprotokolle: /var/log/nginx/access.log * Fehlerprotokolle: /var/log/nginx/error.log 1. Greifen Sie mit Administratoranmeldedaten auf den NGINX-Host zu. 1. Führen Sie den folgenden Befehl aus und suchen Sie auf Ihrem NGINX-Host nach den Pfaden zu den Protokolldateien:

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

NGINX so konfigurieren, dass Protokolle an Bindplane weitergeleitet werden

  1. Öffnen Sie die NGINX-Konfigurationsdatei (z. B. /etc/nginx/nginx.conf):

    sudo vi /etc/nginx/nginx.conf
    
  2. Bearbeiten Sie die Konfiguration und ersetzen Sie <BINDPLANE_SERVER> und <BINDPLANE_PORT> durch Ihre Werte:

    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. Starte NGINX neu, damit die Änderungen übernommen werden:

    sudo systemctl reload nginx
    

UDM-Zuordnungstabelle

Logfeld UDM-Zuordnung Logik
_Internal_WorkspaceResourceId target.resource.product_object_id Direkt zugeordnet
Computer principal.asset.hostname Direkt zugeordnet
Facility additional.fields["facility"] Direkt zugeordnet
HostName principal.asset.hostname Direkt zugeordnet, wenn src_ip nicht vorhanden ist
ProcessName principal.application Direkt zugeordnet
SeverityLevel security_result.severity Wird auf „INFORMATIONSWEISEND“ zugeordnet, wenn der Wert „info“ ist.
SourceSystem principal.asset.platform Wird LINUX zugeordnet, wenn der Wert mit „Linux“ übereinstimmt.
SyslogMessage Mehrere Felder Mit Grok geparst, um time, method, target_path, protocol, response_code, referral_url, user_agent, target_ip, target_host und cache zu extrahieren
TenantId additional.fields["TenantId"] Direkt zugeordnet
acct principal.user.user_id Direkt zugeordnet, wenn nicht leer oder „?“
addr principal.asset.ip Direkt zugeordnet
audit_epoch metadata.event_timestamp Im UNIX-Format in einen Zeitstempel umgewandelt. Nanosekunden werden aus der ursprünglichen Protokollnachricht extrahiert.
cache additional.fields["cache"] Direkt zugeordnet
collection_time.nanos metadata.event_timestamp.nanos Wird für Nanosekunden des Ereigniszeitstempels verwendet, sofern verfügbar.
collection_time.seconds metadata.event_timestamp.seconds Wird für die Sekunden des Ereigniszeitstempels verwendet, sofern verfügbar.
data Mehrere Felder Die Hauptdatenquelle, die je nach Protokollformat (Syslog, JSON oder andere) unterschiedlich geparst wird
exe target.process.command_line Direkt zugeordnet, nachdem Backslashes und Anführungszeichen entfernt wurden
hostname principal.asset.hostname ODER principal.asset.ip Wenn es sich um eine IP-Adresse handelt, die principal.asset.ip zugeordnet ist. Andernfalls wird es auf principal.asset.hostname zugeordnet.
msg metadata.description Direkt als Beschreibung zugeordnet
node target.asset.hostname Direkt zugeordnet
pid target.process.pid Direkt zugeordnet
protocol network.application_protocol Wird HTTP zugeordnet, wenn der Wert mit „HTTP“ übereinstimmt.
referral_url network.http.referral_url Direkt zugeordnet, wenn nicht leer oder „-“
res security_result.action_details Direkt zugeordnet
response_code network.http.response_code Direkt zugeordnet und in eine Ganzzahl umgewandelt
ses network.session_id Direkt zugeordnet
src_ip principal.asset.ip Direkt zugeordnet
target_host target.asset.hostname Direkt zugeordnet
target_ip target.asset.ip Direkt zugeordnet, nachdem die Stringdarstellung in ein JSON-Array konvertiert und dann einzelne IP-Adressen extrahiert wurden
target_path target.url Direkt zugeordnet
time metadata.event_timestamp Der Zeitstempel wird im Format „TT.MMM.JJJJ:HH:mm:ss Z“ geparst.
user_agent network.http.user_agent Direkt zugeordnet, wenn nicht leer oder „-“
metadata.event_type Wird zuerst auf „GENERIC_EVENT“ gesetzt und dann möglicherweise basierend auf anderen Feldern wie terminal und protocol überschrieben. Standardmäßig wird „USER_UNCATEGORIZED“ verwendet, wenn das Haupt-Grok-Muster nicht übereinstimmt. Legen Sie „NETWORK_HTTP“ fest, wenn protocol HTTP ist und target_ip vorhanden ist, und „STATUS_UPDATE“, wenn protocol HTTP ist, target_ip aber nicht vorhanden ist.
metadata.log_type Legen Sie diesen Wert auf „NGINX“ fest.
metadata.product_name Legen Sie diesen Wert auf „NGINX“ fest.
metadata.vendor_name Legen Sie diesen Wert auf „NGINX“ fest.
network.ip_protocol Legen Sie „TCP“ fest, wenn terminal „sshd“ oder „ssh“ ist oder das Haupt-Grok-Muster nicht übereinstimmt.
principal.asset_id Legen Sie „GCP.GCE:0001“ fest, wenn terminal „sshd“ oder „ssh“ ist. Legen Sie „GCP.GCE:0002“ fest, wenn das Haupt-Grok-Muster nicht übereinstimmt.
extensions.auth.type Wird auf „MACHINE“ gesetzt, wenn terminal „sshd“ oder „ssh“ ist

Änderungen

2022-09-10

  • Wir haben einen Standard-Parser erstellt und den kundenspezifischen Parser gelöscht.
  • Erste Parserversion.