OPNsense-Firewall-Logs erfassen

Unterstützt in:

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

  1. Melden Sie sich in der Google SecOps Console an.
  2. Gehen Sie zu SIEM-Einstellungen > Erfassungsagenten.
  3. Lade die Datei zur Authentifizierung der Datenaufnahme herunter.

Google SecOps-Kundennummer abrufen

  1. Melden Sie sich in der Google SecOps Console an.
  2. Gehen Sie zu SIEM-Einstellungen > Profile.
  3. Kopieren und speichern Sie die Kundennummer aus dem Bereich Organisationsdetails.

BindPlane-Agent installieren

  1. 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
  2. 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
  3. Weitere Installationsoptionen finden Sie in diesem Installationsleitfaden.

BindPlane-Agent so konfigurieren, dass er Syslog-Protokolle aufnimmt und an Google SecOps sendet

  1. Rufen Sie den Computer auf, auf dem BindPlane installiert ist.
  2. Bearbeiten Sie die Datei config.yamlso:

    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
    
  3. Starten Sie den BindPlane-Agent mit dem folgenden Befehl neu, um die Änderungen anzuwenden: sudo systemctl bindplane restart

Syslog-Serverkonfiguration zu OPNsense hinzufügen

  1. Melden Sie sich in der OPNsense-Weboberfläche an.
  2. Gehen Sie zu System > Einstellungen > Protokollierung.
  3. Aktivieren Sie im Bereich Remote-Logging die Option Protokolle an Remote-Syslog-Server senden.
  4. 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).
  5. Wählen Sie Local0 als Syslog-Einrichtung aus.
  6. Legen Sie die Syslog-Ebene auf Benachrichtigung fest.

  7. 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.