Google Security Operations-Forwarder für Linux

In diesem Dokument wird beschrieben, wie Sie den Forwarder unter Linux installieren und konfigurieren. Informationen zum Installieren des Forwarders unter Windows finden Sie unter Windows-Forwarder.

Mit einem Forwarder werden Logs von der Kundenumgebung an die Google Security Operations-Instanz gesendet. Dies wird verwendet, wenn die Kunden die Logs direkt an Google Security Operations senden und die Cloud-Buckets nicht zum Aufnehmen von Daten verwenden möchten oder wenn der Logtyp keine native Aufnahme über eine Drittanbieter-API hat. Der Forwarder kann als einsatzbereite Lösung verwendet werden, anstatt die Aufnahme-API manuell einzubinden.

Sie können den Forwarder auf einer Vielzahl von Linux-Distributionen installieren, einschließlich Debian, Ubuntu, Red Hat und Suse. Google Cloud stellt die Software mithilfe eines Docker-Containers bereit. Sie können den Docker-Container entweder auf einer physischen oder virtuellen Maschine ausführen und verwalten, auf der Linux ausgeführt wird.

Systemanforderungen

Im Folgenden finden Sie allgemeine Empfehlungen. Systemspezifische Empfehlungen erhalten Sie vom Support von Google Security Operations.

  • RAM: 1 GB für jeden erfassten Datentyp (Collector), den Google Security Operations für die Aufnahme akzeptiert. Wenn Sie beispielsweise vier verschiedene Collectors angegeben haben, benötigen Sie 4 GB RAM, um Daten für alle vier Collectors zu erfassen.

  • CPU: 2 CPUs reichen aus,um weniger als 10.000 Ereignisse pro Sekunde (EPS) (insgesamt für alle Datentypen) zu verarbeiten. Wenn Sie mehr als 10.000 EPS weiterleiten möchten, stellen Sie 4 bis 6 CPUs bereit.

  • Laufwerk: 100 MB Speicherplatz sind ausreichend, unabhängig davon, wie viele Daten der Google Security Operations-Forwarder verarbeitet. Wenn Sie zurückgestellte Nachrichten auf dem Laufwerk und nicht auf dem Arbeitsspeicher zwischenspeichern müssen, lesen Sie die Informationen unter Laufwerkzwischenspeicherung. Die Google Security Operations-Weiterleitung speichert den Zwischenspeicher standardmäßig im Arbeitsspeicher.

Google-IP-Adressbereiche

Möglicherweise müssen Sie den IP-Adressbereich öffnen, wenn Sie eine Forwarder-Konfiguration einrichten, z. B. beim Einrichten der Konfiguration für Ihre Firewall. Google kann keine spezifische Liste mit IP-Adressen zur Verfügung stellen. Sie können jedoch IP-Adressbereiche von Google abrufen.

Firewallkonfiguration prüfen

Firewalls oder authentifizierte Proxys, die sich zwischen dem Forwarder-Container von Google Security Operations und dem Internet befinden, erfordern Regeln, um den Zugriff auf die folgenden Hosts zu ermöglichen:

Verbindungstyp Ziel Port
TCP malachiteingestion-pa.googleapis.com 443
TCP asia-northeast1-malachiteingestion-pa.googleapis.com 443
TCP asia-south1-malachiteingestion-pa.googleapis.com 443
TCP asia-southeast1-malachiteingestion-pa.googleapis.com 443
TCP australia-southeast1-malachiteingestion-pa.googleapis.com 443
TCP europe-malachiteingestion-pa.googleapis.com 443
TCP europe-west2-malachiteingestion-pa.googleapis.com 443
TCP europe-west3-malachiteingestion-pa.googleapis.com 443
TCP europe-west6-malachiteingestion-pa.googleapis.com 443
TCP europe-west12-malachiteingestion-pa.googleapis.com 443
TCP me-central1-malachiteingestion-pa.googleapis.com 443
TCP me-central2-malachiteingestion-pa.googleapis.com 443
TCP me-west1-malachiteingestion-pa.googleapis.com 443
TCP northamerica-northeast2-malachiteingestion-pa.googleapis.com 443
TCP accounts.google.com 443
TCP gcr.io 443
TCP oauth2.googleapis.com 443
TCP storage.googleapis.com 443

Konfigurationsdateien anpassen

Google Cloud passt die Konfigurationsdateien mit spezifischen Metadaten an die Forwarder-Instanz an, wie im Ausgabebereich gezeigt. Sie können die Konfigurationsdatei entsprechend Ihren Anforderungen herunterladen und Informationen zu den Logtypen hinzufügen, die im Bereich für Collectors aufgenommen werden sollen. Weitere Informationen zu den Konfigurationseinstellungen finden Sie unter Konfigurationseinstellungen.

Linux-Forwarder konfigurieren

Informationen zum Konfigurieren des Linux-Forwarders über die UI finden Sie unter Forwarder-Konfigurationen über die Google SecOps-UI verwalten.

So konfigurieren Sie den Linux-Forwarder manuell:

  1. Erstellen Sie eine Kopie der Konfigurationsdateivorlage, die mit der Software bereitgestellt wird.

  2. Laden Sie die Konfigurationsdatei über die UI herunter.

  3. Speichern Sie die beiden Dateien im selben Verzeichnis. Verwenden Sie dabei die folgende Namenskonvention:

    FORWARDER_NAME.conf: In dieser Datei werden die Konfigurationseinstellungen für die Logaufnahme definiert.

    FORWARDER_NAME_auth.conf: Verwenden Sie diese Datei, um die Anmeldedaten für die Autorisierung zu definieren.

  4. Ändern Sie die Dateien so, dass sie die Konfiguration für Ihre Forwarder-Instanz enthalten. Verwenden Sie die in diesem Dokument bereitgestellten Beispiele als Referenz.

  5. Achten Sie darauf, dass für jede Eingabe in der Datei FORWARDER_NAME_auth.conf ein Eintrag vorhanden ist, auch wenn die Eingabe keine entsprechenden Authentifizierungsdetails enthält. Dies ist für die korrekte Zuordnung der Daten erforderlich.

Alle Änderungen, die an der Konfigurationsdatei vorgenommen werden, werden automatisch innerhalb von 5 Minuten vom Forwarder übernommen.

Beispielkonfiguration

Das folgende Codebeispiel zeigt das Format der Konfigurationsdateien für einen Forwarder. Ausführliche Informationen zu den Einstellungen für die einzelnen Arten von Aufnahmemechanismen wie Splunk oder Syslog finden Sie unter Daten erfassen.

Die Datei FORWARDER_NAME.conf

output:
  url: malachiteingestion-pa.googleapis.com:443
  identity:
    identity:
    collector_id: COLLECTOR_ID \
    customer_id: CUSTOMER_ID \

collectors:
  - syslog:
      common:
        enabled: true
        data_type: "WINDOWS_DHCP"
        data_hint:
        batch_n_seconds: 10
        batch_n_bytes: 1048576
      tcp_address: 0.0.0.0:10514
      udp_address: 0.0.0.0:10514
      connection_timeout_sec: 60
      tcp_buffer_size: 524288
  - syslog:
      common:
        enabled: true
        data_type: "WINDOWS_DNS"
        data_hint:
        batch_n_seconds: 10
        batch_n_bytes: 1048576
      tcp_address: 0.0.0.0:10515
      connection_timeout_sec: 60
      tcp_buffer_size: 524288

Die Datei FORWARDER_NAME_auth.conf

output:
  identity:
    secret_key: |
      {
        "type": "service_account",
        "project_id": "PROJECT_ID" \,
        "private_key_id": "PRIVATE_KEY_ID" \,
        "private_key": "-----BEGIN PRIVATE KEY-----\\"PRIVATE_KEY" \n-----END PRIVATE KEY-----\n",
        "client_email": "CLIENT_EMAIL" \,
        "client_id": "CLIENT_ID" \,
        "auth_uri": "https://accounts.google.com/o/oauth2/auth",
        "token_uri": "https://oauth2.googleapis.com/token",
        "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
        "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/example-account-1%40example-account.iam.gserviceaccount.com"
      }

collectors:
  - syslog:
  - syslog:
      certificate: "../forwarder/inputs/testdata/localhost.pem"
      certificate_key: "../forwarder/inputs/testdata/localhost.key"

In diesen beiden Dateisystemen können Sie Anmeldedaten zur Authentifizierung in einer separaten Datei speichern, um die Sicherheit zu verbessern. Sie können die Datei FORWARDER_NAME.conf in einem Repository zur Versionsverwaltung oder in einem beliebigen offenen Konfigurationsverwaltungssystem speichern. Sie können die Datei FORWARDER_NAME_auth.conf direkt in der physischen oder virtuellen Maschine speichern, auf der der Forwarder ausgeführt wird.

Beispielkonfiguration (einzelne Datei)

output:
  url: malachiteingestion-pa.googleapis.com:443
  identity:
    identity:
    collector_id: "COLLECTOR_ID" \
    customer_id: "CUSTOMER_ID" \
    secret_key: |
      {
        "type": "service_account",
        "project_id": "PROJECT_ID" \,
        "private_key_id": "PRIVATE_KEY_ID" \,
        "private_key": "-----BEGIN PRIVATE KEY-----\ "PRIVATE_KEY" \n-----END PRIVATE KEY-----\n",
        "client_email": "CLIENT_EMAIL" \,
        "client_id": "CLIENT_ID" \,
        "auth_uri": "https://accounts.google.com/o/oauth2/auth",
        "token_uri": "https://oauth2.googleapis.com/token",
        "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
        "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/malachite-test-1%40malachite-test.iam.gserviceaccount.com"
      }

collectors:
  - syslog:
      common:
        enabled: true
        data_type: "WINDOWS_DHCP"
        data_hint:
        batch_n_seconds: 10
        batch_n_bytes: 1048576
      tcp_address: 0.0.0.0:10514
      udp_address: 0.0.0.0:10514
      connection_timeout_sec: 60
      tcp_buffer_size: 524288
  - syslog:
      common:
        enabled: true
        data_type: "WINDOWS_DNS"
        data_hint:
        batch_n_seconds: 10
        batch_n_bytes: 1048576
      tcp_address: 0.0.0.0:10515
      connection_timeout_sec: 60
      certificate: "../forwarder/inputs/testdata/localhost.pem"
      certificate_key: "../forwarder/inputs/testdata/localhost.key"
      tcp_buffer_size: 524288

Wenn Sie nur eine Konfigurationsdatei verwenden und zu einem der beiden Dateisysteme wechseln möchten, gehen Sie so vor:

  1. Erstellen Sie eine Kopie Ihrer vorhandenen Konfiguration.
  2. Speichern Sie eine Datei als FORWARDER_NAME.conf-Datei und löschen Sie die Anmeldedaten für die Autorisierung aus der Datei.
  3. Speichern Sie die andere Datei als Datei FORWARDER_NAME_auth.conf und löschen Sie alle Nicht-Autorisierungsdaten aus der Datei. Verwenden Sie die in diesem Handbuch angegebenen Beispielkonfigurationsdateien als Referenz.
  4. Achten Sie darauf, die Namenskonvention und andere Richtlinien einzuhalten, die im Abschnitt Konfigurationsdateien anpassen aufgeführt sind.

Docker installieren

Die Installation von Docker hängt von der Hostumgebung ab. Sie können Docker auf verschiedenen Hostbetriebssystemen installieren. Google Cloud bietet eingeschränkte Dokumentationen, die Sie bei der Installation von Docker auf mehreren der gängigen Linux-Distributionen unterstützen. Docker ist jedoch eine Open-Source-Software und die gesamte erforderliche Dokumentation ist bereits verfügbar. Eine Anleitung zur Docker-Installation finden Sie in der Docker-Dokumentation.

Nach der Installation von Docker auf Ihrem System ähnelt der Forwarder-Installationsprozess jeder Art von Linux-Distribution.

Führen Sie den folgenden Befehl (erhöhte Berechtigungen) aus, um zu prüfen, ob Docker ordnungsgemäß auf Ihrem System installiert ist:

   docker ps
  

Die folgende Antwort zeigt an, dass Docker ordnungsgemäß installiert wurde:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

Nützliche Docker-Befehle

  • Mit dem folgenden Befehl können Sie zusätzliche Informationen zur Docker-Installation abrufen:

    docker info
    
  • Der Docker-Dienst kann standardmäßig deaktiviert werden. Prüfen Sie mit dem folgenden Befehl, ob sie deaktiviert ist:

    systemctl is-enabled docker
    
  • Führen Sie einen der folgenden Befehle aus, um den Docker-Dienst zu aktivieren und sofort zu starten:

    sudo systemctl enable --now docker
    
    sudo systemctl enable /usr/lib/systemd/system/docker.service
    

    Ausgabe:

    Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /lib/systemd/system/docker.service
    
  • Wenn Sie einen Forwarder starten, führen Sie den folgenden Befehl aus, um den Forwarder so einzustellen, dass er automatisch neu gestartet wird:

    sudo docker run --restart=always `IMAGE_NAME`
    

    IMAGE_NAME ist der Name des Forwarder-Images.

  • Führen Sie den folgenden Befehl aus, um den Status und die Details des Docker-Dienstes zu prüfen:

    sudo systemctl status docker
    

    Ausgabe:

    ● docker.service - Docker Application Container Engine
        Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
        Active: active (running) since Sat 2020-07-18 11:14:05 UTC; 15s ago
    TriggeredBy: ● docker.socket
          Docs: https://docs.docker.com
      Main PID: 263 (dockerd)
          Tasks: 20
        Memory: 100.4M
        CGroup: /system.slice/docker.service
                └─263 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
    Jul 18 11:14:05 swarm-kraken dockerd[263]: time="2020-07-18T11:14:05.713787002Z" level=info msg="API listen on /run/docker.sock"
    Jul 18 11:14:05 swarm-kraken systemd[1]: Started Docker Application Container Engine
    

    Bei Problemen mit Docker kann das Google Security Operations-Supportteam die Ausgabe dieses Befehls anfordern, um das Problem zu beheben.

Forwarder unter Linux installieren

In diesem Abschnitt wird beschrieben, wie Sie Google Security Operations Forwarder mithilfe eines Docker-Containers auf einem Linux-System installieren.

Schritt 1: Konfigurationsdateien für Weiterleitung herunterladen, übertragen und installieren

Google Security Operations stellt Forwarder-Konfigurationsdateien für Ihr Betriebssystem (Linux oder Windows) bereit. Sie können die Konfigurationsdatei entsprechend Ihren Anforderungen herunterladen. Nachdem Sie die folgenden Schritte ausgeführt haben, übertragen Sie die Konfigurationsdateien von Ihrem Laptop in das Forwarder-Verzeichnis /opt/chronicle/config im Basisverzeichnis des Nutzers.

  1. Stellen Sie über ein Terminal eine Verbindung zum Host des Linux-Forwarders her.

  2. Erstellen Sie einen neuen Nutzer auf dem Host des Linux-Forwarders.

      adduser USERNAME
      passwd USERNAME
      usermod -aG wheel USERNAME
    

  3. Wechseln Sie in das Basisverzeichnis des neuen Nutzers, der den Docker-Container ausführt.

  4. Erstellen Sie ein Verzeichnis, um die Konfigurationsdateien für die Weiterleitung von Google Security Operations zu speichern:

      mkdir /opt/chronicle/config
    

  5. Wechseln Sie das Verzeichnis.

      cd /opt/chronicle/config
    

  6. Prüfen Sie nach der Übertragung der Dateien, ob sich die Konfigurationsdateien im Verzeichnis „/opt/chronicle/config“ befinden:

      ls -l
    

Schritt 2: Forwarder im Docker-Container ausführen

Mit den folgenden Verfahren können Sie den Google Security Operations-Forwarder zum ersten Mal starten und ein Upgrade auf die neueste Version des Google Security Operations-Containers durchführen:

Die Optionen für --log-opt sind seit Docker 1.13 verfügbar. Diese Optionen begrenzen die Größe der Containerlogdateien und müssen verwendet werden, sofern Ihre Docker-Version sie unterstützt.

  1. Wenn Sie ein Upgrade ausführen, bereinigen Sie zuerst alle vorherigen Docker-Ausführungen. Im folgenden Beispiel lautet der Name des Docker-Containers cfps. Rufen Sie das neueste Docker-Image von Google Cloud mit dem Befehl docker pull ab, wie unten gezeigt.

    docker stop cfps
    
    docker rm cfps
    
  2. Rufen Sie das neueste Docker-Image von Google Cloud ab:

    docker pull gcr.io/chronicle-container/cf_production_stable
    
  3. Starten Sie den Google Security Operations-Forwarder über den Docker-Container:

    docker run \
    --detach \
    --name cfps \
    --restart=always \
    --log-opt max-size=100m \
    --log-opt max-file=10 \
    --net=host \
    -v /opt/chronicle/config:/opt/chronicle/external \
    gcr.io/chronicle-container/cf_production_stable
    

Forwarder-Logs ansehen

Führen Sie den folgenden Befehl aus, um die Google Security Operations-Forwarder-Logs aufzurufen:

  sudo docker logs cfps

Führen Sie den folgenden Befehl aus, um den Pfad der Datei anzuzeigen, in der die Logs gespeichert sind:

docker inspect --format='{{.LogPath}}' CONTAINER_NAME
 

Führen Sie den folgenden Befehl aus, um die laufenden Logs anzuzeigen:

  sudo docker logs cfps -f

Führen Sie den folgenden Befehl aus, um die Logs in einer Datei zu speichern:

  sudo docker logs cfps &> logs.txt

Forwarder deinstallieren

Mit den folgenden Docker-Befehlen können Sie die Google Security Operations-Weiterleitung anhalten und deinstallieren oder entfernen.

So beenden oder deinstallieren Sie den Forwarder-Container:

    docker stop cfps
  

So entfernen Sie den Forwarder-Container:

    docker rm cfps
  

Forwarder aktualisieren

Der Google Security Operations-Forwarder besteht aus zwei Teilen und wird so aktualisiert:

  • Forwarder Bundle: Wird automatisch aktualisiert und es ist kein Neustart erforderlich.

  • Forwarder-Docker-Image: Wird manuell aktualisiert, nachdem der vorhandene Forwarder beendet und eine neue Instanz wie in Schritt 2 beschrieben gestartet wurde.

Daten erheben

In den folgenden Abschnitten erfahren Sie, wie Sie den Google Security Operations-Forwarder so konfigurieren, dass verschiedene Datentypen aufgenommen werden, die an die Google Security Operations-Instanz weitergeleitet werden.

Splunk-Daten erfassen

Sie können den Google Security Operations-Forwarder so konfigurieren, dass Ihre Splunk-Daten an Google Security Operations weitergeleitet werden. Google Cloud konfiguriert den Google Security Operations-Forwarder mit den folgenden Informationen, um Ihre Daten aus Splunk weiterzuleiten:

  • URL für die Splunk REST API (z. B. https://10.0.113.15:8089).

  • Splunk-Abfragen, um Daten für jeden der erforderlichen Datentypen zu generieren (z. B. „index=dns“).

FORWARDER_NAME.conf
output:
collectors:
  - splunk:
      common:
        enabled: true
        data_type: WINDOWS_DNS
        data_hint: "#fields ts      uid     id.orig_h       id.orig_p       id.resp_h         id.resp_p       proto   trans_id        query   qclass  qclass_name"
        batch_n_seconds: 10
        batch_n_bytes: 819200
      url: https://127.0.0.1:8089
      is_ignore_cert: true
      minimum_window_size: 10s
      maximum_window_size: 30s
      query_string: search index=* sourcetype=dns
      query_mode: realtime
  • Machen Sie die Anmeldedaten für Ihr Splunk-Konto der Google Security Operations-Weiterleitung zur Verfügung. Erstellen Sie dazu eine creds.txt-Datei.

So verwenden Sie eine creds.txt-Datei:

  1. Erstellen Sie eine lokale Datei für Ihre Splunk-Anmeldedaten und nennen Sie sie creds.txt.

  2. Geben Sie Ihren Nutzernamen in die erste Zeile und das Passwort in die zweite Zeile ein:

    cat creds.txt
    
    myusername
    mypassword
    
  3. Wenn Sie die Google Security Operations-Weiterleitung für den Zugriff auf eine Splunk-Instanz verwenden möchten, kopieren Sie die Datei creds.txt in das Konfigurationsverzeichnis (dem Verzeichnis, in dem sich die Konfigurationsdateien befinden). Beispiel:

    cp creds.txt /opt/chronicle/config/creds.txt
    
  4. Prüfen Sie, ob sich die Datei creds.txt am richtigen Speicherort befindet:

    ls /opt/chronicle/config
    

Syslog-Daten erfassen

Der Google Security Operations-Forwarder kann als Syslog-Server verwendet werden. Sie können jede Appliance oder jeden Server, der das Senden von Syslog-Daten über eine TCP- oder UDP-Verbindung unterstützt, so konfigurieren, dass ihre Daten an den Google Security Operations-Forwarder weitergeleitet werden. Sie können genau festlegen, welche Daten die Appliance oder der Server an den Google Security Operations-Forwarder sendet. Der Google Security Operations-Forwarder kann die Daten dann an Google Security Operations weiterleiten.

Die von Google Cloud bereitgestellte Konfigurationsdatei FORWARDER_NAME.conf gibt an, welche Ports für jeden Typ weitergeleiteter Daten überwacht werden sollen (z. B. Port 10514). Standardmäßig akzeptiert die Google Security Operations-Weiterleitung sowohl TCP- als auch UDP-Verbindungen.

rsyslog konfigurieren

Zum Konfigurieren von rsyslog müssen Sie für jeden Port (z. B. jeden Datentyp) ein Ziel angeben. Die korrekte Syntax finden Sie in der Systemdokumentation. Die folgenden Beispiele veranschaulichen die rsyslog-Zielkonfiguration:

  • TCP-Log-Traffic: dns.* @@192.168.0.12:10514

  • UDP-Log-Traffic: dns.* @192.168.0.12:10514

TLS für Syslog-Konfigurationen aktivieren

Sie können TLS für die Syslog-Verbindung zum Google Security Operations-Forwarder aktivieren. Geben Sie in der Konfigurationsdatei für die Google Security Operations-Weiterleitung (FORWARDER_NAME.conf) den Speicherort Ihres selbst generierten Zertifikats und Ihres Zertifikatschlüssels an, wie im folgenden Beispiel gezeigt:

Zertifikat "/opt/chronicle/external/certs/client_generated_cert.pem"
certificate_key "/opt/chronicle/external/certs/client_generated_cert.key"

Ändern Sie basierend auf dem gezeigten Beispiel die Konfigurationsdatei für die Google Security Operations-Weiterleitung (FORWARDER_NAME.conf) so:

  collectors:
- syslog:
    common:
      enabled: true
      data_type: WINDOWS_DNS
      data_hint:
      batch_n_seconds: 10
      batch_n_bytes: 1048576
    tcp_address: 0.0.0.0:10515
    tcp_buffer_size: 65536
    connection_timeout_sec: 60
    certificate: "/opt/chronicle/external/certs/client_generated_cert.pem"
    certificate_key: "/opt/chronicle/external/certs/client_generated_cert.key"
    minimum_tls_version: "TLSv1_3"

Einige wichtige Punkte, die Sie beachten sollten:

  • Sie können die Größe des TCP-Zwischenspeichers konfigurieren. Die Standardgröße des TCP-Zwischenspeichers beträgt 64 KB.

  • Der empfohlene Standardwert für connection_timeout beträgt 60 Sekunden. Die TCP-Verbindung wird beendet, wenn sie für eine bestimmte Zeit inaktiv ist.

  • Die TLS-Mindestversion wird mit der TLS-Version der Eingabeanfrage abgeglichen. Die TLS-Version der Eingabeanfrage muss höher als die TLS-Mindestversion sein. Die TLS-Mindestversion sollte einen der folgenden Werte haben: TLSv1_0, TLSv1_1, TLSv1_2, TLSv1_3.

Sie können unter dem Konfigurationsverzeichnis ein certs-Verzeichnis erstellen und die Zertifikatsdateien dort speichern.

Dateidaten erfassen

Ein File Collector ist so konzipiert, dass die Protokolle aus einer Datei abgerufen werden. Die Datei sollte an den Docker-Container gebunden sein.

Verwenden Sie diese Option, wenn Sie Protokolle manuell aus einer einzelnen Protokolldatei hochladen möchten. Damit kann ein Backfill der Logs für eine bestimmte Logdatei durchgeführt werden.

Starten Sie den Google Security Operations-Forwarder vom Docker-Container aus:

  docker run \
    --detach \
    --name cfps \
    --log-opt max-size=100m \
    --log-opt max-file=10 \
    --net=host \
    -v /opt/chronicle/config:/opt/chronicle/external \
    -v /var/log/crowdstrike/falconhostclient:/opt/chronicle/edr \
     gcr.io/chronicle-container/cf_production_stable

Dieser Docker-Ausführungsbefehl ist wichtig, um dem Container das Ladevolumen zuzuordnen.

In diesem Beispiel sollten Sie die Google Security Operations-Weiterleitungskonfiguration (FORWARDER_NAME.conf-Datei) so ändern. Die Datei sample.txt sollte im Ordner /var/log/crowdstrike/falconhostclient vorhanden sein.

 collectors:
  - file:
       common:
         enabled: true
         data_type: CS_EDR
         data_hint:
         batch_n_seconds: 10
         batch_n_bytes: 1048576
       file_path: /opt/chronicle/edr/sample.txt
       filter:

Flag-Konfigurationen

skip_seek_to_end (bool): Dieses Flag ist standardmäßig auf false gesetzt und die Dateieingabe sendet nur neue Logzeilen als Eingabe. Wenn Sie diesen Wert auf true festlegen, werden alle vorherigen Logzeilen bei Neustarts des Forwarders noch einmal gesendet. Dies führt zu Duplizierung des Logs. Das Festlegen dieses Flags auf true ist in bestimmten Situationen hilfreich, z. B. bei Ausfällen, da die fehlenden Logzeilen noch einmal durch einen Neustart des Forwarders gesendet werden.

poll (bool): Der Datei-Collector verwendet die Tail-Bibliothek, um nach Änderungen im Dateisystem zu suchen. Wenn Sie dieses Flag auf true setzen, verwendet die Tail-Bibliothek die Polling-Methode anstelle der Standardbenachrichtigungsmethode.

Paketdaten erfassen

Der Google Security Operations-Forwarder kann mithilfe von libcap unter Linux Pakete direkt über eine Netzwerkschnittstelle erfassen. Weitere Informationen zu libcap finden Sie auf der Seite zu libcap – Linux-Handbuch.

Pakete werden erfasst und anstelle von Logeinträgen an Google Security Operations gesendet. Die Paketerfassung erfolgt nur über eine lokale Schnittstelle. Wenn Sie die Paketerfassung für Ihr System aktivieren möchten, wenden Sie sich an den Support von Google Security Operations.

Google Cloud konfiguriert den Google Security Operations-Forwarder mit dem Berkeley-Paketfilterausdruck (BPF), der beim Erfassen von Paketen verwendet wird (z. B. Port 53 und nicht localhost). Weitere Informationen finden Sie unter Berkeley-Paketfilter.

Daten aus Kafka-Thema erfassen

Sie können Daten aus den Kafka-Themen genau wie aus Syslog aufnehmen. Die Nutzergruppen werden genutzt, damit Sie bis zu drei Forwarder bereitstellen und Daten aus demselben Kafka-Thema abrufen können. Weitere Informationen finden Sie unter Kafka.

Weitere Informationen zu Kafka-Nutzergruppen finden Sie hier: https://docs.confluent.io/platform/current/clients/consumer.html.

Beispielkonfiguration: Kafka-Eingabe

Die folgende Forwarder-Konfiguration zeigt, wie Sie den Forwarder so einrichten, dass er Daten aus den Kafka-Themen aufnehmen kann.

Die Datei FORWARDER_NAME.conf

collectors:
- kafka:
      common:
        batch_n_bytes: 1048576
        batch_n_seconds: 10
        data_hint: null
        data_type: NIX_SYSTEM
        enabled: true
      topic: example-topic
      group_id: chronicle-forwarder
      timeout: 60s
      brokers: ["broker-1:9092", "broker-2:9093"]
      tls:
        insecureSkipVerify: true
        certificate: "/path/to/cert.pem"
        certificate_key: "/path/to/cert.key"
- syslog:
      common:
        batch_n_bytes: 1048576
        batch_n_seconds: 10
        data_hint: null
        data_type: WINEVTLOG
        enabled: true
      tcp_address: 0.0.0.0:30001
      connection_timeout_sec: 60

Die Datei FORWARDER_NAME_auth.conf

collectors:
- kafka:
      username: user
      password: password
- syslog:

WebProxy-Daten erfassen

Der Google Security Operations-Forwarder kann mit libcap unter Linux WebProxy-Daten direkt über eine Netzwerkschnittstelle erfassen. Weitere Informationen zu libcap finden Sie auf der Seite zu libcap – Linux-Handbuch. Wenn Sie die WebProxy-Datenerfassung für Ihr System aktivieren möchten, wenden Sie sich an den Support von Google Security Operations.

Ändern Sie die Konfiguration des Google Security Operations-Forwarder (FORWARDER_NAME.conf-Datei) so:

- webproxy:
      common:
        enabled : true
        data_type: <Your LogType>
        batch_n_seconds: 10
        batch_n_bytes: 1048576
      interface: any
      bpf: tcp and dst port 80

Konfigurationen anpassen

In der folgenden Tabelle sind wichtige Parameter aufgeführt, die in der Konfigurationsdatei des Forwarders verwendet werden.

Parameter Beschreibung
data_type Die Art der Logdaten, die der Collector erfassen und verarbeiten kann.
Metadaten Metadaten, die globale Metadaten überschreiben.
max_file_buffer_bytes Maximale Anzahl von Byte, die im Laufwerk oder Dateizwischenspeicher akkumuliert werden können. Der Standardwert ist 1073741824, also 1 GB.
max_memory_buffer_bytes Maximale Anzahl von Byte, die im Zwischenspeicher des Arbeitsspeichers akkumuliert werden können. Der Standardwert ist 1073741824, also 1 GB.
write_to_disk_dir_path Der für den Datei- oder Laufwerkzwischenspeicher zu verwendende Pfad.
write_to_disk_buffer_enabled Wenn true, wird der Laufwerkzwischenspeicher anstelle des Arbeitsspeicherpuffers verwendet. Der Standardwert ist false.
batch_n_bytes Maximale Anzahl von Byte, die vom Collector akkumuliert werden können, nach dem die Daten in Batches zusammengefasst werden. Der Standardwert ist 1048576, also 1 MB.
batch_n_seconds Die Anzahl der Sekunden, nach denen die vom Collector erfassten Daten in Batches zusammengefasst werden. Der Standardwert ist 11 Sekunden.
data_hint Datenformat, das der Collector empfangen kann (normalerweise der Header der Protokolldatei, der das Format beschreibt).

Eine umfassende Liste der in der Konfigurationsdatei verwendeten Parameter finden Sie unter Forwarder-Konfigurationsfelder und Collector-Konfigurationsfelder.

Datenkomprimierung aktivieren/deaktivieren

Die Logkomprimierung reduziert den Verbrauch der Netzwerkbandbreite beim Übertragen von Logs an Google Security Operations. Die Komprimierung kann jedoch zu einer erhöhten CPU-Auslastung führen. Der Kompromiss zwischen CPU-Nutzung und Bandbreite hängt von vielen Faktoren ab, einschließlich der Art der Logdaten, der Komprimierbarkeit dieser Daten, der Verfügbarkeit von CPU-Zyklen auf dem Host, auf dem der Forwarder ausgeführt wird, und der Notwendigkeit, die Netzwerkbandbreitennutzung zu reduzieren.

Textbasierte Logs werden beispielsweise gut komprimiert und können bei geringer CPU-Nutzung erhebliche Bandbreiteneinsparungen bieten. Verschlüsselte Nutzlasten von Rohpaketen werden jedoch nicht gut komprimiert und verursachen eine höhere CPU-Auslastung.

Standardmäßig ist die Protokollkomprimierung deaktiviert. Das Aktivieren der Logkomprimierung kann den Bandbreitenverbrauch reduzieren. Allerdings kann die Aktivierung der Logkomprimierung auch die CPU-Auslastung erhöhen. Achten Sie auf den Kompromiss.

Um die Protokollkomprimierung zu aktivieren, setzen Sie das Feld compression in der Konfigurationsdatei des Forwarders für Google Security Operations auf true, wie im folgenden Beispiel gezeigt:

Die Datei FORWARDER_NAME.conf

output:
  compression: true
    url: malachiteingestion-pa.googleapis.com:443
    identity:
      identity:
      collector_id: 10479925-878c-11e7-9421-10604b7cb5c1
      customer_id: ebdc4bb9-878b-11e7-8455-10604b7cb5c1
...

Die Datei FORWARDER_NAME_auth.conf

output:
  identity:
    secret_key: |
    {
     "type": "service_account",
...
    }

Laufwerkszwischenspeicherung konfigurieren

Durch die Laufwerkszwischenspeicherung können Sie zurückgestellte Nachrichten auf dem Laufwerk statt im Arbeitsspeicher zwischenspeichern. Die im Rückstand befindlichen Nachrichten können für den Fall gespeichert werden, dass der Forwarder abstürzt oder der zugrunde liegende Host abstürzt. Beachten Sie, dass die Aktivierung der Zwischenspeicherung des Laufwerks die Leistung beeinträchtigen kann.

Wenn die Laufwerkszwischenspeicherung deaktiviert ist, verwendet der Forwarder für jeden Logtyp (z. B. pro Connector) 1 GB Arbeitsspeicher (RAM). Geben Sie den Konfigurationsparameter max_memory_buffer_bytes an. Der maximal zulässige Arbeitsspeicher beträgt 4 GB.

Sie können die automatische Zwischenspeicherung des Arbeitsspeichers so konfigurieren, dass ein dynamisch gemeinsamer Zwischenspeicher für Collectors verwendet wird, der Traffic-Spitzen besser bewältigen kann. Fügen Sie der Weiterleitungskonfiguration Folgendes hinzu, um den dynamisch gemeinsamen Zwischenspeicher zu aktivieren:

auto_buffer:
  enabled: true
  target_memory_utilization: 80

Wenn die automatische Zwischenspeicherung des Laufwerks aktiviert, target_memory_utilization aber nicht definiert ist, wird der Standardwert 70 verwendet.

Wenn Sie den Forwarder mit Docker ausführen, empfiehlt Google zu Isolationszwecken, ein vom Konfigurations-Volume getrenntes Volume bereitzustellen. Außerdem sollte jede Eingabe mit einem eigenen Verzeichnis oder Volume isoliert sein, um Konflikte zu vermeiden.

Beispielkonfiguration: Laufwerkzwischenspeicherung

Die folgende Konfiguration enthält eine Syntax zum Aktivieren der Zwischenspeicherung des Laufwerks:

collectors:
- syslog:
    common:
      write_to_disk_buffer_enabled: true
      # /buffers/NIX_SYSTEM is part of the external mounted volume for the
forwarder
      write_to_disk_dir_path: /buffers/NIX_SYSTEM
      max_file_buffer_bytes: 1073741824
      batch_n_bytes: 1048576
      batch_n_seconds: 10
      data_hint: null
      data_type: NIX_SYSTEM
      enabled: true
    tcp_address: 0.0.0.0:30000
    connection_timeout_sec: 60
- syslog:
    common:
      batch_n_bytes: 1048576
      batch_n_seconds: 10
      data_hint: null
      data_type: WINEVTLOG
      enabled: true
    tcp_address: 0.0.0.0:30001
    connection_timeout_sec: 60

Filter für reguläre Ausdrücke festlegen

Mit Filtern für reguläre Ausdrücke können Sie Logs anhand von Übereinstimmungen mit regulären Ausdrücken mit Rohlogs filtern.

Die Filter verwenden die hier beschriebene RE2-Syntax: https://github.com/google/re2/wiki/Syntax

Die Filter müssen einen regulären Ausdruck enthalten und optional das Verhalten bei einer Übereinstimmung definieren. Das Standardverhalten bei einer Übereinstimmung ist „block“. Sie können sie auch explizit als Block konfigurieren.

Alternativ können Sie Filter mit dem Verhalten allow angeben. Wenn Sie allow-Filter angeben, blockiert der Forwarder alle Logs, die nicht mindestens einem allow-Filter entsprechen.

Es ist möglich, eine beliebige Anzahl von Filtern zu definieren. Blockfilter haben Vorrang vor allow-Filtern.

Wenn Sie Filter definieren, muss ihnen ein Name zugewiesen werden. Die Namen der aktiven Filter werden über Forwarder-Statusmesswerte an Google Security Operations gemeldet. Auf der Stammebene der Konfiguration definierte Filter werden mit den auf Collector-Ebene definierten Filtern zusammengeführt. Bei in Konflikt stehenden Namen haben die Filter auf Collector-Ebene Vorrang. Wenn keine Filter auf Stamm- oder Collector-Ebene definiert sind, werden alle zugelassen.

Beispielkonfiguration: Filter für reguläre Ausdrücke

In der folgenden Forwarder-Konfiguration werden die WINEVTLOG-Logs blockiert, die nicht mit dem Stammfilter (allow_filter) übereinstimmen. Aufgrund des regulären Ausdrucks lässt der Filter nur Logs mit Prioritäten zwischen 0 und 99 zu. Alle NIX_SYSTEM-Logs, die „foo“ oder „bar“ enthalten, werden jedoch trotz allow_filter blockiert. Das liegt daran, dass die Filter ein logisches ODER verwenden. Alle Logs werden verarbeitet, bis ein Filter ausgelöst wird.

regex_filters:
  allow_filter:
    regexp: ^<[1-9][0-9]?$>.*$
    behavior_on_match: allow
collectors:
- syslog:
    common:
      regex_filters:
        block_filter_1:
          regexp: ^.*foo.*$
          behavior_on_match: block
        block_filter_2:
          regexp: ^.*bar.*$
      batch_n_bytes: 1048576
      batch_n_seconds: 10
      data_hint: null
      data_type: NIX_SYSTEM
      enabled: true
    tcp_address: 0.0.0.0:30000
    connection_timeout_sec: 60
- syslog:
    common:
      batch_n_bytes: 1048576
      batch_n_seconds: 10
      data_hint: null
      data_type: WINEVTLOG
      enabled: true
    tcp_address: 0.0.0.0:30001
    connection_timeout_sec: 60

Beliebige Labels konfigurieren

Mit Labels können beliebige Metadaten mithilfe von Schlüssel/Wert-Paaren an Logs angehängt werden. Labels können für einen gesamten Forwarder oder innerhalb eines bestimmten Collectors eines Forwarders konfiguriert werden. Sind beide angegeben, werden die Labels mit den Collector-Schlüsseln zusammengeführt, die Vorrang vor den Forwarder-Schlüsseln haben, wenn sich die Schlüssel überschneiden.

Beispielkonfiguration: beliebige Labels

In der folgenden Forwarder-Konfiguration sind die Schlüssel- und Wertpaare „foo=bar“ und „meow=mix“ an WINEVTLOG-Logs und die Schlüssel- und Wertpaare „foo=baz“ und „meow=mix“ an die Logs NIX_SYSTEM angehängt.

metadata:
  labels:
    foo: bar
    meow: mix
collectors:
syslog:
    common:
      metadata:
        labels:
          foo: baz
          meow: mix
      batch_n_bytes: 1048576
      batch_n_seconds: 10
      data_hint: null
      data_type: NIX_SYSTEM
      enabled: true
    tcp_address: 0.0.0.0:30000
    connection_timeout_sec: 60
syslog:
    common:
      batch_n_bytes: 1048576
      batch_n_seconds: 10
      data_hint: null
      data_type: WINEVTLOG
      enabled: true
    tcp_address: 0.0.0.0:30001
    connection_timeout_sec: 60

Namespaces konfigurieren

Verwenden Sie Namespace-Labels, um Logs von verschiedenen Netzwerksegmenten zu identifizieren und Konflikte zwischen sich überschneidenden IP-Adressen zu beheben. Sie können ein Namespace-Label für einen gesamten Forwarder oder innerhalb eines bestimmten Collectors des Forwarders konfigurieren. Wenn beide enthalten sind, hat der Namespace des jeweiligen Collectors Vorrang.

Jeder für den Forwarder konfigurierte Namespace wird mit den zugehörigen Assets in der Google Security Operations-Benutzeroberfläche angezeigt. Sie können auch mit der Google Security Operations Search-Funktion nach Namespaces suchen.

Informationen zum Aufrufen von Namespaces in der Google Security Operations-Benutzeroberfläche finden Sie hier.

Beispielkonfiguration: Namespaces

In der folgenden Forwarder-Konfiguration werden die WINEVTLOG-Logs an den FORWARDER-Namespace und die NIX_SYSTEM-Logs an den CORPORATE-Namespace angehängt.

metadata:
  namespace: FORWARDER
collectors:
- syslog:
      common:
        metadata:
          namespace: CORPORATE
        batch_n_bytes: 1048576
        batch_n_seconds: 10
        data_hint: null
        data_type: NIX_SYSTEM
        enabled: true
      tcp_address: 0.0.0.0:30000
      connection_timeout_sec: 60
- syslog:
      common:
        batch_n_bytes: 1048576
        batch_n_seconds: 10
        data_hint: null
        data_type: WINEVTLOG
        enabled: true
      tcp_address: 0.0.0.0:30001
      connection_timeout_sec: 60

Load-Balancing- und Hochverfügbarkeitsoptionen konfigurieren

Der Google Security Operations-Forwarder für Linux kann in einer Umgebung bereitgestellt werden, in der ein Layer-4-Load-Balancer zwischen der Datenquelle und der Forwarder-Instanz installiert ist. Dadurch kann ein Kunde die Logsammlung auf mehrere Forwarder verteilen oder Logs an einen anderen Forwarder senden, wenn ein Fehler auftritt. Dieses Feature wird nur vom Sammlungstyp „syslog“ unterstützt.

Der Linux-Forwarder enthält einen integrierten HTTP-Server, der auf HTTP-Systemdiagnosen des Load-Balancers reagiert. Der HTTP-Server sorgt auch dafür, dass beim Starten oder Herunterfahren eines Forwarders keine Logs verloren gehen.

Konfigurieren Sie die Optionen für HTTP-Server, Load-Balancing und Hochverfügbarkeit im Abschnitt server der Konfigurationsdatei für den Forwarder. Diese Optionen unterstützen das Festlegen von Zeitlimits und Statuscodes, die als Antwort auf Systemdiagnosen zurückgegeben werden, die in Container-Planer- und Orchestrierungsbasierten Bereitstellungen sowie von herkömmlichen Load-Balancern empfangen werden.

Verwenden Sie die folgenden URL-Pfade für Zustands-, Bereitschafts- und Aktivitätsprüfungen. Die <host:port>-Werte werden in der Forwarder-Konfiguration definiert.

  • http://<host:port>/meta/available: Aktivitätsprüfungen für Container-Planer oder -Orchestratoren.
  • http://<host:port>/meta/ready: Bereitschaftsprüfungen und herkömmliche Load-Balancer-Systemdiagnosen.

Die folgende Forwarder-Konfiguration ist ein Beispiel für Load-Balancing und Hochverfügbarkeit:

collectors:
- syslog:
    common:
      batch_n_bytes: 1048576
      batch_n_seconds: 10
      data_hint: null
      data_type: NIX_SYSTEM
      enabled: true
    tcp_address: 0.0.0.0:30000
    connection_timeout_sec: 60
- syslog:
    common:
      batch_n_bytes: 1048576
      batch_n_seconds: 10
      data_hint: null
      data_type: WINEVTLOG
      enabled: true
    tcp_address: 0.0.0.0:30001
    connection_timeout_sec: 60
server:
  graceful_timeout: 15s
  drain_timeout: 10s
  http:
    port: 8080
    host: 0.0.0.0
    read_timeout: 3s
    read_header_timeout: 3s
    write_timeout: 3s
    idle_timeout: 3s
    routes:
    - meta:
        available_status: 204
        ready_status: 204
        unready_status: 503
Konfigurationspfad Beschreibung
Server : Graceful_timeout Die Zeit, in der der Forwarder eine schlechte Bereitschafts-/Systemdiagnose zurückgibt und noch neue Verbindungen annimmt. Dies ist auch die Wartezeit zwischen dem Empfang eines Signals zum Anhalten und dem tatsächlichen Herunterfahren des Servers selbst. Dadurch hat der Load-Balancer Zeit, den Forwarder aus dem Pool zu entfernen.
Server : Drain_timeout Die Zeit, die der Forwarder darauf wartet, dass aktive Verbindungen von selbst erfolgreich beendet wurden, bevor er vom Server geschlossen wird.
Server : http : Port Die Portnummer, die der HTTP-Server auf Systemdiagnosen des Load-Balancers überwacht. Muss zwischen 1024 und 65535 liegen.
Server : http : Host Die IP-Adresse oder der Hostname, der in IP-Adressen aufgelöst werden kann, die der Server überwachen soll. Wenn leer, gilt der Standardwert „Lokales System“ (0.0.0.0).
Server : http : read_timeout Wird zum Abstimmen des HTTP-Servers verwendet. Die Standardeinstellung muss in der Regel nicht geändert werden. Die maximale Zeit, die zum Lesen der gesamten Anfrage, sowohl des Headers als auch des Textkörpers, erlaubt ist. Sie können sowohl read_timeout als auch read_header_timeout festlegen.
Server : http : read_header_timeout Wird zum Abstimmen des HTTP-Servers verwendet. Die Standardeinstellung muss in der Regel nicht geändert werden. Die maximale Zeit, die zum Lesen von Anfrageheadern erlaubt ist. Die Verbindung hat gelesen, dass die Frist nach dem Lesen des Headers zurückgesetzt wird.
Server : http : write_timeout Wird zum Abstimmen des HTTP-Servers verwendet. Die Standardeinstellung muss in der Regel nicht geändert werden. Die maximal zulässige Zeit zum Senden einer Antwort. Er wird zurückgesetzt, wenn ein neuer Anfrageheader gelesen wird.
Server : http : Idle_timeout Wird zum Abstimmen des HTTP-Servers verwendet. Die Standardeinstellung muss in der Regel nicht geändert werden. Die maximale Wartezeit auf die nächste Anfrage, wenn inaktive Verbindungen aktiviert sind. Wenn inaktiv_timeout null ist, wird der Wert von read_timeout verwendet. Wenn beide null sind, wird read_header_timeout verwendet.
route : meta : ready_status Der Statuscode, den der Forwarder zurückgibt, wenn er in einer der folgenden Situationen bereit ist, den Traffic zu akzeptieren:
  • Die Bereitschaftsprüfung wird von einem Container-Planer oder -Orchestrator empfangen.
  • Die Systemdiagnose wird von einem herkömmlichen Load-Balancer empfangen.
Routen : meta : ungeleseny_status Der Statuscode, den der Forwarder zurückgibt, wenn er nicht zum Akzeptieren von Traffic bereit ist.
Routen : meta : available_status Der Statuscode, den der Forwarder zurückgibt, wenn eine Aktivitätsprüfung empfangen wird und der Forwarder verfügbar ist. Containerplaner oder -Orchestratoren senden häufig Aktivitätsprüfungen.

Häufig gestellte Fragen

Wie aktualisiere ich die Weiterleitung?

Der Linux-Forwarder wird kontinuierlich über ein Shell-Skript im Docker-Image aktualisiert. Führen Sie den Forwarder aus, um das Docker-Image zu aktualisieren.

Was ist ein Docker-Container?

  • Docker-Container sind wie virtuelle Maschinen und bieten zusätzliche Sicherheit, Isolation und Ressourcenverwaltung.

  • Virtuelle Maschinen – haben sowohl einen privilegierten Bereich (Linux-Kernel) als auch einen Nutzerbereich (alles, mit dem Sie interagieren: libc, python, ls, tcpdump usw.).

  • Container – haben nur einen Nutzerbereich (alles, mit dem Sie interagieren: libc, Python, ls, tcpdump usw.) und sind auf den Berechtigungsbereich des Hosts angewiesen.

Warum sollten Sie den Google Security Operations-Forwarder mithilfe eines Containers verteilen?

  • Mehr Sicherheit durch Isolation:
    • Die Kundenumgebung und -anforderungen haben keine Auswirkungen auf den Google Security Operations-Forwarder.
    • Die Google Security Operations-Forwarder-Umgebung und -Anforderungen haben keine Auswirkungen auf den Kunden.
    • Ein Mechanismus zur Containerverteilung ist bereits vorhanden und kann für Google Cloud und Kunden privat und separat sein. https://cloud.google.com/container-registry/

Möchten Sie erweiterte Docker-Befehle erlernen?

  • Der Google Security Operations-Forwarder verwendet einen einzigen Container, sodass Sie sich nicht mit Swarm, Orchestrierung oder anderen erweiterten Docker-Konzepten oder -Befehlen vertraut machen müssen.