NGINX-Protokolle erfassen
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
- Melden Sie sich in der Google SecOps Console an.
- Gehen Sie zu SIEM-Einstellungen > Erfassungsagenten.
- 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
- Melden Sie sich in der Google SecOps Console an.
- Gehen Sie zu SIEM-Einstellungen > Profil.
- Kopieren und speichern Sie die Kundennummer aus dem Bereich Organisationsdetails.
Bindplane-Agent installieren
Windows-Installation
- Öffnen Sie die Eingabeaufforderung oder die PowerShell als Administrator.
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
- Öffnen Sie ein Terminal mit Root- oder Sudo-Berechtigungen.
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
- Weitere Installationsoptionen finden Sie in diesem Installationsleitfaden.
Bindplane-Agent so konfigurieren, dass er Syslog-Daten aufnimmt und an Google SecOps sendet
Rufen Sie die Konfigurationsdatei auf:
- Suchen Sie die Datei
config.yaml
. Normalerweise befindet es sich unter Linux im Verzeichnis/etc/bindplane-agent/
oder unter Windows im Installationsverzeichnis. - Öffnen Sie die Datei mit einem Texteditor, z. B.
nano
,vi
oder Notepad.
- Suchen Sie die Datei
Bearbeiten Sie die Datei
config.yaml
so: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
Ersetzen Sie den Port und die IP-Adresse nach Bedarf in Ihrer Infrastruktur.
Ersetzen Sie
<customer_id>
durch die tatsächliche Kundennummer.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
- Normalerweise werden NGINX-Protokolle hier gespeichert:
- Zugriffslogs:
/var/log/nginx/access.log
- Fehlerprotokolle:
/var/log/nginx/error.log
- Zugriffslogs:
- Greifen Sie mit Administratoranmeldedaten auf den NGINX-Host zu.
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
Öffnen Sie die NGINX-Konfigurationsdatei (z. B.
/etc/nginx/nginx.conf
):sudo vi /etc/nginx/nginx.conf
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; }
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