Release 1.0.0
This commit is contained in:
1
.gitattributes
vendored
Normal file
1
.gitattributes
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
* text=auto eol=lf
|
||||||
7
02-immich-whitelist.yaml
Normal file
7
02-immich-whitelist.yaml
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
name: crowdsecurity/immich-whitelists
|
||||||
|
description: "Whitelist false positive from Immich-api"
|
||||||
|
filter: "evt.Meta.http_path != ''"
|
||||||
|
whitelist:
|
||||||
|
reason: "Whitelist false positive from Immich-api"
|
||||||
|
expression:
|
||||||
|
- evt.Meta.http_verb == 'GET' && evt.Meta.http_path matches '/api/assets/[a-f0-9-]+/thumbnail'
|
||||||
28
README.md
28
README.md
@@ -1,11 +1,35 @@
|
|||||||
# template_repository
|
# CrowdSec Parser-Whitelist für Immich
|
||||||
|
|
||||||
|
Eine Parser-Whitelist für [CrowdSec](https://www.crowdsec.net/), die legitime Immich-API-Anfragen in NPMplus-Logs vom Parsen ausschließt.
|
||||||
|
Damit wird verhindert, dass Thumbnail-Requests fälschlicherweise als verdächtig eingestuft werden.
|
||||||
|
|
||||||
|
## Überblick
|
||||||
|
|
||||||
|
| Pfad-Pattern | Beschreibung |
|
||||||
|
|---|---|
|
||||||
|
| `/api/assets/<uuid>/thumbnail` | Immich Asset-Thumbnails (GET) |
|
||||||
|
|
||||||
Wichtig: Link für Lizenz anpassen.
|
## Schnellstart
|
||||||
|
|
||||||
|
1. Datei kopieren:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cp 02-immich-whitelist.yaml /etc/crowdsec/parsers/s02-enrich/02-immich-whitelist.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
2. CrowdSec neu starten:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker restart crowdsec
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Funktion prüfen:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker exec crowdsec cscli metrics
|
||||||
|
```
|
||||||
|
|
||||||
|
Detaillierte Anleitung: [docs/installation.md](docs/installation.md)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="https://assets.techniverse.net/f1/git/graphics/gray0-catonline.svg" alt="">
|
<img src="https://assets.techniverse.net/f1/git/graphics/gray0-catonline.svg" alt="">
|
||||||
|
|||||||
103
docs/installation.md
Normal file
103
docs/installation.md
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
# Installation & Konfiguration
|
||||||
|
|
||||||
|
## Voraussetzungen
|
||||||
|
|
||||||
|
- CrowdSec (als Docker-Container oder nativ installiert)
|
||||||
|
- NPMplus als Reverse Proxy mit aktiviertem Logging
|
||||||
|
- Immich (Docker-Setup)
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
### 1. Whitelist-Datei kopieren
|
||||||
|
|
||||||
|
Die YAML-Datei muss in das CrowdSec Parser-Verzeichnis `s02-enrich` kopiert werden:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cp s02-enrich/immich-whitelist.yaml /etc/crowdsec/parsers/s02-enrich/immich-whitelist.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
> **Hinweis:** Bei einer Docker-Installation liegt das Verzeichnis im gemappten Volume, z. B.
|
||||||
|
> `./data/crowdsec/config/parsers/s02-enrich/`
|
||||||
|
|
||||||
|
### 2. CrowdSec neu starten
|
||||||
|
|
||||||
|
Damit die Whitelist geladen wird, muss CrowdSec neu gestartet werden:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker restart crowdsec
|
||||||
|
```
|
||||||
|
|
||||||
|
## Überprüfung
|
||||||
|
|
||||||
|
### Parser testen
|
||||||
|
|
||||||
|
Mit `cscli explain` kann geprüft werden, ob die Whitelist auf eine echte Log-Zeile greift:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
grep '/api/assets/' /home/docker-projekte/npmplus/data/npmplus/nginx/logs/access.log \
|
||||||
|
| tail -n 1 \
|
||||||
|
| docker exec -i crowdsec cscli explain -f- --type npmplus
|
||||||
|
```
|
||||||
|
|
||||||
|
In der Ausgabe sollte die Whitelist als Treffer erscheinen, z. B.:
|
||||||
|
|
||||||
|
```
|
||||||
|
├ s02-enrich
|
||||||
|
| ├ ☑ crowdsecurity/whitelists
|
||||||
|
| ├ ☑ crowdsecurity/immich-whitelists ✅ (whitelisted)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Metriken prüfen
|
||||||
|
|
||||||
|
Die Wirkung ist in den CrowdSec-Metriken sichtbar:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker exec crowdsec cscli metrics
|
||||||
|
```
|
||||||
|
|
||||||
|
Beispielausgabe:
|
||||||
|
|
||||||
|
```
|
||||||
|
+--------------------------------------------------------------------------------------------+
|
||||||
|
| Whitelist Metrics |
|
||||||
|
+------------------------------------+----------------------------------+------+-------------+
|
||||||
|
| Whitelist | Reason | Hits | Whitelisted |
|
||||||
|
+------------------------------------+----------------------------------+------+-------------+
|
||||||
|
| crowdsecurity/immich-whitelists | Whitelist false positive from | 312 | 298 |
|
||||||
|
| | Immich-api | | |
|
||||||
|
+------------------------------------+----------------------------------+------+-------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
Die Spalte **Whitelisted** zeigt an, wie viele Log-Zeilen durch die Whitelist herausgefiltert wurden.
|
||||||
|
|
||||||
|
## Funktionsweise
|
||||||
|
|
||||||
|
Die Whitelist arbeitet als CrowdSec-Parser in der Stufe `s02-enrich`. Sie prüft eingehende Log-Events anhand folgender Kriterien:
|
||||||
|
|
||||||
|
**Filter:** Die Whitelist verwendet `evt.Meta.http_path != ''` als Filter und greift damit auf alle Events mit geparsten HTTP-Daten. Die eigentliche Filterung erfolgt über die Whitelist-Expressions.
|
||||||
|
|
||||||
|
**Whitelist-Regeln:** GET-Anfragen auf Thumbnail-Endpunkte der Immich-API werden als legitim eingestuft:
|
||||||
|
|
||||||
|
| Pfad-Pattern | Beschreibung |
|
||||||
|
|---|---|
|
||||||
|
| `/api/assets/<uuid>/thumbnail` | Immich Asset-Thumbnails (UUID-basiert) |
|
||||||
|
|
||||||
|
## Anpassung
|
||||||
|
|
||||||
|
### Weitere Pfade hinzufügen
|
||||||
|
|
||||||
|
Die Datei kann bei Bedarf um weitere Immich-API-Pfade erweitert werden. Dazu einfach weitere Einträge unter `expression` hinzufügen:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
whitelist:
|
||||||
|
reason: "Whitelist false positive from Immich-api"
|
||||||
|
expression:
|
||||||
|
- evt.Meta.http_verb == 'GET' && evt.Meta.http_path matches '/api/assets/[a-f0-9-]+/thumbnail'
|
||||||
|
- evt.Meta.http_verb == 'GET' && evt.Meta.http_path startsWith '/api/assets'
|
||||||
|
```
|
||||||
|
|
||||||
|
Nach jeder Änderung muss CrowdSec neu gestartet werden:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker restart crowdsec
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user