NGINX-Protokolle erfassen

Unterstützt in:

Dieser NGINX-Parser verarbeitet Logs 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.

Hinweise

Prüfen Sie, ob folgende Voraussetzungen erfüllt sind:

  • Google SecOps-Instanz
  • NGINX wird ausgeführt und generiert Protokolle
  • 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. Speichern Sie die Datei sicher auf dem System, auf dem BindPlane installiert wird.

Google SecOps-Kundennummer abrufen

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

Bindplane-Agent installieren

Windows-Installation

  1. Öffnen Sie die Eingabeaufforderung oder die PowerShell als Administrator.
  2. Führen Sie dazu diesen Befehl aus:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Linux-Installation

  1. Öffnen Sie ein Terminal mit Root- oder Sudo-Berechtigungen.
  2. Führen Sie dazu diesen Befehl aus:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    

Weitere Installationsressourcen

Bindplane-Agent so konfigurieren, dass er Syslog-Daten aufnimmt und an Google SecOps sendet

  1. Rufen Sie die Konfigurationsdatei auf:

    1. Suchen Sie die Datei config.yaml. Normalerweise befindet es sich unter Linux im Verzeichnis /etc/bindplane-agent/ oder unter Windows im Installationsverzeichnis.
    2. Öffnen Sie die Datei mit einem Texteditor, z. B. nano, vi oder Notepad.
  2. Bearbeiten Sie die Datei config.yamlso:

    receivers:
        udplog:
            # Replace the port and IP address as required
            listen_address: "0.0.0.0:514"
    
    exporters:
        chronicle/chronicle_w_labels:
            compression: gzip
            # Adjust the path to the credentials file you downloaded in Step 1
            creds: '/path/to/ingestion-authentication-file.json'
            # Replace with your actual customer ID from Step 2
            customer_id: <customer_id>
            endpoint: malachiteingestion-pa.googleapis.com
            # Add optional ingestion labels for better organization
            ingestion_labels:
                log_type: 'NGINX'
                raw_log_field: body
    
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - udplog
                exporters:
                    - chronicle/chronicle_w_labels
    
  3. Ersetzen Sie den Port und die IP-Adresse nach Bedarf in Ihrer Infrastruktur.

  4. Ersetzen Sie <customer_id> durch die tatsächliche Kundennummer.

  5. Aktualisieren Sie /path/to/ingestion-authentication-file.json im Abschnitt Authentifizierungsdatei für die Datenaufnahme von Google SecOps abrufen auf den Pfad, unter dem die Authentifizierungsdatei gespeichert wurde.

Starten Sie den Bindplane-Agent neu, um die Änderungen anzuwenden

  • Führen Sie den folgenden Befehl aus, um den Bindplane-Agenten unter Linux neu zu starten:

    sudo systemctl restart bindplane-agent
    
  • Sie können den Bindplane-Agenten unter Windows entweder über die Dienste-Konsole oder mit dem folgenden Befehl neu starten:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Speicherort der NGINX-Logdateien ermitteln

  1. Normalerweise werden NGINX-Protokolle hier gespeichert:
    • Zugriffslogs: /var/log/nginx/access.log
    • Fehlerprotokolle: /var/log/nginx/error.log
  2. Greifen Sie mit Administratoranmeldedaten auf den NGINX-Host zu.
  3. Führen Sie den folgenden Befehl aus und suchen Sie nach dem Pfad zu den Protokollen auf Ihrem NGINX-Host:

    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 dem Wert „INFORMATIONSÜBERSICHT“ 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 Format UNIX in einen Zeitstempel konvertiert. 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 umgekehrte Schrägstriche 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 Parsen zum Extrahieren des Zeitstempels im Format dd/MMM/yyyy:HH:mm:ss Z
user_agent network.http.user_agent Direkt zugeordnet, wenn nicht leer oder -
metadata.event_type Wird zuerst auf GENERIC_EVENT festgelegt und dann möglicherweise basierend auf anderen Feldern wie terminal und protocol überschrieben. Standardmäßig ist USER_UNCATEGORIZED, 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 NGINX fest
metadata.product_name Legen Sie NGINX fest
metadata.vendor_name Legen Sie NGINX fest
network.ip_protocol Wird auf TCP gesetzt, wenn terminal sshd oder ssh ist oder das Haupt-Grok-Muster nicht übereinstimmt.
principal.asset_id Wird auf GCP.GCE:0001 gesetzt, wenn terminal gleich sshd oder ssh ist. Legen Sie den Wert auf GCP.GCE:0002 fest, wenn das Haupt-Grok-Muster nicht übereinstimmt.
extensions.auth.type Wird auf MACHINE gesetzt, wenn terminal gleich sshd oder ssh ist.

Änderungen

2022-09-10

  • Standardparser erstellt und den kundenspezifischen Parser gelöscht
  • Erste Parserversion

Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten