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-Nachrichten für HTTP-Zugriffsereignisse, Fehlerereignisse, Authentifizierungsaktivitäten und Prozessinformationen generiert. Der Parser extrahiert Felder aus mehreren Logformaten (Syslog, JSON, Zugriffslogs) 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

Google SecOps-Anmeldedaten für den Bindplane-Agenten abrufen

Wählen Sie eine der folgenden Methoden aus, um den Bindplane-Agent bei Google SecOps zu authentifizieren:

  • Neue Bereitstellungen: Verwenden Sie die Chronicle API (Option 1).
  • Alte Bereitstellungen: Verwenden Sie die Datei für die Authentifizierung bei der Aufnahme (Option 2) weiterhin, bis die Ingestion API am 20. Juli 2027 eingestellt wird.
  1. Melden Sie sich in der Google Cloud Console an und wählen Sie das Google Cloud -Projekt aus, das mit Ihrer Google SecOps-Instanz verknüpft ist.
  2. Rufen Sie IAM & Verwaltung > Dienstkonten auf.
  3. Klicken Sie auf Dienstkonto erstellen.
  4. Geben Sie die folgenden Konfigurationsdetails an:
    • Name des Dienstkontos: Geben Sie einen Namen für das Konto ein, z. B. bindplane-ingest.
    • Dienstkontobeschreibung: Geben Sie eine Beschreibung ein (z. B. Bindplane agent log ingestion).
  5. Klicken Sie auf Erstellen und fortfahren.
  6. Klicken Sie im Abschnitt Diesem Dienstkonto Zugriff auf das Projekt erteilen auf Rolle auswählen und wählen Sie Chronicle Editor aus.
  7. Klicken Sie auf Weiter und dann auf Fertig.
  8. Klicken Sie auf das erstellte Dienstkonto und rufen Sie dann den Tab Schlüssel auf.
  9. Klicken Sie auf Schlüssel hinzufügen > Neuen Schlüssel erstellen.
  10. Wählen Sie JSON aus und klicken Sie auf Erstellen. Die Schlüsseldatei wird auf Ihren Computer heruntergeladen.
  11. Speichern Sie die Schlüsseldatei als ingestion-auth.json im Bindplane-Collector-Verzeichnis (/opt/observiq-otel-collector/ingestion-auth.json unter Linux oder C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json unter Windows) oder aktualisieren Sie creds_file_path in config.yaml, sodass der Pfad mit dem Pfad übereinstimmt, unter dem Sie die Datei speichern.
  12. Rufen Sie IAM und Verwaltung > Einstellungen auf und kopieren Sie die Projektnummer. Sie benötigen sie für die Exporter-Konfiguration.

Option 2: Authentifizierungsdatei für die Aufnahme herunterladen (Legacy)

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

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 Kundennummer aus dem Bereich Organization Details (Organisationsdetails).

Bindplane-Agent installieren

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

Windows-Installation

  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. Warte, bis die Installation abgeschlossen ist.

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

    sc query observiq-otel-collector
    

    Der Dienst sollte als RUNNING 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. Warte, bis die Installation abgeschlossen ist.

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

    sudo systemctl status observiq-otel-collector
    

    Der Dienst sollte als active (running) angezeigt werden.

Zusätzliche Installationsressourcen

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

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:
        protocol: https
        # Region of your instance, for example us, europe, asia-southeast1
        location: <LOCATION>
        # Project number of the Google Cloud project linked to the instance
        project: '<PROJECT_NUMBER>'
        compression: gzip
        creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json'
        customer_id: '<customer_id>'
        endpoint: chronicle.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 dem gelauscht werden soll:
      • 0.0.0.0, um auf allen Schnittstellen zuzuhören (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 JSON-Schlüsseldatei des Dienstkontos (Option 1):
      • Linux: /opt/observiq-otel-collector/ingestion-auth.json
      • Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
    • customer_id: Die Kundennummer, die aus der Google SecOps Console kopiert wurde
    • location: Ersetzen Sie <LOCATION> durch die Region Ihrer Google SecOps-Instanz (z. B. us, europe oder asia-southeast1). Der Exporter stellt diesem Wert chronicle.googleapis.com voran. Eine vollständige Liste finden Sie unter Regionale Endpunkte.
    • project: Ersetzen Sie <PROJECT_NUMBER> durch die Projektnummer aus IAM & Verwaltung > Einstellungen.
    • endpoint: Behalten Sie die Einstellung chronicle.googleapis.com bei.

Legacy-Ingestion-API-Exporter

  • Wenn Sie die Authentifizierungsdatei für die Datenaufnahme aus Option 2 verwenden, ersetzen Sie den Block exporters durch Folgendes. Legen Sie creds_file_path auf den Pfad zur Datei für die Authentifizierung bei der Aufnahme fest. Wenn sich Ihre Instanz außerhalb der USA befindet, ersetzen Sie malachiteingestion-pa.googleapis.com durch Ihren regionalen Endpunkt (z. B. europe-malachiteingestion-pa.googleapis.com).

    exporters:
      chronicle/nginx:
        compression: gzip
        creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json'
        customer_id: '<customer_id>'
        endpoint: malachiteingestion-pa.googleapis.com
        log_type: NGINX
        raw_log_field: body
    

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.

Starten Sie den Bindplane-Agent neu, um die Änderungen zu übernehmen.

  • Führen Sie den folgenden Befehl aus, um den Bindplane-Agenten 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. Prüfen Sie die Logs auf Fehler:

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

    • Eingabeaufforderung oder PowerShell als Administrator:

      net stop observiq-otel-collector && net start observiq-otel-collector
      
    • Dienstkonsole:

      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. Rechtsklicken Sie 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 für die Weiterleitung von Logs an Bindplane konfigurieren

  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, falls 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, wird sie principal.asset.ip zugeordnet. Andernfalls wird sie 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 HTTP entspricht
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 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 IP-Adressen extrahiert wurden
target_path target.url Direkt zugeordnet
time metadata.event_timestamp Wird geparst, 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 Wird anfänglich auf GENERIC_EVENT gesetzt und dann möglicherweise basierend auf anderen Feldern wie terminal und protocol überschrieben. Wenn das Haupt-Grok-Muster nicht übereinstimmt, wird standardmäßig USER_UNCATEGORIZED verwendet. 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 wenn 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.
log_hostname event.idm.read_only_udm.principal.asset.hostname Aus Änderungsprotokoll zugeordnet
ip_part event.idm.read_only_udm.intermediary.ip Aus Änderungsprotokoll zugeordnet
domain_part event.idm.read_only_udm.intermediary.administrative_domain Aus Änderungsprotokoll zugeordnet
location_part event.idm.read_only_udm.intermediary.location.name Aus Änderungsprotokoll zugeordnet
labels.compute_googleapis_com/resource_name event.idm.read_only_udm.target.hostname Aus Änderungsprotokoll zugeordnet
resource.labels.instance_id event.idm.read_only_udm.target.resource.product_object_id Aus Änderungsprotokoll zugeordnet
resource.labels.project_id event.idm.read_only_udm.target.resource_ancestors.name Aus Änderungsprotokoll zugeordnet
resource.labels.zone event.idm.read_only_udm.target.resource.attribute.cloud.availability_zone Aus Änderungsprotokoll zugeordnet
resource.type event.idm.read_only_udm.target.resource.resource_type Aus Änderungsprotokoll zugeordnet
insertId event.idm.read_only_udm.metadata.product_log_id Aus Änderungsprotokoll zugeordnet
jsonPayload.latency event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
remoteIp event.idm.read_only_udm.target.ip Aus Änderungsprotokoll zugeordnet
jsonPayload.requestMethod event.idm.read_only_udm.network.http.method Aus Änderungsprotokoll zugeordnet
jsonPayload.requestSize event.idm.read_only_udm.network.sent_bytes Aus Änderungsprotokoll zugeordnet
jsonPayload.requestUrl event.idm.read_only_udm.network.http.referral_url Aus Änderungsprotokoll zugeordnet
jsonPayload.responseSize event.idm.read_only_udm.network.received_bytes Aus Änderungsprotokoll zugeordnet
jsonPayload.serverIp event.idm.read_only_udm.target.ip Aus Änderungsprotokoll zugeordnet
jsonPayload.status event.idm.read_only_udm.network.http.response_code Aus Änderungsprotokoll zugeordnet
jsonPayload.userAgent event.idm.read_only_udm.network.http.user_agent Aus Änderungsprotokoll zugeordnet
jsonPayload.userAgent event.idm.read_only_udm.network.http.parsed_user_agent Aus Änderungsprotokoll zugeordnet
labels event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
terminal event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
logName event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
resource.labels event.idm.read_only_udm.target.resource.attribute.labels Aus Änderungsprotokoll zugeordnet
resource.type event.idm.read_only_udm.target.resource.attribute.labels Aus Änderungsprotokoll zugeordnet
resource.name event.idm.read_only_udm.target.resource.name Aus Änderungsprotokoll zugeordnet
timestamp event.idm.read_only_udm.metadata.event_timestamp Aus Änderungsprotokoll zugeordnet
user_agent event.idm.read_only_udm.network.http.parsed_user_agent Aus Änderungsprotokoll zugeordnet

Änderungsprotokoll

Änderungsprotokoll für diesen Parser ansehen

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