NGINX-Protokolle erfassen
Dieser NGINX-Parser verarbeitet Protokolle 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.
Hinweis
- Sie benötigen eine Google Security Operations-Instanz.
- Prüfen Sie, ob NGINX ausgeführt wird und Protokolle generiert.
- Sie benötigen 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.
Google SecOps-Kundennummer abrufen
- Melden Sie sich in der Google SecOps Console an.
- Gehen Sie zu SIEM-Einstellungen > Profile.
- Kopieren und speichern Sie die Kundennummer aus dem Bereich Organisationsdetails.
BindPlane-Agent installieren
- Führen Sie für die Windows-Installation das folgende Script aus:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
- Führen Sie für die Linux-Installation das folgende Script aus:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
- Weitere Installationsoptionen finden Sie in diesem Installationsleitfaden.
BindPlane-Agent so konfigurieren, dass er Syslog-Protokolle aufnimmt und an Google SecOps sendet
- Rufen Sie den Computer auf, auf dem BindPlane installiert ist.
Bearbeiten Sie die Datei
config.yaml
so:receivers: tcplog: # Replace the below port <54525> and IP <0.0.0.0> with your specific values listen_address: "0.0.0.0:54525" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the creds location below according the placement of the credentials file you downloaded creds: '{ json file for creds }' # Replace <customer_id> below with your actual ID that you copied customer_id: <customer_id> endpoint: malachiteingestion-pa.googleapis.com # You can apply ingestion labels below as preferred ingestion_labels: log_type: SYSLOG namespace: auditd raw_log_field: body service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - tcplog exporters: - chronicle/chronicle_w_labels
Starten Sie den BindPlane-Agent neu, um die Änderungen anzuwenden:
sudo systemctl restart bindplane
Speicherort der NGINX-Logdateien ermitteln
NGINX-Logs werden hier gespeichert:
* Zugriffsprotokolle: /var/log/nginx/access.log
* Fehlerprotokolle: /var/log/nginx/error.log
1. Greifen Sie mit Administratoranmeldedaten auf den NGINX-Host zu.
1. Führen Sie den folgenden Befehl aus und suchen Sie auf Ihrem NGINX-Host nach den Pfaden zu den Protokolldateien:
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 auf „INFORMATIONSWEISEND“ 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 UNIX-Format in einen Zeitstempel umgewandelt. 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 Backslashes 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 |
Der Zeitstempel wird im Format „TT.MMM.JJJJ:HH:mm:ss Z“ geparst. |
user_agent |
network.http.user_agent |
Direkt zugeordnet, wenn nicht leer oder „-“ |
metadata.event_type |
Wird zuerst auf „GENERIC_EVENT“ gesetzt und dann möglicherweise basierend auf anderen Feldern wie terminal und protocol überschrieben. Standardmäßig wird „USER_UNCATEGORIZED“ verwendet, 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 diesen Wert auf „NGINX“ fest. | |
metadata.product_name |
Legen Sie diesen Wert auf „NGINX“ fest. | |
metadata.vendor_name |
Legen Sie diesen Wert auf „NGINX“ fest. | |
network.ip_protocol |
Legen Sie „TCP“ fest, wenn terminal „sshd“ oder „ssh“ ist oder das Haupt-Grok-Muster nicht übereinstimmt. |
|
principal.asset_id |
Legen Sie „GCP.GCE:0001“ fest, wenn terminal „sshd“ oder „ssh“ ist. Legen Sie „GCP.GCE:0002“ fest, wenn das Haupt-Grok-Muster nicht übereinstimmt. |
|
extensions.auth.type |
Wird auf „MACHINE“ gesetzt, wenn terminal „sshd“ oder „ssh“ ist |
Änderungen
2022-09-10
- Wir haben einen Standard-Parser erstellt und den kundenspezifischen Parser gelöscht.
- Erste Parserversion.