NGINX-Logs erfassen
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
- Melden Sie sich in der Google SecOps-Konsole an.
- Rufen Sie SIEM-Einstellungen > Collection Agents auf.
- 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
- Melden Sie sich in der Google SecOps-Konsole an.
- Rufen Sie die SIEM-Einstellungen > „Profil“ auf.
- Kopieren und speichern Sie die Kunden-ID aus dem Bereich Organisationsdetails.
BindPlane-Agent installieren
Fenstereinbau
- Öffnen Sie die Eingabeaufforderung oder 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
Zusätzliche Installationsressourcen
- Weitere Installationsoptionen finden Sie in diesem Installationsleitfaden.
BindPlane-Agent zum Erfassen von Syslog-Daten und Senden an Google SecOps konfigurieren
Greifen Sie auf die Konfigurationsdatei zu:
- 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 Kunden-ID.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
- NGINX-Logs werden normalerweise unter folgendem Pfad gespeichert:
- Zugriffslogs:
/var/log/nginx/access.log
- Fehlerlogs:
/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 Logs auf Ihrem NGINX-Host:
sudo cat /etc/nginx/nginx.conf | grep log
NGINX so konfigurieren, dass Logs 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; }
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