# Loggernaut-Konfigurationen

## Backup Strategien

Loggernaut unterstützt aktuell zwei Backup-Strategien für die automatisierte Sicherung von Roh-Logs:

* **SFTP-Backup** – Speicherung auf einem SFTP-Server
* **S3-Backup** – Speicherung in einem S3-kompatiblen Objektspeicher

Beide Optionen bieten eine optionale clientseitige Verschlüsselung mit dem AGE-Verschlüsselungsverfahren.

### SFTP Backup&#x20;

Das Backup-System, automatisiert die Übertragung aller bisher ausschließlich auf dem Management-Server gespeicherten Roh-Logs auf einen SFTP-Server. Die detaillierte Konfiguration dieser Funktion ist in der Loggernaut config.json beschrieben und bietet Ihnen eine effiziente Methode zur Sicherung Ihrer Daten.

**Auswahl der Backup Strategie**

Im Parameter `strategy` wird festgelegt, wie Loggernaut mit Backups umgeht:

| Wert     | Beschreibung                                                                                    |
| -------- | ----------------------------------------------------------------------------------------------- |
| `local`  | Logs werden ausschließlich lokal auf dem Loggernaut gespeichert.                                |
| `remove` | Logs werden nach Ablauf der definierten TTL gelöscht.                                           |
| `sftp`   | Logs werden an einen externen SFTP-Server übertragen. Die Option `sftp` muss konfiguriert sein. |

{% hint style="info" %}
Vorsicht bei SFTP-Chroot! Wenn das Ziel '/user/siem/logs' ist und das Chroot auf '/user' festgelegt ist, sollte das tatsächliche Ziel '/siem/logs' sein, um mögliche Probleme zu vermeiden
{% endhint %}

**SFTP-spezifische Felder**

| Feld              | Beschreibung                                                                                                                                                     | Hinweise                                                                                                                                                |
| ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `permissions`     | Dateiberechtigungen im Unix-Stil (z. B. `"0666"`). Erlaubt allen Benutzern Lese- und Schreibzugriff.                                                             |                                                                                                                                                         |
| `remoteDirectory` | Verzeichnis auf dem SFTP-Server, in dem die Logs gespeichert werden.                                                                                             | Wenn das Zielverzeichnis z. B. `/user/siem/logs` lautet und der Chroot auf `/user` gesetzt ist, muss `remoteDirectory` auf `/siem/logs` gesetzt werden! |
| `keepLocalCopy`   | Wenn `false`, werden alle Logs außerhalb der TTL gelöscht, sobald sie erfolgreich übertragen wurden. Bei `true` bleibt eine Kopie lokal auf dem Logger erhalten. |                                                                                                                                                         |

**SSH-Zugangsdaten (sftp.ssh)**

| Konfigurationswert     | Beschreibung                                                                                                              | Hinweise                                                                                                                                                                                                                                                                                                  |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `username`             | Benutzername für die SSH-Verbindung zum SFTP-Server.                                                                      |                                                                                                                                                                                                                                                                                                           |
| `password`             | Passwort zur Authentifizierung. Kann leer bleiben, wenn ein SSH-Schlüssel verwendet wird.                                 | Dieses Feld können Sie leer lassen, wenn ein Schlüssel verwendet werden.                                                                                                                                                                                                                                  |
| `ip`                   | IP-Adresse des SFTP/SSH-Servers.                                                                                          |                                                                                                                                                                                                                                                                                                           |
| `port`                 | Port für die SSH-Verbindung. Standard ist `22`, falls leer gelassen.                                                      | Wenn Sie dieses Feld leer lassen, wird der Standardport 22 genutzt.                                                                                                                                                                                                                                       |
| `privateKeyPath`       | Pfad zum privaten SSH-Schlüssel. Nur erforderlich, wenn eine Schlüssel-basierte Authentifizierung genutzt wird.           | Wenn Sie ein Passwort verwenden, müssen Sie hier keine Anpassungen vornehmen.                                                                                                                                                                                                                             |
| `privateKeyPassphrase` | Passwort für den privaten Schlüssel, falls dieser verschlüsselt ist.                                                      |                                                                                                                                                                                                                                                                                                           |
| `knownHostsPath`       | Pfad zur Datei `known_hosts` zur Verifikation des SFTP-Servers. Wird dieses Feld leer gelassen, entfällt die Hostprüfung. | Wenn Sie diese Angabe leer lassen, wird kein Host-Check durchgeführt und angenommen, dass der richtige Server angegeben wurde. Es muss nicht die von SSH angelegte 'known\_hosts'-Datei sein, wenn nur dieser Host zugelassen werden soll, jedoch muss das Format dem der "originalen" Datei entsprechen. |

1. **Fügen Sie den Code in Ihrer `/opt/enginsight/loggernaut/config.json` hinzu und passen Sie die Konfiguration wie oben beschrieben an.**
   1. **Beispielkonfiguration (ohne Verschlüsselung)**

      <pre><code><strong>{    
      </strong>    "api": {...},
          "siem": {...},
          ...,
          "backup": {
              "strategy": "sftp",
              "sftp": {
                  "permissions": "0666",
                  "remoteDirectory": "/logs",
                  "keepLocalCopy": false,
                  "ssh": {
                      "username": "siem",
                      "password": "****",
                      "ip": "****",
                      "port": 22,
                      "privateKeyPath": "/opt/enginsight/loggernaut/ssh/id_ed25519",
                      "privateKeyPassphrase": "*****",
                      "knownHostsPath": "/root/.ssh/known_hosts"
                  }
              }
          }
      }
      </code></pre>
   2. **Beispielkonfiguration mit AGE-Verschlüsselung**\
      Loggernaut unterstützt aktuell ausschließlich das Verschlüsselungspaket `age`.\
      \
      **Generieren eines AGE-Schlüsselpaares**

      Sie können das benötigte Schlüsselpaar wie folgt erzeugen:

      **mit AGE-CLI:**

      ```bash
      age-keygen -o key.txt
      ```

      **mit Loggernaut:**

      ```bash
      sudo ./loggernaut -generate-age-keys
      ```

      Dabei wird ein Public-/Private-Key-Paar erzeugt. Nur der **öffentliche Schlüssel** kommt in die Konfiguration. Der private Schlüssel muss sicher aufbewahrt werden, um Backups später entschlüsseln zu können.\
      \
      **Backup mit Verschlüsselung**\
      {

      ```
        "backup": {
          "strategy": "sftp",
          "sftp": {
            "permissions": "0666",
            "remoteDirectory": "/logs",
            "keepLocalCopy": true,
            "ssh": {
              "username": "siem",
              "ip": "192.168.1.100",
              "port": 22,
              "privateKeyPath": "/opt/enginsight/loggernaut/ssh/id_ed25519",
              "knownHostsPath": "/root/.ssh/known_hosts"
            }
          },
          "encryption": {
            "package": "age",
            "publickey": "age1ms3c0gmdxakx3lxzlp422g78lju4pmrse0rp6jl8lpu696yvea7qttzsl0"
          }
        }
      }
      ```

{% hint style="info" %}
**Technische Hinweise zur Verschlüsselung:**

* Aktuell wird ausschließlich das **AGE-Verschlüsselungspaket** unterstützt.
  * Ein gültiger **AGE Public Key** beginnt immer mit `age` und enthält nur Zeichen aus `[a-z0-9]`.\
    Beispiel: `age1ms3c0gmdxakx3lxzlp422g78lju4pmrse0rp6jl8lpu696yvea7qttzsl0`

Alle Organisationen auf einer SIEM-Instanz verwenden denselben Public Key zur Verschlüsselung.\
Es gibt **keine org-spezifische Schlüsselkonfiguration**, und alle Backups werden beim **gleichen S3-Provider** abgelegt.\
Die Entschlüsselung erfolgt mithilfe des zugehörigen Private Keys, der zentral gepflegt werden muss.
{% endhint %}

2. **Starten Sie abschließend den Loggernaut neu, um die Konfigurationen zu übernehmen.**\
   `sudo systemctl restart ngs-loggernaut`

### S3-Backup

Nutzen Sie diese Backup-Option, um Backupdateien automatisiert und sicher in einem S3-kompatiblen Speicher abzulegen. Die folgende Anleitung zeigt, wie Sie den Loggernaut entsprechend konfigurieren.

1. **Benötigte Informationen vom S3-Provider** <br>

   | Konfigurationswert | Beschreibung                                                                                                                                               |
   | ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
   | `endpoint`         | Die URL des Speicherendpunkts. Dieser kann je nach Anbieter variieren, folgt jedoch oft dem Schema: https\://(region).(s3/storage).(hostingprovider).(tld) |
   | `accessKeyId`      | Die API-Zugangskennung zur Authentifizierung.                                                                                                              |
   | `accessKeySecret`  | Der geheime Schlüssel zum API-Zugang.                                                                                                                      |
   | `region`           | Die Region des Speicherdienstes (z. B. `eu-central`).                                                                                                      |
2. Entscheiden Sie vor der Konfiguration, ob Sie eine Verschlüsselung der Backups wünschen und definieren Sie ein geeignetes Bucket-Prefix.
   1. **Verschlüsselung**\
      Sie haben die Möglichkeit, Backupdateien vor dem Upload clientseitig zu verschlüsseln. Unterstützt wird aktuell ausschließlich das AGE-Verschlüsselungsverfahren. Alternativ kann die Verschlüsselung auch deaktiviert werden.
   2. **Bucket-Prefix definieren**\
      Jeder Kunde erhält automatisch einen eigenen Bucket. Der Name ergibt sich aus folgendem Schema:

      ```
      <bucketPrefix>-<orgId>
      ```

      Beispiel: `example-siem-backup-1234abcd`

      Loggernaut prüft beim Start automatisch, ob das verwendete Prefix ein gültiger Bucketname ist.
3. **Beispielkonfigurationen**
   1. **Backup ohne Verschlüsselung**<br>

      {

      <pre><code>  "backup": {
          "strategy": "s3",
          "s3": {
            "endpoint": "eu-central.storage.s3provider.example",
            "accessKeyId": "XXXXXXXXXXXXXXXX",
            "accessKeySecret": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
            "bucketPrefix": "example-siem-backup",
            "region": "eu-central",
            "keepLocalCopy": true
          }
        }
      }
      <strong>
      </strong></code></pre>

      \
      Wird kein `encryption`-Block angegeben, erfolgt das Backup **ohne Verschlüsselung!**<br>

      **Verschlüsselung explizit deaktivieren**

      Alternativ kann die Verschlüsselung explizit ausgeschaltet werden:

      ```json
      "encryption": {
        "package": "none"
      }
      ```

      Auch ein leerer String ist möglich:

      ```json
      "package": ""
      ```
   2. **Backup mit AGE-Verschlüsselung**\
      Loggernaut unterstützt aktuell ausschließlich das Verschlüsselungspaket `age`.
      1. **Generieren eines AGE-Schlüsselpaares**

         Sie können das benötigte Schlüsselpaar wie folgt erzeugen:

         **mit AGE-CLI:**

         ```bash
         age-keygen -o key.txt
         ```

         **mit Loggernaut:**

         ```bash
         ./loggernaut -generate-age-keys
         ```

         Dabei wird ein Public-/Private-Key-Paar erzeugt. Nur der **öffentliche Schlüssel** kommt in die Konfiguration. Der private Schlüssel muss sicher aufbewahrt werden, um Backups später entschlüsseln zu können.
      2. **Konfiguration mit Verschlüsselung**

         ```json
         {
           "backup": {
             "strategy": "s3",
             "s3": {
               "endpoint": "eu-central.storage.s3provider.example",
               "accessKeyId": "XXXXXXXXXXXXXXXX",
               "accessKeySecret": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
               "bucketPrefix": "example-siem-backup",
               "region": "eu-central",
               "keepLocalCopy": true
             },
             "encryption": {
               "package": "age",
               "publickey": "age1ms3c0gmdxakx3lxzlp422g78lju4pmrse0rp6jl8lpu696yvea7qttzsl0"
             }
           }
         }
         ```

{% hint style="info" %}
**Technische Hinweise zur Verschlüsselung:**

* Aktuell wird ausschließlich das **AGE-Verschlüsselungspaket** unterstützt.
  * Ein gültiger **AGE Public Key** beginnt immer mit `age` und enthält nur Zeichen aus `[a-z0-9]`.\
    Beispiel: `age1ms3c0gmdxakx3lxzlp422g78lju4pmrse0rp6jl8lpu696yvea7qttzsl0`

Alle Organisationen auf einer SIEM-Instanz verwenden denselben Public Key zur Verschlüsselung.\
Es gibt **keine org-spezifische Schlüsselkonfiguration**, und alle Backups werden beim **gleichen S3-Provider** abgelegt.\
Die Entschlüsselung erfolgt mithilfe des zugehörigen Private Keys, der zentral gepflegt werden muss.
{% endhint %}

4. **Erweiterte Optionen**<br>

   | Option               | Beschreibung                                                                                           |
   | -------------------- | ------------------------------------------------------------------------------------------------------ |
   | `keepLocalCopy:true` | Gibt an, ob zusätzlich eine lokale Kopie der Backupdateien gespeichert werden soll (Standard: `true`). |
   | `"skipSSL": true`    | Wenn auf `true` gesetzt, wird HTTPS deaktiviert. Nur für interne Netze empfohlen!                      |

{% hint style="danger" %}
`skipSSL` sollte **nicht** aktiviert werden, wenn Backups über das öffentliche Internet übertragen werden.
{% endhint %}

## Full-Text Search Datalake

Die Full-Text Search ermöglicht es Ihnen, nach beliebigen Texten in ihren Logs zu suchen, um relevante Informationen noch schneller zu finden.  Durchsuchen Sie Logs nun gezielt nach Inhalten, ohne dabei betreffende Felder angeben zu müssen. Wodurch nun auch die Ausgabe felderübergreifender Ergebnisse möglich ist.&#x20;

{% hint style="danger" %}
Bedenken Sie bitte, dass die Aktivierung der Full-Text Search die Größe des Indexes stark vergrößern kann! Sein Sie sich im Vorhinein darüber bewusst und stellen Sie ausreichend Ressourcen zur Verfügung.
{% endhint %}

### Aktivierung bei bestehenden Accounts

1. Als bestehender Enginsight Nutzer müssen Sie zur Datei `/opt/enginsight/loggernaut/config.json` navigieren und auf der JSON-Root-Ebene den Eintrag `"fullTextSearch": true` hinzufügen.
2. Starten Sie anschließend den Loggernaut neu, um die Änderungen zu übernehmen.&#x20;

{% hint style="warning" %}
Beachten Sie zwingend, dass nur Logs, die nach der Aktivierung an das SIEM gesendet werden, über die Freitextsuche auffindbar sind. Alte Logs sind nicht durchsuchbar!
{% endhint %}

### Deaktivierung nach Neuinstallation

Falls Sie die Full-Text Search deaktivieren möchten, nehmen Sie einfach die folgende Konfiguration vor:

* in der `config.json` den Eintrag `"fullTextSearch": false` setzen.

## Backup-Log TTL

Die Backup-Log Time-to-Live (TTL) kann separat konfiguriert werden, um die Lebensdauer von Backup-Logs zu steuern. Verwenden Sie die folgende JSON-Konfiguration, um die TTL für Ihre Organisation festzulegen:

```
{
    "backup": {
        "strategy": "remove",
        "ttl": {
            "<ORGANISATIONS_ID>": <TTL_IN_TAGEN>
        }
    }
}

```

Ersetzen Sie `<ORGANISATIONS_ID>` durch die ID Ihrer Organisation und `<TTL_IN_TAGEN>` durch die gewünschte Zeitdauer in Tagen, nach der die Backup-Logs automatisch entfernt werden sollen.

#### **Beispielkonfiguration**

Diese Konfiguration ermöglicht eine präzise Verwaltung der Backup-Log-Lebensdauer gemäß Ihren Anforderungen.

Im folgenden finden Sie eine entsprechende Beispielkonfiguration für die TTL-Logfiles:

```
{
    // Obligatorische Felder in der Konfiguration (irrelevant für TTL)
    "api": {
        "url": "",
        "accessKeySecret": "",
        "accessKeyId": ""
    },
    "siem": {
        "indecees": [
            ""
        ],
        "basicAuth": {
            "username": "",
            "password": ""
        }
    },
    // TTL für rohe Backup Logs auf dem Management Server
    "backup": {
        "strategy": "<remove|sftp>",
        "ttl": {
            "<ORGANISATIONS_ID>": 90 // Angabe in Tagen
        }
    },
    // TTL von durchsuchbaren Logs im Solr-Cluster
    "ttl": {
        "<ORGANISATIONS_ID>": 30 // Angabe in Tagen
    }
}
```

{% hint style="info" %}
Bitte beachten Sie, dass die TTL (Time to Live) nur die Logs auf dem Management Server betrifft. Die Logs auf dem SFTP-Server werden vom Logger nicht mehr bearbeitet und bleiben daher unverändert. Weiterhin gilt die Anpassung nur für die jeweilige Organisation und muss im Falle pro Organisation durchgeführt werden.
{% endhint %}

{% hint style="danger" %}
Stellen Sie bitte sicher, dass Sie die Konfiguration entsprechend anpassen!
{% endhint %}

## Geosplitting

Geosplitting in einem SIEM ermöglicht es Ihnen, mehrere SIEM-Cluster mit On-Premise zu nutzen, wodurch Datenhoheit und Performance durch die ausschließliche Nutzung von nur einem einzelnen Kunden gewährleistet werden.&#x20;

{% hint style="info" %}
Geosplitting ermöglicht es Ihnen bei Bedarf auch mehrere Unterorganisationen in ein neues Cluster zu verschieben. Weiterhin haben Sie auch die Möglichkeit mehrere Cluster zu erstellen.
{% endhint %}

1. Konfigurieren Sie den Loggernaut wie gewohnt.
2. Fügen Sie Ihrer Konfiguration den Punkt: "`alternatives`" hinzu und setzen Sie die folgenden Anweisungen um:

```
"siem": {
    "management": {
      "organisation": "ORGANISATION"
    },
    "alternatives": [{
      "organisations": ["ORGANISATION_1", "ORGANISATION_2"],
      "basicAuth": {
        "username": "****",
        "password": "****"
      },
      "url": "url",
      "numShards": 2,
      "replicationFactor": 1,
      "management": {
        "organisation": "ORGANISATION"
      }
    }],
    "basicAuth": {
      "username": "*****",
      "password": "*****"
    },
    "url": "URL"
  },
```

3. Geben Sie unter den darunter folgenden Punkten die jeweiligen Informationen an:

* "`organisations`"\
  Alle dem Cluster zugehörigen Organisationen.
* "`management`"\
  Die Management-Organisation innerhalb des neuen Clusters darf den Zustand der anderen Organisationen einsehen. Dabei muss eine Organisation gewählt werden, die auch unter "`alternatives`" vorhanden ist. Ansonsten entspricht alles dem normalen SIEM-Setup.

{% hint style="warning" %}
Beachten Sie zwingend, dass keine Organisation doppelt vorkommt, also nicht gleichzeitig in zwei Clustern existiert. Alle Organisationen, die nicht in die Alternative verschoben wurden, verbleiben im Management-Cluster.
{% endhint %}
