OPNsense-Firewall-Logs erfassen
Dieser Parser extrahiert Felder aus OPNsense-Firewallprotokollen (Syslog- und CSV-Formate) und ordnet sie dem UDM zu. Es verwendet das Grok- und CSV-Parsing für „filterlog“-Anwendungsprotokolle und verarbeitet verschiedene Protokollformate und Netzwerkprotokolle (TCP, UDP, ICMP usw.), um UDM-Felder wie „principal“, „target“, „network“ und „security_result“ zu füllen. Außerdem werden Metadaten wie Anbieter- und Produktname hinzugefügt. Der Ereignistyp wird anhand der Präsenz von Informationen zum Haupt- und Zielkonto bestimmt.
Hinweis
- Sie benötigen eine Google Security Operations-Instanz.
- Sie benötigen erhöhte Zugriffsrechte für die OPNsense-Weboberfläche.
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: testNamespace raw_log_field: body service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - tcplog exporters: - chronicle/chronicle_w_labels
Starten Sie den BindPlane-Agent mit dem folgenden Befehl neu, um die Änderungen anzuwenden:
sudo systemctl bindplane restart
Syslog-Serverkonfiguration zu OPNsense hinzufügen
- Melden Sie sich in der OPNsense-Weboberfläche an.
- Gehen Sie zu System > Einstellungen > Protokollierung.
- Aktivieren Sie im Bereich Remote-Logging die Option Protokolle an Remote-Syslog-Server senden.
- Geben Sie im Feld Remote Syslog Servers (Remote-Syslog-Server) die IP-Adresse des syslog-Servers einschließlich des PORTS ein (z. B. 10.10.10.10:54525).
- Wählen Sie Local0 als Syslog-Einrichtung aus.
Legen Sie die Syslog-Ebene auf Benachrichtigung fest.
Klicken Sie auf Speichern, um die Änderungen zu übernehmen.
UDM-Zuordnungstabelle
Logfeld | UDM-Zuordnung | Logik |
---|---|---|
column1 |
security_result.rule_id |
Direkt von column1 zugeordnet. |
column10 |
additional.fields[].key : „tos“additional.fields[].value.string_value : Wert von column10 |
Direkt von column10 zugeordnet, verschachtelt unter additional.fields mit dem Schlüssel „tos“. |
column12 |
additional.fields[].key : „ttl“additional.fields[].value.string_value : Wert von column12 |
Direkt von column12 zugeordnet, verschachtelt unter additional.fields mit dem Schlüssel „ttl“. |
column13 |
additional.fields[].key : „Id“additional.fields[].value.string_value : Wert von column13 |
Direkt von column13 zugeordnet, verschachtelt unter additional.fields mit dem Schlüssel „Id“. |
column14 |
additional.fields[].key : „offset“additional.fields[].value.string_value : Wert von column14 |
Direkt von column14 zugeordnet, verschachtelt unter additional.fields mit dem Schlüssel „offset“. |
column15 |
additional.fields[].key : „flags“additional.fields[].value.string_value : Wert von column15 |
Direkt von column15 zugeordnet, verschachtelt unter additional.fields mit dem Schlüssel „flags“. |
column17 |
network.ip_protocol |
Wird direkt von column17 nach Umwandlung in Großbuchstaben zugeordnet. |
column18 |
network.received_bytes |
Wird direkt von column18 zugeordnet, nachdem es in eine Ganzzahl ohne Vorzeichen umgewandelt wurde. |
column19 |
principal.ip |
Direkt von column19 zugeordnet. |
column20 |
target.ip |
Direkt von column20 zugeordnet. |
column21 |
principal.port (wenn column17 TCP oder UDP ist)additional.fields[].key : „data_length“additional.fields[].value.string_value : Extrahierter Wert (wenn column17 ICMP, GRE, ESP oder IGMP ist) |
Wenn column17 TCP/UDP ist, wird es direkt von column21 zugeordnet und in eine Ganzzahl umgewandelt. Andernfalls wird der Wert „datalength“ mithilfe von Grok extrahiert und unter dem Schlüssel „data_length“ in additional.fields platziert. |
column22 |
target.port |
Wird direkt von column22 zugeordnet, wenn column17 TCP oder UDP ist, und in eine Ganzzahl konvertiert. |
column24 |
additional.fields[].key : „tcp_flags“additional.fields[].value.string_value : Wert von column24 |
Wird direkt von column24 zugeordnet, wenn column17 TCP ist, verschachtelt unter additional.fields mit dem Schlüssel „tcp_flags“. |
column29 |
additional.fields[].key : „tcp_options“additional.fields[].value.string_value : Wert von column29 |
Wird direkt von column29 zugeordnet, wenn column17 TCP ist, verschachtelt unter additional.fields mit dem Schlüssel „tcp_options“. |
column4 |
additional.fields[].key : „tracker“additional.fields[].value.string_value : Wert von column4 |
Direkt von column4 zugeordnet, verschachtelt unter additional.fields mit dem Schlüssel „tracker“. |
column5 |
additional.fields[].key : „interface“additional.fields[].value.string_value : Wert von column5 |
Direkt von column5 zugeordnet, verschachtelt unter additional.fields mit dem Schlüssel „interface“. |
column6 |
security_result.rule_type |
Direkt von column6 zugeordnet. |
column7 |
security_result.action |
Zugewiesen von column7 . Wenn „block“ verwendet wird, wird es in Großbuchstaben umgewandelt: „BLOCK“. Wenn „pass“ (übergeben), legen Sie „ALLOW“ (Zulassen) fest. |
column8 |
network.direction |
Zugewiesen von column8 . Wenn „in“, legen Sie „INBOUND“ fest. Wenn „out“ (ausgehend), legen Sie „OUTBOUND“ fest. |
domain |
principal.administrative_domain |
Direkt aus der mit Grok extrahierten domain abgeleitet. Legen Sie „NETWORK_CONNECTION“ fest, wenn sowohl die Haupt- als auch die Ziel-IP-Adresse vorhanden sind, andernfalls „GENERIC_EVENT“. Hartcodiert auf „OPNSENSE“. Hartcodiert auf „OPNSENSE“. |
message |
Verschiedene Felder | Mit Grok- und CSV-Filtern geparst, um verschiedene Felder zu extrahieren. In anderen Zeilen finden Sie bestimmte Zuordnungen. |
ts |
metadata.event_timestamp.seconds , timestamp.seconds |
Wird mithilfe von Grok aus dem Nachrichtenfeld geparst und dann in einen Zeitstempel umgewandelt. Der Wert für „Sekunden“ wird sowohl für metadata.event_timestamp.seconds als auch für timestamp.seconds verwendet. |
application |
principal.application |
Direkt aus der mit Grok extrahierten application abgeleitet. |
Änderungen
2023-11-22
- Neu erstellter Parser.