DarkWolfCave
linux

Endlessh Fisher: SSH-Bots werden zu Fischen

Wolf angelt digitale Fische aus einem Server-Teich - Endlessh Fisher SSH-Bots Angelspiel
DarkWolf rockt auf der Bühne KI-Bild Generiert mit Gemini

Endlessh Fisher: SSH-Bots werden zu Fischen

„Es ist wie ein Aquarium, nur mit Botnetzen.” — So habe ich meinen Endlessh-Artikel beendet. Diesen Gedanken habe ich weitergesponnen und daraus ein vollständiges Angelspiel gemacht. In diesem Artikel zeige ich dir Endlessh Fisher — mein Open-Source-Projekt, das gefangene SSH-Bots in sammelbare Fische verwandelt.

DarkWolfCave.de

Vom Grafana-Dashboard zum Angelspiel

Wenn du Endlessh mit Grafana betreibst, kennst du das: Die Verbindungsdaten sind interessant, aber nach ein paar Tagen schaut man eher selten drauf. Zahlen in einem Dashboard allein motivieren nicht zum täglichen Reinschauen.

Was wäre, wenn jeder gefangene Bot ein Fisch wäre? Wenn die Verweildauer bestimmt, ob du Plankton oder einen Leviathan gefangen hast? Wenn es Achievements, tägliche Challenges und eine Weltkarte gäbe?

Genau das macht Endlessh Fisher. Es verbindet sich mit deiner bestehenden InfluxDB, liest die endlessh-go Metriken und verwandelt die trockenen Verbindungsdaten in ein Angelspiel mit Sammel- und Fortschrittssystem.

Wichtig: Endlessh Fisher ist kein Sicherheitstool. Es liest nur Daten, die endlessh-go bereits in deine InfluxDB schreibt. An deinem bestehenden Setup ändert sich nichts.

endlessh-go → InfluxDB → [Celery Sync alle 5 Min] → PostgreSQL → Django/HTMX
VIP Support
Wolf Support Avatar

Du wirst hier einen groben Überblick finden.
Allerdings biete ich dir auch noch etwas mehr Support an:

  • Du benötigst persönlichen Support
  • Du möchtest von Beginn an Unterstützung bei deinem Projekt
  • Du möchtest ein hier vorgestelltes Plugin durch mich installieren und einrichten lassen
  • Du würdest gerne ein von mir erstelltes Script etwas mehr an deine Bedürfnisse anpassen

Für diese Punkte und noch einiges mehr habe ich einen limitierten VIP-Tarif eingerichtet.

Falls der Tarif gerade nicht verfügbar ist, kontaktiere mich auf Discord!

Voraussetzungen

Bevor du Endlessh Fisher installierst, brauchst du drei Dinge:

Bei mir läuft Endlessh Fisher auf einem Raspberry Pi 5. Diese Hardware nutze ich dafür:

Das komplette Setup für den Raspberry Pi 5 mit NVMe Boot

Werbung

Mein Raspberry Pi 5 Setting

Bild Produkt Preis
Produktdaten werden geladen...
Letzte Aktualisierung: - | Infos zu Affiliate Links | Bilder von der Amazon Product Advertising API

Außerdem brauchst du den host_identifier deines Servers. Das ist der Hostname, unter dem endlessh-go die Daten in InfluxDB schreibt. Du findest ihn mit dieser Query in deinem InfluxDB-Container (passe Container-Name, Token, Org und Bucket an dein Setup an):

docker exec DEIN_INFLUXDB_CONTAINER influx query \
  --org DEINE_ORG \
  --token DEIN_INFLUXDB_TOKEN \
  'from(bucket:"DEIN_BUCKET")
    |> range(start:-1h)
    |> filter(fn:(r) => r._measurement == "endlessh_client_open_count")
    |> keep(columns:["host"])
    |> distinct(column:"host")'

⚠️ Wichtig: Ohne laufendes endlessh-go und InfluxDB-Daten zeigt Endlessh Fisher einen leeren Teich. Stelle sicher, dass dein Setup Daten liefert, bevor du Endlessh Fisher startest.

Installation in 5 Minuten

Repository klonen und konfigurieren

Suche dir einen Ort, an dem du deine Docker-Projekte speicherst. Bei mir auf dem Raspberry Pi ist das ~/docker/ — dort hat jeder Service sein eigenes Verzeichnis:

# In dein Docker-Verzeichnis wechseln (z.B. ~/docker/)
cd ~/docker

git clone https://github.com/DarkWolfCave/endlessh-fisher.git
cd endlessh-fisher

# Umgebungsvariablen konfigurieren
cp .env.example .env

Öffne die .env und trage deine Werte ein:

VariablePflichtBeschreibung
SECRET_KEYJaDjango Secret Key
ALLOWED_HOSTSJaKomma-getrennte Hostnamen
ADMIN_URLJaGeheimer Pfad für Django Admin
POSTGRES_PASSWORDJaPostgreSQL Passwort
REDIS_PASSWORDJaRedis Passwort
INFLUXDB_URLJaInfluxDB URL (z.B. http://influxdb:8086)
INFLUXDB_TOKENJaInfluxDB API Token
INFLUXDB_ORGJaInfluxDB Organisation
INFLUXDB_BUCKETJaInfluxDB Bucket mit endlessh Metriken
SHOW_REAL_IPNeintrue für echte IPs statt Hashes
GAME_LANGUAGENeinde (Standard) oder en
ABUSEIPDB_API_KEYNeinAPI-Key für AbuseIPDB (Free Tier: 1.000 Req/Tag)

🔒 Sicherheit: Generiere sichere Passwörter für SECRET_KEY, POSTGRES_PASSWORD und REDIS_PASSWORD. Am einfachsten mit openssl rand -hex 32.

Server-Konfiguration (servers.toml)

Jeder endlessh-Server wird in der servers.toml konfiguriert und bekommt ein eigenes Theme und eine Beschreibung:

cp servers.toml.example servers.toml
[[servers]]
slug = "mein-server"
name = "Mein Hauptserver"
host_identifier = "mein-hostname"  # Muss mit InfluxDB host-Tag übereinstimmen
description = "Tiefe Gewässer, viel Verkehr."
pond_theme = "ocean"

Du kannst beliebig viele Server eintragen. Jeder bekommt sein eigenes Theme:

ThemeBeschreibung
oceanTiefsee-Optik mit dunklem Blau
lakeRuhiger See mit Grüntönen
reefKorallenriff mit bunten Farben

Stack starten

Die Standard-Konfiguration exponiert Port 8100 — du kannst Endlessh Fisher direkt im Browser aufrufen oder einen Reverse Proxy (Nginx, Caddy, Traefik) davorsetzen.

# Container bauen und starten — Datenbank, Spielinhalte und Server werden automatisch eingerichtet
docker compose -f docker-compose.prod.yml up -d

Der Docker-Entrypoint erledigt beim Start automatisch drei Dinge: Datenbank-Migrationen, Spielinhalte laden (Fischarten, Achievements, Challenges, Schätze) und Server aus der servers.toml importieren. Du musst nichts manuell ausführen.

Danach erreichst du Endlessh Fisher unter http://deine-ip:8100.

💡 Weitere Server hinzufügen? Trage neue [[servers]]-Blöcke in die servers.toml ein und führe erneut setup_servers aus — die bestehenden Daten bleiben erhalten.

💡 Port belegt? Falls Port 8100 bei dir schon verwendet wird, ändere die Zeile "8100:8000" in der docker-compose.prod.yml auf einen freien Port, z.B. "8200:8000". Die 8000 rechts bleibt immer gleich — das ist der interne Container-Port.

Die Fischarten — Von Plankton bis Leviathan

Die zentrale Spielmechanik: Je länger ein Bot im Tarpit hängen bleibt, desto wertvoller ist der „Fisch”, den du dafür bekommst. Die Verweildauer bestimmt die Art:

FischartVerweildauerSeltenheitPunkte
Plankton0 – 30 sCommon1
Sardine30 s – 2 minCommon2
Sardelle2 – 10 minCommon5
Regenbogenforelle10 – 30 minUncommon10
Hecht30 min – 1 hUncommon20
Atlantischer Lachs1 – 4 hRare50
Thunfisch4 – 12 hRare100
Schwertfisch12 h – 1 dEpic250
Blauer Marlin1 – 3 dEpic500
Walhai3 – 7 dLegendary1.000
Kraken7 – 14 dLegendary2.500
Leviathan14 d+Mythic5.000

In der Praxis wirst du hauptsächlich Plankton und Sardinen fangen — die meisten Bots brechen innerhalb der ersten zwei Minuten ab. Wenn ein Bot es bis zum Atlantischen Lachs schafft (über 1 Stunde), ist das schon ein guter Fang. Alles darüber hinaus kommt selten vor, macht aber den Reiz aus.

💡 Aus der Praxis: Bei meinen Servern sind über 80% der Fänge Plankton oder Sardinen. Ein Lachs pro Woche ist ein guter Schnitt. Schwertfisch oder besser? Das kommt selten vor — und genau deshalb freut man sich dann richtig.

Features im Überblick

Live-Aquarium-Dashboard

Das Dashboard zeigt deinen Angelteich mit animierten Fischen. Jeder Fisch repräsentiert einen aktuell gefangenen Bot — je seltener die Art, desto auffälliger die Animation. Über HTMX aktualisiert sich das Dashboard automatisch alle 15–60 Sekunden, ohne die Seite neu zu laden.

Wenn du mehrere Server betreibst, landen alle Fänge in einem gemeinsamen Teich. Die Server-Info-Karten auf dem Dashboard zeigen dir trotzdem die individuellen Statistiken pro Server — wie viele Bots, welche Fischarten und wie viel Tarpit-Zeit jeder einzelne beigesteuert hat.

Achievement-System

Endlessh Fisher hat über 50 Achievements in 9 Kategorien, gestaffelt von Bronze bis Diamond:

KategorieBeispiele
Erste SchritteErster Fang, 100 Bots, 10.000 Bots
Zeitverschwender1 Stunde Bot-Zeit, 30 Tage, 3 Jahre kumuliert
Geduld ist eine TugendEinzelnen Bot 1 Minute, 1 Stunde, 7 Tage halten
WeltreisenderBots aus 10, 30, 100 Ländern
Sammler3, 6, 9 oder alle 12 Fischarten gefangen
Server-Meister50, 250, 1.000 Bots auf jedem Server
Datenhamster1 KB, 1 MB, 1 GB Tarpit-Daten gesendet
SchatzjägerSchätze sammeln, Challenges abschließen
Cyber-ErmittlerIP-Analysen, Tor-Nodes, Schwachstellen finden

Achievements werden alle 10 Minuten automatisch geprüft. Neue Freischaltungen erscheinen als Benachrichtigung im Dashboard.

Tägliche Challenges und Schätze

Jeden Tag generiert Endlessh Fisher drei neue Herausforderungen — jeweils eine leichte, eine mittlere und eine schwere. Beispiele: „Fange heute 30 Bots”, „Fange Bots aus 5 verschiedenen Ländern” oder „Verschwende 24 Stunden Bot-Zeit”. Jede erledigte Challenge gibt Bonuspunkte.

Parallel dazu tauchen im Teich Schätze auf — von Treibholz über Perlen bis zum Goldenen Kompass. Der seltenste Schatz ist der Wolfskopf 🐺 — er erscheint nur, wenn dein Teich ungewöhnlich voll ist. Die Schwellwerte passen sich automatisch an dein Setup an: Ob du 3 oder 300 gleichzeitige Bots hast, der Wolfskopf bleibt gleich selten. Jeder Schatz enthält einen echten Security-Tipp mit konkreten Befehlen und Konfigurationshinweisen. So lernst du nebenbei etwas über SSH-Härtung, Firewalls oder Backup-Strategien.

IP Intelligence und Weltkarte

Per Klick auf einen gefangenen Bot zeigt Endlessh Fisher Informationen über die Quell-IP. Die kostenlose Shodan InternetDB liefert offene Ports, bekannte Schwachstellen und Tags (z.B. ob die IP ein Tor-Exit-Node ist). Optional kannst du einen AbuseIPDB API-Key hinterlegen — dann siehst du zusätzlich den Abuse-Score und die Anzahl der Meldungen.

Voraussetzung dafür: Die IP-Adressen müssen im Klartext vorliegen. Standardmäßig hasht Endlessh Fisher alle IPs mit SHA256 — damit sind keine externen Lookups möglich. Wenn du IP Intelligence nutzen willst, setze SHOW_REAL_IP=true in deiner .env. Das ist nur für private Instanzen gedacht, die nicht öffentlich erreichbar sind.

Die Weltkarte zeigt die Herkunftsländer aller gefangenen Bots. In der Praxis dominieren China, die USA und Russland, aber gelegentlich tauchen auch überraschende Herkunftsländer auf.

Für Fortgeschrittene: Traefik und API

Traefik mit automatischem TLS

Wenn du bereits Traefik als Reverse Proxy einsetzt, gibt es eine fertige Compose-Konfiguration mit Blue-Green Deployment und automatischen Let’s Encrypt Zertifikaten.

Trage dafür die Traefik-Einstellungen in deine .env ein — passe die Werte an dein bestehendes Setup an:

# Traefik-Konfiguration
GAME_DOMAIN=endlessh.deine-domain.de
TRAEFIK_NETWORK=proxy           # Name deines Traefik Docker-Netzwerks
TRAEFIK_ENTRYPOINT=websecure    # HTTPS-Entrypoint in deiner Traefik-Config
TRAEFIK_TLS=true                # Auf false setzen für HTTP-only (z.B. lokales Netz)
CERT_RESOLVER=letsencrypt       # Name deines Traefik Certificate Resolvers

💡 Tipp: Den Namen deines Traefik-Netzwerks findest du mit docker network ls | grep traefik. Gängige Namen sind proxy, traefik_network oder web. Der Entrypoint steht in deiner traefik.yml unter entryPoints — üblich sind websecure oder https.

Stelle sicher, dass ein DNS-Eintrag für deine GAME_DOMAIN auf die IP deines Servers zeigt — entweder als A-Record bei deinem DNS-Provider oder lokal über /etc/hosts bzw. Pi-hole.

Dann starte den Stack — die Einrichtung läuft automatisch:

# Container bauen und starten — Datenbank, Spielinhalte und Server werden automatisch eingerichtet
docker compose -f docker-compose.prod.traefik.yml up -d

REST API

Endlessh Fisher bietet eine read-only REST API für alle Spieldaten:

EndpointBeschreibung
/api/v1/health/Health Check
/api/v1/dashboard/Dashboard-Statistiken
/api/v1/catches/Gefangene Bots (filterbar)
/api/v1/species/Fischarten mit Details
/api/v1/achievements/Achievements mit Freischaltstatus

Alle Endpoints liefern JSON und sind ohne Authentifizierung zugänglich. Die API ist bewusst read-only — es gibt keine schreibenden Endpunkte.

Datenschutz und Sicherheit

Datenschutz war von Anfang an ein zentrales Designprinzip:

  • IP-Hashing: Alle IP-Adressen werden standardmäßig mit SHA256 gehasht, bevor sie gespeichert werden. Optional kannst du mit SHOW_REAL_IP=true echte IPs anzeigen lassen — zum Beispiel auf einem privaten Server ohne Zugang von außen.
  • Keine externen Ressourcen: Tailwind CSS, Alpine.js und HTMX sind alle lokal eingebunden. Es werden keine CDNs, Google Fonts oder externe Tracking-Dienste geladen.
  • Keine Authentifizierung nötig: Endlessh Fisher hat kein User-System und speichert keine personenbezogenen Daten von Besuchern.

🔒 Privacy-by-Default: Endlessh Fisher ist so gebaut, dass es ohne Konfiguration DSGVO-freundlich läuft. Du musst nichts extra einschalten — IPs werden automatisch gehasht und es gibt keine externen Requests.

Meine Erfahrungen

Ich habe Endlessh Fisher auf meinem Raspberry Pi laufen und schaue tatsächlich jeden Morgen als erstes auf den Teich. Das hat sich einfach eingeschlichen. Vorher habe ich vielleicht einmal pro Woche ins Grafana-Dashboard geschaut — jetzt will ich sehen, ob über Nacht ein seltener Fisch reingeschwommen ist.

Die Achievements sorgen für einen überraschenden Motivationsschub. Als ich das „Globetrotter”-Achievement (Bots aus 30 Ländern) freigeschaltet habe, hat mich das mehr gefreut als jede Grafana-Statistik. Und die täglichen Challenges geben dem Ganzen eine Struktur — auch wenn man natürlich keinen Einfluss darauf hat, wie viele Bots heute vorbeikommen.

Realistisch gesehen ist der Teich die meiste Zeit voller Plankton und Sardinen. Aber genau das macht die seltenen Fänge wertvoll. Wenn ein Bot mal 12 Stunden in der Verbindung bleibt und als Schwertfisch klassifiziert wird — das ist ein Highlight für die ganze Woche.

Am Ende ist es immer noch das gleiche Prinzip wie damals mit dem Grafana-Dashboard: Du beobachtest das Grundrauschen des Internets. Nur dass es jetzt ein Angelspiel ist, statt einer Zeile in einer Grafik. Das Aquarium mit Botnetzen hat ein Upgrade bekommen.

Ausprobieren und Mitentwickeln

Endlessh Fisher ist Open Source und auf GitHub verfügbar:

github.com/DarkWolfCave/endlessh-fisher

Falls du Bugs findest, Feature-Ideen hast oder etwas beitragen möchtest — Issues und Pull Requests sind willkommen.

Wenn du mit endlessh-go und InfluxDB schon arbeitest, brauchst du für Endlessh Fisher nur 5 Minuten. Und falls du endlessh noch nicht kennst: Im Endlessh-Artikel findest du die komplette Einrichtung. Die Grundlagen für Docker, InfluxDB und Grafana gibt es in der Monitoring-Anleitung.

Hast du schon einen Leviathan gefangen? Oder vielleicht sogar den legendären Wolfskopf im Teich entdeckt?

FAQ - Frequently Asked Questions DarkWolfCave
DarkWolf hilft bei FAQs

Häufig gestellte Fragen

Was ist Endlessh Fisher?
Endlessh Fisher ist ein Open-Source-Projekt, das die Daten deines endlessh-go SSH-Tarpits in ein Angelspiel verwandelt. Gefangene SSH-Bots werden anhand ihrer Verweildauer in Fischarten eingeteilt — von Plankton (unter 30 Sekunden) bis Leviathan (über 14 Tage). Es ist kein Sicherheitstool, sondern eine Gamification-Schicht für dein bestehendes Setup.
Brauche ich endlessh-go und InfluxDB?
Ja, beide sind Voraussetzung. Endlessh Fisher liest die Bot-Daten aus InfluxDB, die von endlessh-go dort geschrieben werden. Ohne diese Datenquelle hat Endlessh Fisher keine Daten zum Anzeigen.
Ist Endlessh Fisher DSGVO-konform?
Ja. Alle IP-Adressen werden standardmäßig mit SHA256 gehasht. Es werden keine externen Ressourcen geladen — Tailwind CSS, Alpine.js und HTMX sind alle self-hosted. Es gibt kein Tracking und keine externen Fonts.
Kann ich mehrere Server überwachen?
Ja, Endlessh Fisher unterstützt Multi-Server-Setups. Alle Fänge landen in einem gemeinsamen Teich, aber die Server-Info-Karten zeigen dir die individuellen Statistiken pro Server.
Welche Fischarten gibt es?
Es gibt 12 Fischarten von Common bis Mythic: Plankton, Sardine, Sardelle, Regenbogenforelle, Hecht, Atlantischer Lachs, Thunfisch, Schwertfisch, Blauer Marlin, Walhai, Kraken und Leviathan. Die Einstufung basiert auf der Verweildauer des Bots im Tarpit.
Kann ich Endlessh Fisher ohne Docker betreiben?
Theoretisch ja — es ist eine Django-Anwendung mit PostgreSQL und Redis. Docker wird aber empfohlen, da das Setup damit in wenigen Minuten läuft und alle Abhängigkeiten enthalten sind.
Was bringt die IP Intelligence Funktion?
Per Klick auf einen gefangenen Bot fragt Endlessh Fisher die Shodan InternetDB ab und zeigt offene Ports, bekannte Schwachstellen und Tags. Optional kannst du einen AbuseIPDB API-Key hinterlegen für detaillierte Abuse-Scores. Voraussetzung ist SHOW_REAL_IP=true in der .env, da mit gehashten IPs keine externen Lookups möglich sind.

Kommentare

URLs werden automatisch verlinkt
Kommentare werden geladen...