OPNsense-Firewall-Logs erfassen

Unterstützt in:

Dieser Parser extrahiert Felder aus OPNsense-Firewall-Logs (Syslog- und CSV-Formate) und ordnet sie dem UDM zu. Es verwendet 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 und der Ereignistyp anhand der vorhandenen Informationen zu Haupt- und Zielobjekt bestimmt.

Hinweise

  • Prüfen Sie, ob Sie eine Google Security Operations-Instanz haben.
  • Prüfen Sie, ob Sie privilegierten Zugriff auf die OPNsense-Weboberfläche haben.

Authentifizierungsdatei für die Aufnahme in Google SecOps abrufen

  1. Melden Sie sich in der Google SecOps-Konsole an.
  2. Rufen Sie die SIEM-Einstellungen > Collection Agents auf.
  3. Laden Sie die Authentifizierungsdatei für die Aufnahme herunter.

Google SecOps-Kundennummer abrufen

  1. Melden Sie sich in der Google SecOps-Konsole an.
  2. Rufen Sie die SIEM-Einstellungen > Profil auf.
  3. Kopieren und speichern Sie die Kunden-ID aus dem Bereich Organisationsdetails.

BindPlane-Agent installieren

  1. Führen Sie für die Windows-Installation das folgende Skript 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 Skript 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 dieser Installationsanleitung.

Bindplane-Agent so konfigurieren, dass Syslog-Daten aufgenommen und an Google SecOps gesendet werden

  1. Greifen Sie auf den Computer zu, auf dem der BindPlane-Agent 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 neu, um die Änderungen zu übernehmen. Verwenden Sie dazu den folgenden Befehl: 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 Logs an Remote-Syslog-Server senden, indem Sie das Kästchen anklicken.
  4. Geben Sie im Feld Remote-Syslog-Server die IP-Adresse des Syslog-Servers ein, einschließlich des PORTS (z. B. 10.10.10.10:54525).
  5. Wählen Sie Local0 als Syslog-Einrichtung aus.
  6. Stellen Sie die Syslog-Ebene auf Alert (Warnung) ein.

  7. Klicken Sie auf Speichern, um die Änderungen zu übernehmen.

UDM-Zuordnungstabelle

Logfeld UDM-Zuordnung Logik
column1 security_result.rule_id Direkt aus column1 übernommen.
column10 additional.fields[].key: „tos“
additional.fields[].value.string_value: Wert von column10
Direkt zugeordnet aus column10, verschachtelt unter additional.fields mit dem Schlüssel „tos“.
column12 additional.fields[].key: „ttl“
additional.fields[].value.string_value: Wert von column12
Direkt aus column12 zugeordnet, unter additional.fields mit dem Schlüssel „ttl“ verschachtelt.
column13 additional.fields[].key: „Id“
additional.fields[].value.string_value: Wert von column13
Direkt aus column13 zugeordnet, unter additional.fields mit dem Schlüssel „Id“ verschachtelt.
column14 additional.fields[].key: „offset“
additional.fields[].value.string_value: Wert von column14
Direkt aus column14 zugeordnet, unter additional.fields mit dem Schlüssel „offset“ verschachtelt.
column15 additional.fields[].key: „flags“
additional.fields[].value.string_value: Wert von column15
Direkt aus column15 zugeordnet, unter additional.fields mit dem Schlüssel „flags“ verschachtelt.
column17 network.ip_protocol Direkt aus column17 zugeordnet, nachdem die Großschreibung konvertiert wurde.
column18 network.received_bytes Direkt aus column18 zugeordnet, nachdem sie in eine vorzeichenlose Ganzzahl konvertiert wurde.
column19 principal.ip Direkt aus column19 übernommen.
column20 target.ip Direkt aus column20 übernommen.
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 der Wert direkt aus column21 zugeordnet und in eine Ganzzahl konvertiert. Andernfalls wird der Wert „datalength“ mit grok extrahiert und mit dem Schlüssel „data_length“ in additional.fields eingefügt.
column22 target.port Direkt aus 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
Direkt aus column24 zugeordnet, wenn column17 TCP ist, andernfalls unter additional.fields mit dem Schlüssel „tcp_flags“ verschachtelt.
column29 additional.fields[].key: „tcp_options“
additional.fields[].value.string_value: Wert von column29
Direkt aus 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 zugeordnet aus column4, verschachtelt unter additional.fields mit dem Schlüssel „tracker“.
column5 additional.fields[].key: „interface“
additional.fields[].value.string_value: Wert von column5
Direkt aus column5 zugeordnet, unter additional.fields mit dem Schlüssel „interface“ verschachtelt.
column6 security_result.rule_type Direkt aus column6 übernommen.
column7 security_result.action Zugeordnet von column7. Wenn „block“, wird es in Großbuchstaben „BLOCK“ umgewandelt. Wenn „pass“, auf „ALLOW“ festlegen.
column8 network.direction Zugeordnet von column8. Wenn „in“, legen Sie den Wert auf „INBOUND“ fest. Wenn „out“, auf „OUTBOUND“ festlegen.
domain principal.administrative_domain Direkt aus dem von Grok extrahierten domain zugeordnet. Auf „NETWORK_CONNECTION“ festgelegt, wenn sowohl die Prinzipal- als auch die Ziel-IP-Adresse vorhanden sind, andernfalls „GENERIC_EVENT“. Fest codiert auf „OPNSENSE“. Fest codiert auf „OPNSENSE“.
message Verschiedene Felder Die Daten werden mit grok- und CSV-Filtern geparst, um verschiedene Felder zu extrahieren. In anderen Zeilen finden Sie spezifische Zuordnungen.
ts metadata.event_timestamp.seconds, timestamp.seconds Wird mit „grok“ aus dem Nachrichtenfeld geparst und dann in einen Zeitstempel konvertiert. Der Sekundenwert wird sowohl für metadata.event_timestamp.seconds als auch für timestamp.seconds verwendet.
application principal.application Direkt aus dem von Grok extrahierten application zugeordnet.

Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten