Datenschutz + Notes: Reichweitenmessung dokumentieren

Punkt 5 beschreibt die anonyme Reichweitenmessung inkl. ASN-Einordnung;
durchgaengig "anonymisierte IP-Adresse" und expliziter Hinweis, dass auch
fuer die ASN-Bestimmung nie die volle IP verwendet wird. IPv6-
Anonymisierung auf /32 (letzte 96 Bit) korrigiert.

Notes: Migration der asn-Spalte (ALTER TABLE) und neue Env-Var
KVER_GEOIP_ASN samt GeoLite2-Bereitstellung.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-17 23:21:17 +02:00
parent 8be8ecedc9
commit c4a0c5c378
3 changed files with 53 additions and 6 deletions
+18
View File
@@ -57,6 +57,24 @@ Konfiguration über Umgebungsvariablen:
|-------------|---------------------|----------------------|
| `KVER_ADDR` | `:8080` | Listen-Adresse im Container |
| `KVER_DB` | `/app/data/kver.db` | Pfad zur SQLite-Datei |
| `KVER_GEOIP_ASN` | _(leer)_ | Pfad zur GeoLite2-ASN-`.mmdb`; leer = ASN-Auflösung aus |
## GeoLite2-ASN-Datenbank (optional)
Für die netzwerktopologische Einordnung der Impressions (Spalte `impression.asn`).
Ohne diese DB läuft alles normal weiter, die Impressions haben dann nur kein ASN.
Die `GeoLite2-ASN.mmdb` gibt es kostenlos bei MaxMind (Konto + Lizenzschlüssel,
monatliche Updates). Datei ins Daten-Volume legen und den Pfad setzen:
```sh
podman unshare cp GeoLite2-ASN.mmdb \
"$(podman volume inspect kver-data --format '{{.Mountpoint}}')/"
```
Dann `KVER_GEOIP_ASN=/app/data/GeoLite2-ASN.mmdb` setzen. Die Datei wird beim Start
einmalig gemappt; für aktualisierte Daten die Datei ersetzen und den Dienst neu
starten.
## Bestehende Daten übernehmen
+21
View File
@@ -97,3 +97,24 @@ ALTER TABLE entry ADD COLUMN deleted INTEGER NOT NULL DEFAULT 0;
```
Bestehende Beiträge bleiben damit sichtbar (`deleted = 0`). Nur einmalig ausführen.
---
## `asn`-Spalte in `impression`
**Wann:** beim Deploy der ASN-Auswertung gegen eine bestehende `impression`-Tabelle.
**Hintergrund:** Pro Impression wird das autonome System (Netzbetreiber) gespeichert,
aufgelöst aus der vollen Client-IP *vor* dem Maskieren (siehe `lookupASN`). Die Spalte
liegt bewusst **nicht** im Primärschlüssel — pro `anon_ip` ist das ASN deterministisch,
also entstehen keine Zeilen-Duplikate, und ein simples `ADD COLUMN` genügt (kein
Tabellen-Rebuild). `CREATE TABLE IF NOT EXISTS` ergänzt die Spalte bei einer
vorhandenen Tabelle nicht.
**Migration:**
```sql
ALTER TABLE impression ADD COLUMN asn TEXT NOT NULL DEFAULT '';
```
Bestehende Zeilen haben damit kein ASN (`''`, in der Auswertung „(unbekannt)"). Nur
einmalig ausführen.