NGINX-Logs erfassen

Unterstützt in:

In diesem Dokument wird beschrieben, wie Sie NGINX-Logs mit dem Bindplane-Agent in Google Security Operations aufnehmen.

NGINX ist ein Webserver und Reverse-Proxy, der Syslog-Meldungen für HTTP-Zugriffsereignisse, Fehlerereignisse, Authentifizierungsaktivitäten und Prozessinformationen generiert. Der Parser extrahiert Felder aus mehreren Logformaten (Syslog, JSON, Zugriffsprotokolle) mithilfe von Grok-Mustern und ordnet sie dem Unified Data Model (UDM) zu.

Hinweis

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

  • Eine Google SecOps-Instanz
  • Windows Server 2016 oder höher oder Linux-Host mit systemd
  • Netzwerkverbindung zwischen dem Bindplane-Agent und dem NGINX-Server
  • Wenn Sie den Agent hinter einem Proxy ausführen, müssen die Firewallports gemäß den Anforderungen des Bindplane-Agents geöffnet sein.
  • Administratorzugriff auf den NGINX-Host

Authentifizierungsdatei für die Aufnahme in Google SecOps abrufen

  1. Melden Sie sich in der Google SecOps-Konsole an.
  2. Rufen Sie die SIEM-Einstellungen > Collection Agents auf.
  3. Laden Sie die Authentifizierungsdatei für die Aufnahme herunter.
  4. Speichern Sie die Datei sicher auf dem System, auf dem der BindPlane-Agent installiert wird.

Google SecOps-Kundennummer abrufen

  1. Melden Sie sich in der Google SecOps-Konsole an.
  2. Rufen Sie die SIEM-Einstellungen > Profile auf.
  3. Kopieren und speichern Sie die Kunden-ID aus dem Bereich Organisationsdetails.

BindPlane-Agent installieren

Installieren Sie den Bindplane-Agent auf Ihrem Windows- oder Linux-Betriebssystem gemäß der folgenden Anleitung.

Fenstereinbau

  1. Öffnen Sie die Eingabeaufforderung oder 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
    
  3. Warten Sie, bis die Installation abgeschlossen ist.

  4. Überprüfen Sie die Installation mit folgendem Befehl:

    sc query observiq-otel-collector
    

    Der Dienst sollte als RUNNING (Wird ausgeführt) angezeigt werden.

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
    
  3. Warten Sie, bis die Installation abgeschlossen ist.

  4. Überprüfen Sie die Installation mit folgendem Befehl:

    sudo systemctl status observiq-otel-collector
    

    Der Dienst sollte als aktiv (wird ausgeführt) angezeigt werden.

Zusätzliche Installationsressourcen

Weitere Installationsoptionen und Informationen zur Fehlerbehebung finden Sie in der Installationsanleitung für den Bindplane-Agent.

BindPlane-Agent zum Erfassen von Syslog-Daten und Senden an Google SecOps konfigurieren

Konfigurationsdatei suchen

  • Linux:

    sudo nano /opt/observiq-otel-collector/config.yaml
    
  • Windows:

    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    

Konfigurationsdatei bearbeiten

  • Ersetzen Sie den gesamten Inhalt von config.yaml durch die folgende Konfiguration:

    receivers:
        udplog:
            listen_address: "0.0.0.0:514"
    
    exporters:
        chronicle/nginx:
            compression: gzip
            creds_file_path: '/etc/bindplane-agent/ingestion-auth.json'
            customer_id: '<customer_id>'
            endpoint: malachiteingestion-pa.googleapis.com
            log_type: NGINX
            raw_log_field: body
    
    service:
        pipelines:
            logs/nginx_to_chronicle:
                receivers:
                    - udplog
                exporters:
                    - chronicle/nginx
    

Konfigurationsparameter

Ersetzen Sie die folgenden Platzhalter:

  • Empfängerkonfiguration:

    • listen_address: IP-Adresse und Port, auf die gewartet werden soll:
      • 0.0.0.0, um alle Schnittstellen zu überwachen (empfohlen)
      • Port 514 ist der Standard-Syslog-Port (erfordert Root unter Linux; verwenden Sie 1514 für Nicht-Root).
  • Exporter-Konfiguration:

    • creds_file_path: Vollständiger Pfad zur Datei für die Authentifizierung bei der Aufnahme:
      • Linux: /etc/bindplane-agent/ingestion-auth.json
      • Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
    • customer_id: Kunden-ID, die aus der Google SecOps Console kopiert wurde
    • endpoint: Regionale Endpunkt-URL:
      • USA: malachiteingestion-pa.googleapis.com
      • Europa: europe-malachiteingestion-pa.googleapis.com
      • Asien: asia-southeast1-malachiteingestion-pa.googleapis.com
      • Eine vollständige Liste finden Sie unter Regionale Endpunkte.

Konfigurationsdatei speichern

  • Speichern Sie die Datei nach der Bearbeitung:
    • Linux: Drücken Sie Ctrl+O, dann Enter und dann Ctrl+X.
    • Windows: Klicken Sie auf Datei > Speichern.

Bindplane-Agent neu starten, um die Änderungen zu übernehmen

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

    sudo systemctl restart observiq-otel-collector
    
    1. Prüfen Sie, ob der Dienst ausgeführt wird:

      sudo systemctl status observiq-otel-collector
      
    2. Logs auf Fehler prüfen:

      sudo journalctl -u observiq-otel-collector -f
      
  • Wählen Sie eine der folgenden Optionen aus, um den Bindplane-Agent unter Windows neu zu starten:

    • Eingabeaufforderung oder PowerShell als Administrator:

      net stop observiq-otel-collector && net start observiq-otel-collector
      
    • Services-Konsole:

      1. Drücken Sie Win+R, geben Sie services.msc ein und drücken Sie die Eingabetaste.
      2. Suchen Sie nach observIQ OpenTelemetry Collector.
      3. Klicken Sie mit der rechten Maustaste und wählen Sie Neu starten aus.
      4. Prüfen Sie, ob der Dienst ausgeführt wird:

        sc query observiq-otel-collector
        
      5. Logs auf Fehler prüfen:

        type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
        

NGINX so konfigurieren, dass Logs 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. Starten Sie 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 INFORMATIONAL 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 In einen Zeitstempel im Format UNIX konvertiert. Nanosekunden werden aus dem ursprünglichen Logeintrag 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 nach dem Entfernen von umgekehrten Schrägstrichen und Anführungszeichen
hostname principal.asset.hostname ODER principal.asset.ip Wenn es sich um eine IP-Adresse handelt, die principal.asset.ip zugeordnet ist. Andernfalls wird 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 konvertiert
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 IPs extrahiert wurden
target_path target.url Direkt zugeordnet
time metadata.event_timestamp Geparsed, um den Zeitstempel im Format dd/MMM/yyyy:HH:mm:ss Z zu extrahieren
user_agent network.http.user_agent Direkt zugeordnet, wenn nicht leer oder -
metadata.event_type Anfangs auf GENERIC_EVENT festgelegt, dann möglicherweise basierend auf anderen Feldern wie terminal und protocol überschrieben. Der Standardwert ist USER_UNCATEGORIZED, wenn das Haupt-Grok-Muster nicht übereinstimmt. Wird auf NETWORK_HTTP gesetzt, wenn protocol HTTP ist und target_ip vorhanden ist, und auf STATUS_UPDATE, wenn protocol HTTP ist, aber target_ip 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 gleich 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. Wird auf GCP.GCE:0002 gesetzt, wenn das Haupt-Grok-Muster nicht übereinstimmt.
extensions.auth.type Wird auf MACHINE gesetzt, wenn terminal gleich sshd oder ssh ist.

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