Apache-Logs erfassen
In diesem Dokument wird beschrieben, wie Sie Apache-Logs mit Bindplane in Google Security Operations aufnehmen. Der Parsercode versucht zuerst, die Roh-Lognachricht als JSON zu parsen. Andernfalls werden Felder anhand gängiger Apache-Logformate mithilfe von regulären Ausdrücken (grok
-Mustern) aus der Nachricht extrahiert.
Hinweise
- Sie benötigen eine Google SecOps-Instanz.
- Sie müssen Windows 2016 oder höher oder einen Linux-Host mit
systemd
verwenden. - Wenn die Ausführung hinter einem Proxy erfolgt, müssen die Firewallports geöffnet sein.
- Sie benötigen erhöhte Zugriffsrechte auf eine Apache-Instanz.
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: 'APACHE' 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
Syslog in Apache konfigurieren
- Melden Sie sich über SSH auf dem Ubuntu-Server an.
Erstellen Sie unter
/etc/rsyslog.d/
eine Datei mit dem Namen02-apache2.conf
:vim /etc/rsyslog.d/02-apache2.conf
Fügen Sie den folgenden Code in die Datei ein:
module(load="imfile" PollingInterval="10" statefile.directory="/var/spool/rsyslog") input(type="imfile" File="/var/log/apache2/access.log" Tag="http_access" Severity="info" Facility="local6") Local6.info @<bindplane-agnet-ip>:<vindplane-agent-port> module(load="imfile" PollingInterval="10" statefile.directory="/var/spool/rsyslog") input(type="imfile" File="/var/log/apache2/error.log" Tag="http_error"
- Ersetzen Sie
bindplane-agent-ip>
undbindplane-agent-port
durch die IP-Adresse und den Port, die für den Bindplane-Agenten konfiguriert sind. - Wenn Sie das TCP-Protokoll verwenden, hängen Sie der Hostzeile ein zusätzliches
@
an, sodass sie so aussieht:@@<bindplane-agnet-ip>:<vindplane-agent-port>
.
- Ersetzen Sie
Starten Sie die RSyslog-Dienste neu:
sudo service rsyslog restart
UDM-Zuordnungstabelle
Logfeld | UDM-Zuordnung | Logik |
---|---|---|
Byte | network.received_bytes | Vom Client empfangene Bytes. |
Byte | network.sent_bytes | An den Client gesendete Bytes. |
bytes_out | network.sent_bytes | An den Client gesendete Bytes. |
bytes_received | network.received_bytes | Vom Client empfangene Bytes. |
Inhalt | network.http.method | HTTP-Methode, die aus dem Feld „Inhalt“ extrahiert wurde. |
Inhalt | target.url | Ziel-URL, die aus dem Feld „Inhalt“ extrahiert wurde. |
Keks | additional.fields.value.string_value | Wert des Felds „cookie“. |
dest_ip | target.ip | IP-Adresse des Ziels. |
dest_name | target.hostname | Hostname des Ziels. |
dest_port | target.port | Port des Ziels. |
description | metadata.description | Beschreibung des Ereignisses. |
duration_microseconds | additional.fields.value.string_value | Wert des Felds „duration_microseconds“. |
file_full_path | target.file.full_path | Vollständiger Pfad der Zieldatei. |
Hostname | target.hostname | Hostname des Ziels. |
http_content_type | additional.fields.value.string_value | Wert des Felds „http_content_type“. |
http_host | principal.hostname | Hostname des Hauptkontos. |
http_method | network.http.method | HTTP-Methode. |
http_referrer | network.http.referral_url | HTTP-Verweis-URL. |
http_user_agent | network.http.user_agent | HTTP-User-Agent. |
ID | metadata.id | ID des Ereignisses. |
insertId | metadata.product_log_id | Produktprotokoll-ID. |
ip | principal.ip | IP-Adresse des Hauptkontos. |
jsonPayload.cIP | target.ip | IP-Adresse des Ziels. |
jsonPayload.cPort | target.port | Port des Ziels. |
jsonPayload.csBytes | network.sent_bytes | An den Client gesendete Bytes. |
jsonPayload.csMethod | network.http.method | HTTP-Methode. |
jsonPayload.csMimeType | target.file.mime_type | MIME-Typ der Zieldatei. |
jsonPayload.csReferer | network.http.referral_url | HTTP-Verweis-URL. |
jsonPayload.csURL | target.url | Ziel-URL |
jsonPayload.csUserAgent | network.http.user_agent | HTTP-User-Agent. |
jsonPayload.sHierarchy | additional.fields.value.string_value | Wert des Felds „sHierarchy“. |
jsonPayload.sHostname | principal.hostname | Hostname des Hauptkontos. |
jsonPayload.sIP | principal.ip | IP-Adresse des Hauptkontos. |
jsonPayload.scBytes | network.received_bytes | Vom Client empfangene Bytes. |
jsonPayload.scHTTPStatus | network.http.response_code | HTTP-Antwortcode. |
jsonPayload.scResultCode | additional.fields.value.string_value | Wert des Felds „scResultCode“. |
LastStatus | network.http.response_code | HTTP-Antwortcode. |
log_level | security_result.severity | Schwere des Sicherheitsergebnisses. |
logName | security_result.category_details | Kategoriedetails des Sicherheitsergebnisses. |
Methode | network.http.method | HTTP-Methode. |
pid | principal.process.pid | Prozess-ID des Hauptkontos. |
Port | target.port | Port des Ziels. |
Proto | network.application_protocol | Anwendungsprotokoll. |
Referrer | network.http.referral_url | HTTP-Verweis-URL. |
RemoteHost | principal.ip | IP-Adresse des Hauptkontos. |
RemoteUser | principal.user.userid | Nutzer-ID des Hauptkontos. |
resource.labels.instance_id | target.resource.product_object_id | Die Produktobjekt-ID der Zielressource. |
resource.labels.project_id | target.resource.attribute.labels.value | Wert des Labels „project_id“. |
resource.labels.zone | target.resource.attribute.cloud.availability_zone | Verfügbarkeitszone der Zielressource. |
resource.type | target.resource.resource_type | Ressourcentyp des Ziels. |
Antwort | network.http.response_code | HTTP-Antwortcode. |
SizeBytes | network.received_bytes | Vom Client empfangene Bytes. |
src_ip | principal.ip | IP-Adresse des Hauptkontos. |
src_port | principal.port | Port des Hauptkontos. |
ssl_cipher | network.tls.cipher | TLS-Chiffre. |
ssl_version | network.tls.version_protocol | TLS-Version des Protokolls. |
Status | network.http.response_code | HTTP-Antwortcode. |
Ziel | target.url | Ziel-URL |
target_ip | target.ip | IP-Adresse des Ziels. |
target_port | target.port | Port des Ziels. |
Zeit | metadata.event_timestamp | Zeitstempel des Ereignisses. |
uri_path | target.process.file.full_path | Vollständiger Pfad der Zieldatei. |
Nutzer | principal.user.userid | Nutzer-ID des Hauptkontos. |
useragent | network.http.user_agent | HTTP-User-Agent. |
version_protocol | network.tls.version_protocol | TLS-Version des Protokolls. |
Workername | principal.hostname | Hostname des Hauptkontos. |
x_forwarded_for | Wert des Headers „X-Forwarded-For“. | |
metadata.log_type | Der Wert ist im Parsercode auf „APACHE“ festgelegt. | |
metadata.product_name | Der Wert wird im Parsercode auf „Apache Web Server“ festgelegt. | |
metadata.vendor_name | Der Wert wird im Parsercode auf „Apache“ festgelegt. | |
metadata.event_type | Der Wert wird anhand der Präsenz von Informationen zum Haupt- und Zielkonto bestimmt. Wenn sowohl „principal“ als auch „target“ vorhanden sind, wird der Ereignistyp auf „NETWORK_HTTP“ festgelegt. Wenn nur „principal“ vorhanden ist, wird der Ereignistyp auf „STATUS_UPDATE“ festgelegt. Andernfalls wird er auf „GENERIC_EVENT“ gesetzt. | |
additional.fields.key | Der Schlüssel wird im Parsercode basierend auf dem Feld auf „keep_alive“, „duration_microseconds“, „cookie“, „http_content_type“, „sHierarchy“ oder „scResultCode“ festgelegt. | |
target.port | Wenn das Feld „proto“ „HTTP“ lautet, wird der Port auf 80 gesetzt. Wenn das Feld „proto“ „HTTPS“ enthält, wird der Port auf 443 festgelegt. Wenn das Feld „proto“ „FTP“ enthält, wird der Port auf 21 festgelegt. | |
target.resource.attribute.labels.key | Der Schlüssel ist im Parsercode auf „project_id“ festgelegt. |
Änderungen
2025-01-09
Optimierung:
- Es wurde ein neues Grok-Muster hinzugefügt, um das neue Protokollformat zu parsen.
- „user_location“ wurde in „principal.location.country_or_region“ umgewandelt.
- „proto“, „proto_version“, „uri_path“ und „uri_query“ wurden in „additional.fields“ zugeordnet.
2024-12-19
Optimierung:
- Es wurde ein Grok-Muster hinzugefügt, um die nicht geparsten Protokolle zu analysieren.
2024-09-10
Optimierung:
- Unterstützung für das Parsen nicht geparster Protokolle hinzugefügt.
2024-08-05
Optimierung:
- Es wurde ein Grok-Muster hinzugefügt, um das Feld „jsonPayload.message“ in „additional.fields“ zu parsen.
- „ip_msg“ wurde „principal.ip“ und „principal.asset.ip“ zugeordnet.
- „msg_method“ wurde „network.http.method“ zugeordnet.
- „response_code“ wurde in „network.http.response_code“ geändert.
- „useragentvalue“ wurde „network.http.user_agent“ zugeordnet.
2024-06-11
Optimierung:
- Es wurde ein Grok-Muster hinzugefügt, um das neue Muster von SYSLOG-Format-Protokollen zu parsen.
2024-01-25
Optimierung:
- Es wurde ein neues Grok-Muster hinzugefügt, um syslog-Protokolle zu parsen, die das Symbol „+“ enthalten.
2024-01-25
Optimierung:
- Es wurde ein neues Grok-Muster hinzugefügt, um syslog-Protokolle zu parsen, die das Symbol „+“ enthalten.
2023-12-21
Optimierung:
- JSON-Logs werden nicht mehr geparst.
- „src_port“ wurde zu „principal.port“ zugeordnet.
- „x_forwarded_for“ wurde auf „principal.ip“ zugeordnet.
- „keep_alive“, „duration_microseconds“, „cookie“ und „http_content_type“ wurden zu „additional.fields“ zugeordnet.
- „user“ wurde „principal.user.userid“ zugeordnet.
- „http_host“ wurde „principal.hostname“ zugeordnet.
- „file_full_path“ wurde mit „target.file.full_path“ verknüpft.
- „ssl_version“ wurde in „network.tls.version_protocol“ geändert.
- „ssl_cipher“ wurde „network.tls.cipher“ zugeordnet.
- „uri_path“ wurde in „target.process.file.full_path“ zugeordnet.
- „http_referrer“ wurde „network.http.referral_url“ zugeordnet.
- „http_user_agent“ wurde „network.http.user_agent“ zugeordnet.
- „http_method“ wurde in „network.http.method“ geändert.
- „protocol“ wurde in „network.application_protocol“ geändert.
- „dest_port“ wurde „target.port“ zugeordnet.
- „dest_name“ wurde „target.hostname“ zugeordnet.
- „bytes_out“ wurde „network.sent.bytes“ zugeordnet.
2023-07-31
Optimierung:
- Das Grok-Muster wurde so geändert, dass Bindestrich („-“) verarbeitet wird, wenn keine Bytes verfügbar sind.
2023-06-05
Optimierung:
- „Inhalt“ wurde auf „target.url“, „network.http.method“ und „network.tls.version_protocol“ zugeordnet.
- „LastStatus“ wurde mit „network.http.response_code“ verknüpft.
- „SizeBytes“ wurde in „network.received_bytes“ geändert.
- „Workername“ wurde „principal.hostname“ zugeordnet.
- „Port“ wurde „target.port“ zugeordnet.
- „ID“ wurde mit „metadata.id“ verknüpft.
- „XForwardedForIP“ und „RemoteHost“ wurden „principal.ip“ zugeordnet.
- „Remoteuser“ wurde „principal.user.userid“ zugeordnet.
- Das Grok-Muster wurde geändert, um das falsche Parsen von Protokollen zu unterstützen.
2023-02-20
Optimierung:
- Das Grok-Muster wurde geändert, um das falsche Parsen von Protokollen zu unterstützen.
- „user_agent“ in „network.http.parsed_user_agent“ umgewandelt.
2022-09-21
Optimierung:
- Migration zum Standardparser.
2022-09-07
Optimierung:
- Grok-Muster zum Parsen von Protokollen im JSON- und Syslog-Format hinzugefügt.
- Die Felder „host.name“ und „hostname“ wurden auf „target.hostname“ zugeordnet.
- Das Feld „log.file.path“ wurde „principal.process.file.full_path“ zugeordnet.
- Das Feld „mac“ wurde „principal.mac“ zugeordnet.
- Das Feld „ip“ wurde „principal.asset.ip“ zugeordnet.
- Das Feld „os.version“ wurde „principal.platform_version“ zugeordnet.
- Das Feld „os.kernel“ wurde „principal.platform_patch_level“ zugeordnet.
- Das Feld „os.platform“ wurde in „principal.platform“ umgewandelt.
- Das Feld „architecture“ wurde „principal.asset.hardware“ zugeordnet.
- Das Feld „id“ wurde „principal.asset.asset_id“ zugeordnet.
2022-05-12
Optimierung:
- Grok-Muster für eindeutige nicht analysierte Protokolle hinzugefügt
- Bedingte Prüfungen für „network.http.user_agent“ und „network.http.referral_url“ hinzugefügt.
- Unterstützung für Proxy-Logs von Apache Traffic Server (ATS) hinzugefügt.
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten