NGINX-Logs erfassen

Unterstützt in:

Dieser NGINX-Parser verarbeitet Logs im JSON- und Syslog-Format. Es extrahiert Felder aus verschiedenen Logformaten und normalisiert sie in das UDM-Format. Der Parser reichert das Ereignis mit Metadaten für die Serververwaltung und Netzwerkaktivitäten an, einschließlich Nutzeranmeldungen und HTTP-Anfragen. Außerdem wird die Logik für SSH-Ereignisse verarbeitet und UDM-Felder werden basierend auf extrahierten Daten ausgefüllt.

Hinweise

Prüfen Sie, ob die folgenden Voraussetzungen erfüllt sind:

  • Google SecOps-Instanz
  • NGINX wird ausgeführt und generiert Logs
  • Root-Zugriff auf den NGINX-Hostcomputer

Authentifizierungsdatei für die Aufnahme in Google SecOps abrufen

  1. Melden Sie sich in der Google SecOps-Konsole an.
  2. Rufen Sie SIEM-Einstellungen > Collection Agents auf.
  3. Laden Sie die Authentifizierungsdatei für die Aufnahme 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-Konsole an.
  2. Rufen Sie die SIEM-Einstellungen > „Profil“ auf.
  3. Kopieren und speichern Sie die Kunden-ID aus dem Bereich Organisationsdetails.

BindPlane-Agent installieren

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
    

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
    

Zusätzliche Installationsressourcen

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

  1. Greifen Sie auf die Konfigurationsdatei zu:

    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 Kunden-ID.

  5. Aktualisieren Sie /path/to/ingestion-authentication-file.json auf den Pfad, in dem die Authentifizierungsdatei im Abschnitt Google SecOps-Aufnahmeauthentifizierungsdatei abrufen gespeichert wurde.

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 bindplane-agent
    
  • Wenn Sie den Bindplane-Agent unter Windows neu starten möchten, können Sie entweder die Konsole Dienste verwenden oder den folgenden Befehl eingeben:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Speicherort von NGINX-Logdateien ermitteln

  1. NGINX-Logs werden normalerweise unter folgendem Pfad gespeichert:
    • Zugriffslogs: /var/log/nginx/access.log
    • Fehlerlogs: /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 Logs auf Ihrem NGINX-Host:

    sudo cat /etc/nginx/nginx.conf | grep 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 der ursprünglichen Log-Nachricht 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 Backslashes 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 Gepasst, 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 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.

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