Honeypot64 Vorschau

Honeypot64 stellt Fallen-Dienste auf, die Angreifer aus dem Internet anlocken: SSH, Telnet, Web-Logins, Mail, FTP, Datenbanken, RDP, VNC, MQTT, SNMP, SIP und beliebige TCP-Ports. Jede Berührung wird erfasst und ausgewertet – wer anklopft, welche Zugangsdaten probiert werden und welche Web-Angriffe unterwegs sind. Auf Wunsch liest es dazu die Logs deiner echten Dienste und Syslog von Router und Firewall. Es läuft als Modul in Node64 oder als reiner Sensor ohne Oberfläche, auch auf einem kleinen Raspberry Pi.

Vorschau

Ereignisse werden lokal gespeichert und ausgewertet. Ab Version 0.2.0 kannst du sie zusätzlich an ipv64.net melden (Opt-in, siehe Meldung an ipv64). Daraus entsteht die v64 Blocklist.

Übersicht von Honeypot64 mit Fallen-Diensten, Kennzahlen und VerlaufÜbersicht von Honeypot64 mit Fallen-Diensten, Kennzahlen und Verlauf

So funktioniert es

Auf den Fallen-Ports läuft kein echter Dienst. Wer sie anspricht, tut das ungefragt – jede Verbindung ist deshalb verdächtig. Honeypot64 ist ein Low-Interaction-Honeypot:

  • Logins werden angenommen und immer abgelehnt. Benutzername und Passwort werden erfasst.
  • Es gibt keine Shell, es wird nichts ausgeführt und nichts heruntergeladen.
  • Die Fallen bauen keine ausgehenden Verbindungen auf. Nach außen geht nur die optionale Meldung an ipv64.
  • Limits je Quell-IP und insgesamt schützen die Node vor Überlast.
  • Ist das Modul aus, ist kein Port offen und es läuft nichts.

Schnellstart

Zwei Wege, beide mit dem Profil Standard (18 Fallen). Lies vorher kurz Sicherheit und Portfreigabe – am besten läuft der Honeypot auf einem eigenen Gerät in einem abgetrennten Netz.

Variante A: reiner Sensor ohne Oberfläche

Für ein eigenes Gerät, etwa einen Raspberry Pi. Ein Befehl, fertig:

bash
docker run -d --name honeypot64 --network host --restart unless-stopped \
  -e NODE64_MODE=honeypot -e NODE64_HONEYPOT_PROFILE=standard \
  -v honeypot64:/data ghcr.io/ipv64net/node64:latest

Damit sind alle Fallen des Profils offen. Den Zustand zeigt die Info-Seite http://<IP des Geräts>:9064/ – nur aus dem Heimnetz. Als Compose-Datei:

yaml
services:
  honeypot64:
    image: ghcr.io/ipv64net/node64:latest
    network_mode: host
    restart: unless-stopped
    environment:
      NODE64_MODE: honeypot
      NODE64_HONEYPOT_PROFILE: standard   # oder: minimal, full
      # NODE64_IPV64_KEY: DEIN_API_KEY    # optional: Meldung an ipv64 einschalten
    volumes:
      - honeypot64:/data
volumes:
  honeypot64:

Alle Fallen statt Standard: NODE64_HONEYPOT_PROFILE=full. Weitere Variablen unter Modus ohne Oberfläche.

Variante B: als Modul in Node64 mit Oberfläche

Die Oberfläche legst du auf einen ungewöhnlichen Port, damit 8080 für die Falle frei bleibt:

bash
docker run -d --name node64 --network host --restart unless-stopped \
  -e NODE64_HTTP_PORT=18080 \
  -v node64-data:/data ghcr.io/ipv64net/node64:latest
  1. http://<IP>:18080 öffnen und das Admin-Konto anlegen.
  2. Einstellungen → Module → Modul Honeypot64 einschalten.
  3. Honeypot64 → Einstellungen → Vorlage Standard (oder Voll) → Speichern. Erst jetzt öffnen sich die Fallen.
  4. In der Übersicht prüfen, dass alle Dienste „offen“ sind.

Laufen auf derselben Node PROXY64 oder DNS64, lässt das Profil deren Ports weg (80/443 bzw. 53/853). Für alle Fallen-Ports nimmst du eine eigene Honeypot-Node.

Ports für die Portfreigabe

Diese Ports leitest du am Router an das Gerät mit dem Honeypot weiter:

ProfilTCPUDP
Minimal22, 80–
Standard21, 22, 23, 25, 80, 143, 443, 1883, 2222, 3306, 3389, 5900, 6379, 8006, 8080, 8123, 8291, 8728–
Voll21, 22, 23, 25, 80, 110, 143, 443, 445, 587, 1433, 1883, 2222, 2323, 2375, 3000, 3306, 3389, 4444, 5000, 5001, 5432, 5900, 6379, 8006, 8007, 8080, 8123, 8291, 8443, 8728, 8729, 9200, 9443, 10000, 10250, 10443, 27017161, 5060

Nie freigeben: den Port der Oberfläche (im Beispiel 18080) und die Info-Seite 9064. Ohne Host-Netz brauchst du für jeden Port ein -p (UDP mit /udp); dann sehen manche Docker-Versionen nicht die echten Quell-Adressen.

Sicherheit und Portfreigabe

Fallen-Dienste sind von außen sichtbar – genau dafür sind sie da

Ein Honeypot nützt nur, wenn Angreifer ihn erreichen. Dafür gibst du am Router Ports frei. Ab dann erreicht jeder im Internet diese Ports. Beachte deshalb:

  • Auf den Fallen-Ports dürfen nie echte Dienste laufen – kein SSH, keine Weboberfläche, keine Datenbank.
  • Gib nur die Ports frei, die der Honeypot nutzen soll. Nie den Port der Node64-Oberfläche und nie die Info-Seite (9064).
  • Am besten läuft der Honeypot auf einem eigenen Gerät oder einer eigenen VM in einem abgetrennten Netz (DMZ oder VLAN), nicht auf dem Rechner mit deinen Daten.
  • Die erfassten Inhalte stammen von Angreifern (Benutzernamen, Pfade, User-Agents, Payloads). Node64 zeigt sie maskiert und gekürzt. Trotzdem gilt: nichts davon anklicken, kopieren oder ausführen.

Ein Sensor, der nur im Heimnetz erreichbar ist, sieht fast nichts. Typische Freigaben sind 22, 23, 80, 443, 2222 und 3389 – jeweils an das Gerät mit dem Honeypot.

Einschalten

  1. In Node64 unter Einstellungen → Module das Modul Honeypot64 einschalten (standardmäßig aus). Danach erscheint der Menüpunkt Honeypot64.
  2. Im Reiter Einstellungen schaltest du im Dienste-Katalog die gewünschten Fallen ein – einzeln oder per Vorlage Minimal, Standard oder Voll – und speicherst. Mit der Voreinstellung Nur über PROXY64 öffnet der Honeypot gar keine eigenen Ports. Erst dann öffnet Honeypot64 Ports – vorher bleibt alles zu, auch beim ersten Einschalten.
  3. Im Reiter Übersicht siehst du, welche Fallen offen sind und ob ein Port nicht geöffnet werden konnte.
  4. Gib die gewünschten Ports am Router frei (siehe Sicherheit) und prüfe, dass die Ports die Node erreichen (siehe Ports).

Profile

ProfilDienste und PortsGut für
MinimalSSH 22, HTTP 80kleine Geräte
StandardSSH 22 und 2222, Telnet 23, HTTP 80, 8080 und 8123, HTTPS 443 und 8006, FTP 21, SMTP 25, IMAP 143, MQTT 1883, MySQL 3306, Redis 6379, RDP 3389, VNC 5900, MikroTik-API 8728, TCP 8291 (Winbox)der Einstieg mit eigenen Ports
Vollwie Standard, dazu Telnet 2323, SMTP 587, POP3 110, MSSQL 1433, PostgreSQL 5432, MikroTik-API mit TLS 8729, SNMP UDP 161, SIP UDP 5060, HTTP 2375, 3000, 5000, 9200, HTTPS 4444, 5001, 8007, 8443, 9443, 10000, 10250, 10443 und TCP 445, 27017möglichst viel sehen
Nur über PROXY64keine eigenen Ports; der Honeypot bekommt nur, was PROXY64 weitergibt – siehe Zusammenarbeit mit PROXY64Nodes mit PROXY64 (Voreinstellung)
Eigene Auswahleigene Liste, siehe Dienstegenau deine Ports

In der Oberfläche sind die Profile die Vorlagen im Dienste-Katalog. Entspricht deine Auswahl genau einem Profil, wird sie als dieses Profil gespeichert – neue Dienste späterer Versionen kommen dann von selbst dazu; sonst als eigene Liste. Ports, die ein anderer Teil von Node64 schon offen hat, lässt ein Profil weg – siehe Ports.

Nur über PROXY64 ist die Voreinstellung, solange du noch nichts gespeichert hast; eine gespeicherte Vorlage oder eigene Auswahl bleibt. Schaltest du dazu Dienste im Katalog ein, wird daraus eine eigene Auswahl.

Dienste

DienstWas passiertWas erfasst wird
sshSSH-Server mit eigenem Host-Schlüssel; jeder Login wird abgelehntBenutzername, Passwort, Client-Version
telnetLogin-Aufforderung; jeder Login wird abgelehntBenutzername, Passwort
http, httpsneutrale Login-Seite als Köder; HTTPS mit eigenem ZertifikatPfad, User-Agent, Login-Versuche, Einordnung der Web-Angriffe
ftp, smtp, pop3, imap, mqttLogin-Fallen; jede Anmeldung wird abgelehnt. SMTP nimmt AUTH PLAIN/LOGIN an, leitet nie Mails weiter und erfasst Relay-Versuche. Mit TLS gibt es smtps (465), imaps (993) und pop3s (995) – in keinem Profil, nur per eigener Auswahl, auf Wunsch mit gültigem Zertifikat.Benutzername, Passwort
postgres, mysql, mssql, redisDatenbank-Fallen; jede Anmeldung wird abgelehnt. Redis-Befehle, die die Konfiguration ändern würden, gelten als Angriff.Benutzername, Passwort (MySQL: Passwort nur, wenn der Client auf Klartext wechselt)
rdp, vnc, mikrotik-apiFernzugriff; RDP liest den Benutzernamen aus dem Verbindungsaufbau, VNC erfasst den Anmeldeversuch, die MikroTik-API (auch mit TLS) Benutzer und PasswortBenutzername bzw. Versuch
snmp, sip (UDP)SNMP antwortet nie, SIP nur kurz und nie größer als die Anfrage – kein Missbrauch als VerstärkerCommunity-Strings, SIP-Benutzername, Scanner
tcpnimmt Verbindungen auf einem beliebigen Port andie ersten Bytes, z. B. den RDP-Benutzernamen

In der Oberfläche wählst du die Dienste unter Honeypot64 → Einstellungen in einem Katalog aller Fallen, nach Gruppen geordnet (Fernzugriff, Web, Mail, Datenbanken, Router/IoT, Sonstiges):

  • je Dienst ein Schalter, der Port (änderbar), bei http/https der Köder und der Zustand des Ports – frei, offen, Fehler oder „belegt von …“ (TCP und UDP getrennt: udp 161 und tcp 161 vertragen sich),
  • die Knöpfe Minimal, Standard und Voll füllen den Katalog wie das Profil, Alle freien einschalten nimmt jeden freien Port dazu, Alle aus leert ihn, Nur über PROXY64 wählt die Vorlage ohne eigene Ports – gespeichert wird erst mit „Speichern“,
  • unter Weitere Einträge läuft ein Dienst mehrfach, z. B. ssh auf 22 und 2200.
Dienste-Katalog mit Schalter, Port, Köder und Zustand je Fallen-DienstDienste-Katalog mit Schalter, Port, Köder und Zustand je Fallen-Dienst

Unter Erweitert gibt es weiter die Textliste – je Zeile Dienst und Port, bei http/https optional ein Köder:

text
ssh 2222
telnet 2323
http 8081 wp-login
https 8443
smtp 587
imap 143
postgres 5432
rdp 3389
snmp 161
KöderSieht aus wie
genericeine schlichte Login-Seite (Standard)
wp-logindie Anmeldung eines Blogs (/wp-login.php)
phpmyadmineine Datenbank-Verwaltung
admineine Admin-Anmeldung
pve, pbs, nas, unifi, sslvpn, grafana, jenkins, portainer, homeassistant, webmin, docker, elastic, kubeletfeste Köder je Oberfläche: Proxmox VE und Backup Server, NAS, UniFi, SSL-VPN/Firewall-Portal, Grafana, Jenkins, Portainer, Home Assistant, Webmin, Docker-API ohne TLS, Elasticsearch, Kubernetes-Kubelet – die Profile nutzen sie auf den passenden Ports

Fingerabdrücke: Bei HTTPS (und TLS an TCP-Ports) entsteht ein JA4-, bei SSH ein HASSH-Fingerabdruck des Angriffswerkzeugs. Er steht an jedem Ereignis, in einer eigenen Rangliste und geht mit der Meldung an ipv64. UDP: SNMP und SIP laufen über UDP – ohne Host-Netz veröffentlichst du die Ports mit /udp (-p 161:161/udp -p 5060:5060/udp).

Geräte-Logins: Die Web-Köder beantworten auch die Login-Aufrufe verbreiteter Geräte und Oberflächen – Router wie FRITZ!Box, Speedport und OpenWrt, Firewalls und SSL-VPN, NAS, UniFi, Home Assistant, Proxmox, Grafana, Jenkins, Webmin und Portainer. Sie antworten mit einer schlichten Ablehnung im passenden Format und erfassen die Zugangsdaten; das Gerät steht im Detail (device=…). Nachbauten der Herstellerseiten oder Logos gibt es bewusst nicht – Bots greifen die Adressen an, nicht die Optik.

Unbekannte Dienste, ungültige oder doppelte Ports und ein Köder bei einem anderen Dienst als http/https sind ein Fehler am Feld.

Dienst-Profile

Jede Falle gibt sich als ein bestimmter Dienst aus, damit Scanner sie richtig einordnen. Geändert wird nur, was die Falle sendet – erfasst wird bei jedem Profil dasselbe.

DienstProfile (Standard fett)Was die Falle sendet
SSHOpenSSH (Debian 12 oder Ubuntu 24.04, je Sensor), OpenSSH Debian, OpenSSH Ubuntu, DropbearBanner, Schlüsseltausch, Verfahren und Host-Schlüssel (RSA, ECDSA, Ed25519) in der Reihenfolge des Originals
TelnetBusyBox, Linux<host> login:, beim Linux-Profil vorher Debian GNU/Linux 12 bzw. Ubuntu 24.04 LTS; Telnet-Optionen wie das Original
MySQLMySQL 8.0, MariaDB 10.11, MariaDB 11.4Version, Fähigkeiten, Zeichensatz und Anmeldeverfahren passend zur Version
HTTP/HTTPSnginx, Apache, Proxmox VE, Webmin, Home Assistant, Grafana, NAS, ElasticsearchServer-Kopf, Fehlerseiten, Status und API-Antworten wie das Original ohne Anmeldung, schlichte Seiten mit Titel, passendes Zertifikat – ohne Logos
  • Standard je Port: 8006 Proxmox VE, 10000 Webmin, 8123 Home Assistant, 3000 Grafana, 5000/5001 NAS, 9200 Elasticsearch, alle anderen Web-Ports nginx. Webserver-Profile (nginx, Apache) zeigen die Köder je Pfad; Anwendungen antworten wie das Original, etwa Proxmox auf /api2/json/… mit 401.
  • Auswahl: In der Tabelle der Fallen-Dienste wählt die Spalte Profil das Profil je Zeile; vorausgewählt ist der Standard für Port und Köder. Das Feld Hostname der Fallen setzt den Hostnamen – leer wird er aus der Sensor-Kennung erzeugt.
  • Jeder Sensor sieht anders aus: Hostname, Domain, Distribution, Versionsstände und Zertifikatsdaten leitet jeder Sensor aus seiner Sensor-Kennung ab – über Neustarts gleich, von Sensor zu Sensor verschieden. So lassen sich die Fallen nicht an einem festen Fingerabdruck erkennen.
  • Im Modus ohne Oberfläche gelten die Standards je Port; abweichende Profile und den Hostnamen setzt du mit NODE64_HONEYPOT_PERSONAS und NODE64_HONEYPOT_HOSTNAME.

Ports

Honeypot64 prüft jeden Port über die Port-Verwaltung der Node. Ports, die schon ein anderer Teil offen hat – die Oberfläche von Node64, PROXY64 mit dem gemeinsamen Eingang 80/443 oder Streams, DNS64 (z. B. 53, 853) –, behandelt es so:

  • Katalog: Der Port steht als „belegt von …“ da; ein Profil lässt ihn weg.
  • Textliste und Modus ohne Oberfläche: Ein belegter Port ist ein Fehler.
  • Für alle Fallen-Ports betreibst du Node64 nur mit Honeypot64 und der Oberfläche auf einem ungewöhnlichen Port – oder im Modus ohne Oberfläche.

Läuft auf dem Rechner ein fremder Dienst (z. B. der eigene SSH-Server auf 22), kann die Falle den Port nicht öffnen. Die Übersicht zeigt das als Fehler, die anderen Dienste laufen weiter. Lege den echten Dienst auf einen anderen Port oder lass den Port weg.

Docker

Die Fallen-Ports müssen den Container erreichen. Empfohlen ist das Host-Netz (network_mode: host): Nur so sieht Honeypot64 die echten Quell-Adressen. Mit Port-Weiterleitung (-p) im Bridge-Netz sehen manche Docker-Versionen statt der Angreifer die Adresse des Docker-Gateways.

Ports unter 1024 (22, 23, 80, 443 …) öffnet Node64 ohne Root über die Fähigkeit cap_net_bind_service, die das Image mitbringt. Nimmt der Container sie weg (--cap-drop, manche Podman-Einstellungen), bleiben diese Ports zu, die übrigen laufen weiter.

Port-Scan-Erkennung

Spricht eine Quelle innerhalb von 60 Sekunden mindestens 4 verschiedene Fallen-Ports an, erfasst Honeypot64 einen Port-Scan – einmal je Quelle und Zeitfenster, mit den berührten Ports. Die Erkennung ist standardmäßig an und lässt sich in den Einstellungen abschalten.

Limits

Damit ein Angreifer die Node nicht überlastet, gelten Grenzen für gleichzeitige Verbindungen:

EinstellungStandardBereich
Verbindungen je Quell-IP80 (= Standard) bis 1000
Verbindungen insgesamt5120 (= Standard) bis 100.000

Was darüber hinausgeht, wird verworfen und gezählt (Übersicht und node64_honeypot_dropped_total).

Speicher

Ereignisse liegen in der Datenbank der Node. Ältere Ereignisse und alles über der Obergrenze löscht Node64 stündlich, die ältesten zuerst.

EinstellungStandardBereich
Aufbewahrung7 Tage1 bis 90 Tage
Obergrenze200.000 Ereignisse1.000 bis 5.000.000

Mit Ereignisse löschen leerst du die gespeicherten Daten, die Einstellungen bleiben. Die Einstellungen sind Teil von Export und Import.

Meldung an ipv64

Ab Version 0.2.0 kann Honeypot64 seine Beobachtungen an ipv64.net melden. Dort fließen die Meldungen vieler unabhängiger Sensoren zusammen; daraus soll die v64 Blocklist entstehen.

Deine Beiträge bei ipv64.net

Was deine Sensoren gemeldet haben, siehst du angemeldet unter ipv64.net/honeypot. Ist ipv64 einmal nicht erreichbar, versucht die Node es später erneut; lokal funktioniert alles wie gewohnt.

  • Einschalten: unter Honeypot64 → Einstellungen der Schalter An ipv64 melden. Standardmäßig aus. Er braucht den ipv64-API-Key der Node.
  • Takt: alle 10 Minuten (mit kleinem Zufallsversatz), komprimiert. Gemeldet wird der Zeitraum seit der letzten erfolgreichen Meldung. War ipv64 nicht erreichbar, holt die Node bis zu 7 Tage nach. Wer die Meldung einschaltet, beginnt bei null – nichts aus der Zeit davor wird nachgeschickt.
  • Lebenszeichen: Gibt es keine Ereignisse, geht trotzdem eine kurze Meldung ohne Quellen, damit ipv64 aktive Sensoren zählen kann.
Übertragen wirdNie übertragen wird
je Quell-IP: Art, Dienst, Port, Anzahl, erster und letzter Zeitpunktdie eigene öffentliche IP
Proben mit Anzahl: Zugangsdaten aus dem Honeypot (Benutzername und Passwort im Klartext aus allen Login-Fallen, z. B. SSH, Telnet, FTP, Mail, Datenbanken, MQTT und HTTP/HTTPS), Fingerabdrücke (JA4, HASSH), Pfade, User-Agents, der Anfang von Payloads (höchstens 256 Bytes und SHA-256)Quellen aus privaten oder reservierten Netzen: RFC 1918, CGNAT, Loopback, Link-Local, ULA und Dokumentationsnetze. Sie bleiben lokal sichtbar, so landen eigene Tests und interne Scanner nicht bei ipv64.
eine feste Sensor-Kennung je Installation, Version, Profil und ModusDaten aus anderen Modulen

Die Zugangsdaten stammen ausschließlich von Angreifern, die sich an den Fallen versucht haben – nie aus deinen echten Diensten. Den Zustand siehst du in der Übersicht und in den Einstellungen: letzte Meldung, letzter Fehler, nächster Versuch, gemeldete Quell-IPs heute und seit dem Start sowie Quellen, die ipv64 zuletzt nicht übernommen hat, mit Grund. Per API steht er unter GET /api/honeypot/status im Feld report.

Log-Sensor und Syslog

Neben den Fallen kann Honeypot64 Logs echter Dienste lesen und Syslog von Routern und Firewalls annehmen. So kommen die Angriffe dazu, die wirklich bei deinen Diensten ankommen. Mitgelieferte, versionierte Regeln (z. B. sshd/bruteforce@1) schlagen erst ab einer Schwelle an – etwa bei mehreren fehlgeschlagenen Logins in wenigen Minuten –, denn echte Logs enthalten auch Vertipper legitimer Nutzer. Eine erfolgreiche Anmeldung derselben IP setzt den Zähler zurück. Der Log-Sensor liest nur, schreibt nichts und baut keine Verbindungen auf. Läuft PROXY64 auf derselben Node, kann es seine Zugriffe direkt an den Log-Sensor geben, unbekannte Anfragen an den Web-Köder leiten und gemeldete Angreifer sofort sperren.

Eingestellt wird alles unter Honeypot64 → Einstellungen → Log-Sensor und Syslog: Dateien mit Format, Vorschläge für gängige Pfade per Knopf, Syslog-Port und erlaubte Absender. Daneben steht der Zustand je Datei und des Syslog-Empfängers, z. B. „keine Leserechte – Container braucht --group-add 4“. Kein Profil schaltet den Log-Sensor ein; wie bei den Fallen öffnet das Modul nichts, bevor die Einstellungen einmal gespeichert sind.

Was gespeichert und gemeldet wird

Aus echten Logs speichert Honeypot64 nur IP, Art, Dienst, Port, Anzahl, Zeitraum und Regel – und meldet nur das an ipv64, wenn die Meldung an ist. Nie Benutzernamen, Passwörter, Pfade, User-Agents oder andere Inhalte: Das wären deine Nutzer, Mitarbeitenden oder Kunden. Proben wie Zugangsdaten stammen ausschließlich aus dem Honeypot. Jede Quelle trägt ihren Sensor (honeypot, log oder syslog); ipv64 gewichtet Honeypot höher als Log und Syslog. Private und reservierte Absender bleiben lokal.

Logs einbinden

Gelesen wird über den Pfad im Container. Erlaubt sind nur Pfade unterhalb von /host/log (empfohlener Mount der Host-Logs), /var/log (Binary ohne Docker) und /data/logs (Logs anderer Container in einem gemeinsamen Volume). Muster wie /host/log/nginx/*access.log sind erlaubt, höchstens 32 Dateien. Rotation und Kürzen erkennt der Sensor.

  • Mount: -v /var/log:/host/log:ro – nur lesend.
  • Rechte: auth.log, secure und mail.log gehören meist der Gruppe adm (Debian/Ubuntu: GID 4). Das Image läuft nicht als root, also gibst du --group-add 4 mit.
  • journald: Das Binärformat liest der Sensor (noch) nicht. Installiere rsyslog auf dem Host oder leite journald per Syslog an den Empfänger weiter.
  • Logs außerhalb von /var/log (Nextcloud, Gitea, Home Assistant) bindest du einzeln ein, z. B. -v /srv/nextcloud/data/nextcloud.log:/data/logs/nextcloud.log:ro.
DienstDatei auf dem HostFormat
sshd, sudo (Debian, Ubuntu)/var/log/auth.logsyslog
sshd (RHEL, Rocky, Alma)/var/log/securesyslog
Postfix, Dovecot/var/log/mail.logsyslog
nginx/var/log/nginx/access.lognginx
Apache/var/log/apache2/access.logapache
Caddy (JSON-Log)z. B. /var/log/caddy/access.logcaddy
Proxmox VE/var/log/daemon.log bzw. Syslogproxmox
Nextcloudnextcloud.log (Datenordner)nextcloud
Vaultwarden (LOG_FILE)z. B. /var/log/vaultwarden.logvaultwarden
Gitea/Forgejogitea.loggitea
Home Assistanthome-assistant.loghomeassistant

Beim normalen Node64-Container gilt dasselbe: Mount und --group-add 4 beim Container, die Dateien trägst du dann in der Oberfläche ein. Für den Modus ohne Oberfläche:

bash
docker run -d --name honeypot64 --network host --restart unless-stopped --group-add 4 \
  -e NODE64_MODE=honeypot -e NODE64_HONEYPOT_PROFILE=standard -e NODE64_IPV64_KEY=DEIN_API_KEY \
  -e NODE64_HONEYPOT_LOGS=/host/log/auth.log=syslog,/host/log/nginx/*access.log=nginx \
  -e NODE64_HONEYPOT_SYSLOG_PORT=514 -e NODE64_HONEYPOT_SYSLOG_ALLOW=10.0.0.1,10.0.0.0/8 \
  -e TZ=Europe/Berlin \
  -v /var/log:/host/log:ro -v honeypot64:/data ghcr.io/ipv64net/node64
yaml
services:
  honeypot64:
    image: ghcr.io/ipv64net/node64
    network_mode: host
    restart: unless-stopped
    group_add: ["4"]          # Gruppe adm: auth.log lesen
    environment:
      NODE64_MODE: honeypot
      NODE64_HONEYPOT_PROFILE: standard
      NODE64_IPV64_KEY: DEIN_API_KEY
      NODE64_HONEYPOT_LOGS: /host/log/auth.log=syslog,/host/log/mail.log=syslog
      NODE64_HONEYPOT_SYSLOG_PORT: "514"
      TZ: Europe/Berlin
    volumes:
      - /var/log:/host/log:ro
      - honeypot64:/data
volumes:
  honeypot64:

Syslog

Der Empfänger hört auf UDP und TCP auf demselben Port, üblich ist 514 (RFC 3164 und RFC 5424). Wie bei den Fallen prüft die Port-Verwaltung, dass kein anderer Teil der Node den Port nutzt.

Den Syslog-Port nie ins Internet freigeben

Standardmäßig nimmt der Empfänger nur Absender aus privaten Netzen und localhost an. Lege die erlaubten Absender am besten genau fest (IP oder CIDR). Andere werden verworfen und gezählt. UDP-Absender lassen sich fälschen.

Zeitzone: Klassisches Syslog schickt die Uhrzeit ohne Zone. Setze -e TZ=Europe/Berlin, damit die Zeiten in der Ereignisliste stimmen.

Beispiele für einen Sensor unter 10.0.0.20 – Menünamen können je nach Version abweichen, und nicht jedes Gerät ist live getestet:

  • MikroTik RouterOS:
    routeros
    /system/logging/action/add name=hp64 target=remote remote=10.0.0.20 remote-port=514 bsd-syslog=yes
    /system/logging/add topics=system action=hp64
    /system/logging/add topics=account action=hp64
  • OPNsense: System → Einstellungen → Protokollierung → Ziele: neues Ziel, Transport UDP(4) oder TCP(4), Host 10.0.0.20, Port 514; Anwendungen z. B. Anmeldungen/Audit, Firewall, OpenVPN/IPsec.
  • pfSense: Status → System Logs → Settings → Remote Logging: „Send log messages to remote syslog server“, Server 10.0.0.20:514, Inhalte System, Firewall und VPN.
  • FortiGate:
    text
    config log syslogd setting
        set status enable
        set server "10.0.0.20"
        set port 514
    end
  • Sophos Firewall: System services → Log settings: Syslog-Server hinzufügen (IP, Port 514, Format „Standard syslog protocol“), dann Authentifizierung, Firewall und VPN an diesen Server senden.
  • UniFi (Network-App): Einstellungen → Control Plane → Integrations → Activity Logging (Syslog) bzw. „SIEM Server“: IP 10.0.0.20, Port 514.

Zusammenarbeit mit PROXY64

Läuft auf derselben Node PROXY64, kann Honeypot64 auch dort mitlesen und mitsperren. Eingeschaltet wird das in PROXY64 (Zugriffslisten → Honeypot64, je Punkt ein Schalter, Standard aus); gespeicherte Fallen-Dienste sind dafür nicht nötig, nur das laufende Modul. Mit der Vorlage Nur über PROXY64 ist der Köder automatisch eingeschaltet; PROXY64 zeigt dazu einen Hinweis.

  • Köder für unbekannte Anfragen: Anfragen auf 80/443 ohne eingerichteten Host – nur IP oder fremde Domain – beantwortet der Web-Köder des Honeypots statt der Standardseite. Logins, Pfade, User-Agents und Fingerabdrücke werden erfasst (Detail via=proxy64).
  • Als schädlich erkannte Anfragen an den Köder: Statt einer 403 beantwortet der Köder auch Anfragen, die PROXY64 sonst abweist – je Art ein Schalter: IPs der ipv64-Blocklisten, vom Honeypot gemeldete Angreifer, Exploit-Muster, KI-Bots und Scanner (alle Standard an) und Ländersperre (Standard aus). Überlast geht nie an den Köder. Nur für HTTP(S) und nur bei aktivem Köder – siehe PROXY64.
  • Zugriffe auswerten: PROXY64 gibt je Anfrage nur Eckdaten an den Log-Sensor (IP, Host, Pfad ohne Abfrage, Status, abgelehnte Anmeldung). Die Regeln proxy64/exploit, proxy64/scan, proxy64/bad-useragent, proxy64/auth und proxy64/unknown-host ordnen sie ein; gemeldet wird wie bei echten Logs nur IP, Art und Anzahl.
  • Sofort-Sperre: Fällt eine IP auf – Login- oder Exploit-Versuch, Port-Scan, eine Regel aus PROXY64 –, sperrt PROXY64 sie für die eingestellte Dauer (Standard 24 Stunden), ohne auf die v64 Blocklist zu warten. Private Adressen, vertrauenswürdige Proxys und Ausnahmen werden nie gesperrt.

Die Übersicht zeigt dazu eine eigene Zeile; Prometheus zählt node64_honeypot_proxy_*.

Zertifikat für Köder-Namen

Im Modul zeigen die HTTPS-Fallen mit Webserver-Profil (nginx, Apache) und die Mail-Fallen mit TLS – SMTPS 465, IMAPS 993, POP3S 995 – auf Wunsch ein gültiges Zertifikat aus der Zertifikatsverwaltung statt des selbst signierten. Ein Scanner sieht dann etwa auf 443 und 993 einen „echten“ Server mail.<domain>.

  • Einstellen unter Honeypot64 → Einstellungen → Zertifikat für Köder-Namen: ein vorhandenes Zertifikat wählen oder neu anlegen – einzelne, glaubwürdige Namen (Standard mail, vpn, cloud, portal, höchstens 20, kein Wildcard) unter einer Domain deines ipv64-Accounts. Ausgestellt wird über Let's Encrypt per DNS-01 mit dem ipv64-API-Key; das Zertifikat erscheint in der Verwaltung mit „benutzt von Honeypot64“ und wird automatisch erneuert. Bis es da ist, bleiben die Fallen selbst signiert.
  • DNS-Records optional: Mit einer öffentlichen IPv4/IPv6 der Node legt das Modul A/AAAA-Records an, mit einem Namen wie der DynDNS-Domain einen CNAME. Namen, die schon A, AAAA oder CNAME haben, bleiben unberührt.
  • Profile, die auch im Original selbst signiert sind – Proxmox, Webmin, NAS, Grafana, Home Assistant, Elasticsearch und weitere –, bleiben selbst signiert. Unter Auch auf diesen Ports zeigen lassen sich einzelne Ports trotzdem zuweisen. Port 80 bleibt eine Falle, STARTTLS auf 25/587/110/143 gibt es weiterhin nicht.
  • Angefragter Name (SNI): steht an jedem Ereignis. So siehst du, welche Bots die Namen aus den Certificate-Transparency-Logs kennen.
  • Im Modus ohne Oberfläche gibt es keine Zertifikatsverwaltung; dort bleiben alle Fallen selbst signiert.
Eigene Domain für die Köder

Nimm eine eigene Domain oder Subdomain nur für die Köder – nie die Hauptdomain oder Namen echter Dienste. Jedes Zertifikat steht mit allen Namen öffentlich in den Certificate-Transparency-Logs (z. B. crt.sh), und Scanner lesen dort mit.

Anmeldung von Node64 überwachen

Solange Honeypot64 läuft, zählt es die Fehlversuche an der Anmeldung von Node64 selbst – Passwort, TOTP, Passkey, SSO ohne verknüpftes Konto sowie ungültige API- und MCP-Keys – je Quell-IP.

  • Ab 5 Fehlversuchen in 10 Minuten (einstellbar: 2–100 Versuche, 1–1440 Minuten) entsteht genau ein Ereignis je IP und Zeitfenster: Regel node64/login@1, Art http:bruteforce – ohne Benutzernamen oder Passwörter.
  • Dazu eine Benachrichtigung „Angriff auf die Anmeldung“ (höchstens eine alle 10 Minuten, abschaltbar), die Sofort-Sperre über PROXY64, wenn sie dort eingeschaltet ist, und die Meldung an ipv64, wenn sie an ist.
  • Private, Loopback- und andere nicht öffentliche Adressen werden nur gezählt, nie gemeldet oder gesperrt. Das betrifft auch einen Reverse-Proxy vor der Oberfläche ohne NODE64_TRUST_PROXY.
  • Die Übersicht zeigt die Zeile Angriffe auf die Node64-Anmeldung (24 Stunden, 7 Tage, seit dem Start).
Oberfläche nie öffentlich freigeben

Stell die Oberfläche von Node64 nie offen ins Internet – keine Portfreigabe für den Web-Port. Von unterwegs nur über VPN oder über PROXY64 mit Anmeldung und Zugriffsliste. Die Überwachung ist ein Frühwarnsystem, kein Schutz für eine offene Oberfläche.

Frühwarnung

Fällt eine Adresse aus deinem eigenen Netz als Angreifer auf – etwa ein gekapertes Gerät im Heimnetz oder ein Server –, sagt dir die Frühwarnung Bescheid. Im Reiter Frühwarnung hinterlegst du deine Netze bei ipv64 (IPv4 ab /16, IPv6 ab /32); die aktuellen DynDNS-IPs deines Accounts überwacht ipv64 automatisch.

  • ipv64 prüft nach jeder Bewertung, ob eine dieser Adressen aufgefallen ist. Die Node holt Treffer alle 30 Minuten ab und meldet sie gebündelt über die Benachrichtigungen („Honeypot64 Frühwarnung“); dazu kommt eine Mail von ipv64.
  • Netze ohne Nachweis melden nur IPs, die auf der v64 Blocklist stehen – die sind ohnehin öffentlich. DynDNS-IPs deines Accounts gelten als nachgewiesen und melden schon jede Sichtung.
  • Braucht den zentralen API-Key der Node – nicht die Meldung an ipv64 und keinen eigenen Sensor. Der automatische Abruf läuft, solange das Modul an ist; sonst gibt es „Jetzt abrufen“.
  • Grenzen je Account-Klasse: Standard 3 Netze, alle anderen Klassen 50.

Benachrichtigung

Auf Wunsch meldet Honeypot64 neue Angreifer – Quell-IPs, die bisher nicht aufgefallen sind. Damit dich das nicht überflutet, kommt höchstens eine gebündelte Meldung je Stunde mit der Anzahl und den ersten IPs. Sie geht über die Standardkanäle der Benachrichtigungen. Standardmäßig ist das aus.

Getrennt davon meldet die Überwachung der Node64-Anmeldung Angriffe auf die Anmeldung (Art honeypot_login, höchstens eine Meldung alle 10 Minuten).

Statistik

Die Übersicht unter Honeypot64 zeigt, wahlweise für 24 Stunden oder 7 Tage:

  • die Fallen-Dienste mit Port, Zustand (offen oder Fehler mit Grund) und Verbindungen seit dem Start,
  • Kennzahlen: Ereignisse, verschiedene Quell-IPs und Login-Versuche,
  • den Verlauf der Ereignisse als Diagramm,
  • Ranglisten: Quell-IPs, Arten, Ports, Dienste, Benutzernamen, Passwörter, Zugangsdaten (Paare), Pfade und User-Agents.

Eine Karte fürs Dashboard zeigt offene Fallen, Ereignisse, Quell-IPs, Login-Versuche und Dienste mit Fehler.

Ranglisten mit Quell-IPs, Benutzernamen, Passwörtern, Zugangsdaten, Pfaden und FingerabdrückenRanglisten mit Quell-IPs, Benutzernamen, Passwörtern, Zugangsdaten, Pfaden und Fingerabdrücken

Karte auf der Startseite

Die Karte von Honeypot64 auf dem Dashboard zeigt für die letzten 24 Stunden die Ereignisse mit Trend gegenüber dem Vortag (▲ mehr in Rot, ▼ weniger in Grün), Quell-IPs, Login-Versuche, die drei häufigsten Herkunftsländer als Flaggen, den meistangegriffenen Dienst, offene und fehlerhafte Fallen, den Zustand der Meldung an ipv64 und – sobald PROXY64 etwas übergeben hat – die Anfragen über PROXY64.

Herkunft der Angreifer

Zu jeder Quell-IP zeigt Honeypot64 das Land: Flagge, Ländercode und den Namen als Tooltip – in der Ereignisliste, bei den Top-Quellen, in der Benachrichtigung über neue Angreifer und auf der Info-Seite des Modus ohne Oberfläche. Die Rangliste Herkunft nach Land zählt Ereignisse und verschiedene Quell-IPs je Land.

  • Daten von ipv64.net, keine fremde GeoIP-Datenbank: Die Länderdatei entsteht täglich aus den Daten der Registrierungsstellen und kommt von ipv64.net. Geladen wird nur, solange Honeypot64 läuft – beim Start sofort aus dem Zwischenspeicher unter /data, danach täglich und nur bei Änderung.
  • Nichts gespeichert: Das Land wird beim Auswerten nachgeschlagen, nicht an den Ereignissen gespeichert. Neue Daten gelten sofort auch für ältere Ereignisse. Private und reservierte Adressen haben kein Land.
  • Ohne Daten geht alles weiter: Fehlt die Datei oder ist ipv64 nicht erreichbar, läuft Honeypot64 ohne Länder.
  • Die Flaggen erscheinen auch unter Windows: Die Oberfläche bringt eine kleine Flaggen-Schrift mit (Twemoji, CC BY 4.0), die nur für Länderflaggen greift. Der Ländercode steht immer daneben.

Dazu zeigt die Übersicht farbig, was angegriffen wurde – je Dienst, Port und Art, aufgeteilt nach Login/Bruteforce, Exploit, Scan, Sondierung und Log/Syslog – und welche Köder und erkannten Geräte getroffen wurden.

Weltkarte

Über der Rangliste zeigt die Übersicht eine Weltkarte für den gewählten Zeitraum (24 Stunden oder 7 Tage). Länder mit Angriffen sind in fünf Stufen eingefärbt, das stärkste Land immer in der obersten; Länder ohne Angriffe bleiben grau. Der Tooltip nennt Flagge, Name, Ereignisse und Quell-IPs.

  • Klick auf ein Land (oder seinen Namen in der Rangliste) filtert die Ereignisliste nach diesem Land, z. B. /honeypot?country=DE – auch ohne JavaScript. Das Kreuz am Länder-Abzeichen hebt den Filter wieder auf.
  • Offline: Die Kartendaten (Natural Earth 1:110m, gemeinfrei) stecken in Node64; nachgeladen wird nichts. Sehr kleine Inselstaaten fehlen in diesem Maßstab, stehen aber in der Rangliste.
  • Der Modus ohne Oberfläche zeigt dieselbe Karte für 7 Tage auf seiner Info-Seite.
Weltkarte von Honeypot64: Länder nach Zahl der Angriffe in fünf Stufen eingefärbtWeltkarte von Honeypot64: Länder nach Zahl der Angriffe in fünf Stufen eingefärbt

Ereignisse

Unter Letzte Ereignisse steht jede Berührung mit Zeit, Quelle, Dienst, Art und Details, bei Web-Ködern mit der Seite. Die Payload siehst du als Text und als Hex. Honeypot64 ordnet jedes Ereignis einer Art zu:

Letzte Ereignisse mit Zeit, Quelle, Sensor, Dienst, Art und DetailsLetzte Ereignisse mit Zeit, Quelle, Sensor, Dienst, Art und Details
ArtBedeutung
ssh:bruteforce, telnet:bruteforceLogin-Versuch über SSH oder Telnet
ftp:bruteforce, mail:auth-bruteforce, mqtt:bruteforceLogin-Versuch über FTP, SMTP/POP3/IMAP oder MQTT
db:bruteforce, db:exploitAnmeldeversuch an einer Datenbank-Falle bzw. Angriffsbefehl (z. B. Redis CONFIG SET, MSSQL xp_cmdshell)
rdp:bruteforce, vnc:bruteforce, router:bruteforceAnmeldeversuch über RDP, VNC oder MikroTik-API/Winbox
snmp:bruteforce, sip:bruteforce, sip:scanSNMP-Community-Strings, SIP-Anmeldungen und SIP-Scanner
http:bruteforceLogin-Versuch auf einem Web-Köder
http:exploit:…Web-Angriff, eingeordnet nach OWASP: sqli (SQL-Injection), xss, traversal (Path Traversal), rce, jndi (Log4Shell), ssrf, upload; http:exploit für bekannte Angriffspfade ohne genauere Einordnung
http:scanAufruf ohne Angriffsmerkmal, z. B. ein Verzeichnis-Scan
http:bad-useragentbekanntes Angriffswerkzeug am User-Agent erkannt
scanner:researchScanner von Forschungsprojekten und Suchmaschinen für Geräte
generic:portscanPort-Scan, siehe Port-Scan-Erkennung
generic:probebloßer Verbindungsaufbau oder erste Bytes ohne Einordnung

Die Einordnung der Web-Angriffe dient nur der Auswertung. Honeypot64 ist keine Web Application Firewall und schützt keine echten Anwendungen.

API

Über die lokale API mit API-Key (Änderungen stehen im Audit-Log):

MethodePfadZweck
GET/api/honeypot/statusZustand der Fallen-Dienste, Zähler, Log-Sensor und Syslog (logs) und Meldung an ipv64 (report)
GET/api/honeypot/statsKennzahlen, Verlauf und Ranglisten, auch je Sensor (by_source), Fingerabdruck (top_fingerprints), Land (by_country, country_unknown) und Köder (by_decoy)
GET, DELETE/api/honeypot/eventsletzte Ereignisse mit Land (country) lesen (Filter ?source=honeypot|log|syslog und ?country=DE) bzw. alle löschen
GET/api/honeypot/catalogKatalog aller Fallen-Dienste mit Zustand der Ports, Profil, Standardprofil und Auswahl je Zeile (persona, default_persona, personas) und dem Hostnamen; gespeichert wird mit PUT /api/honeypot/config (personas als {"ssh:22": "dropbear"}, hostname)
GET, PUT/api/honeypot/configEinstellungen lesen und ändern, mit Log-Sensor und Syslog (log)

Prometheus

Die Kennzahlen stehen unter /api/metrics (siehe Prometheus), im Modus ohne Oberfläche auf der Info-Seite. Zähler laufen seit dem Start.

MetrikBedeutung
node64_honeypot_connections_total{service,port}Verbindungen je Dienst und Port
node64_honeypot_logins_total{service}Login-Versuche je Dienst
node64_honeypot_events_total{kind,source}Ereignisse je Art; source = honeypot, log oder syslog
node64_honeypot_events_by_country_total{country}Ereignisse je Herkunftsland
node64_honeypot_unique_sourcesverschiedene Quell-IPs der letzten 24 Stunden
node64_honeypot_services, node64_honeypot_services_listeningeingestellte und offene Fallen-Dienste
node64_honeypot_listen_errors{port}Ports, die nicht geöffnet werden konnten
node64_honeypot_buffer_events, node64_honeypot_dropped_totalEreignisse im Puffer und wegen Überlast verworfene
node64_honeypot_log_lines_total, node64_honeypot_log_file_ok{path}gelesene Log-Zeilen; 1 = Datei wird gelesen, 0 = Fehler
node64_honeypot_syslog_messages_total, node64_honeypot_syslog_denied_totalangenommene und abgewiesene Syslog-Nachrichten
node64_honeypot_proxy_decoy_total, …_proxy_access_total, …_proxy_access_dropped_total, …_proxy_blocks_totalZusammenarbeit mit PROXY64: Köder-Anfragen, ausgewertete und verworfene Zugriffe, Sofort-Sperren
node64_firewall_active, node64_firewall_entries{family}, node64_firewall_list_entries{list,edition}, node64_firewall_last_update_timestamp, node64_firewall_errors_totalFirewall-Helfer (nur wenn eingeschaltet)
node64_honeypot_report_last_success_timestampZeitpunkt der letzten erfolgreichen Meldung an ipv64 (Unix-Zeit, 0 = noch keine)
node64_honeypot_report_errors_total, node64_honeypot_report_sources_totalfehlgeschlagene Meldungen und gemeldete Quell-IPs

Beispiel für einen Alarm, wenn seit einer Stunde keine Meldung angekommen ist: time() - node64_honeypot_report_last_success_timestamp > 3600.

Modus ohne Oberfläche (reiner Sensor)

Node64 kann auch als reiner Sensor laufen: nur die Fallen-Dienste, keine Weboberfläche, keine anderen Module, keine Anmeldung. So sind 22, 80 und 443 frei für die Fallen, und es gibt keine Admin-Seite als Angriffsfläche. Eingestellt wird alles über Umgebungsvariablen. Den Zustand zeigen das Log, eine kleine Info-Seite und Prometheus auf einem eigenen Port. Der Sensor braucht etwa 30–50 MB RAM und läuft auf amd64, arm64 und arm/v7 (ältere Raspberry Pi, viele NAS).

Start

bash
docker run -d --name honeypot64 --network host --restart unless-stopped \
  -e NODE64_MODE=honeypot -e NODE64_HONEYPOT_PROFILE=standard \
  -e NODE64_IPV64_KEY=DEIN_API_KEY \
  -v honeypot64:/data ghcr.io/ipv64net/node64

Ohne NODE64_IPV64_KEY bleiben alle Ereignisse lokal. Das öffentliche Image erscheint in Kürze. Beim Start steht im Log für jeden Dienst, ob er offen ist und, wenn nicht, warum (z. B. address already in use oder permission denied). docker stop schließt erst die Info-Seite, dann die Fallen, und schreibt gepufferte Ereignisse in die Datenbank.

Umgebungsvariablen

VariableStandardBedeutung
NODE64_MODE–honeypot schaltet den Modus ohne Oberfläche ein
NODE64_HONEYPOT_PROFILEstandardminimal, standard oder full – siehe Profile
NODE64_HONEYPOT_SERVICES–eigene Dienste statt des Profils, z. B. ssh:22,ssh:2222,http:80,https:443,smtp:587,tcp:3389; Dienste ssh, telnet, http, https, tcp, ftp, smtp, pop3, imap, smtps, pop3s, imaps, mqtt, mysql, postgres, mssql, redis, rdp, vnc, mikrotik-api, snmp (UDP), sip (UDP); Köder als dritter Teil (http:80:wp-login). Fehler verhindern den Start.
NODE64_HONEYPOT_PERSONAS–Dienst-Profile je Port, z. B. ssh:22=dropbear,http:8080=apache; nur für aktive Fallen, Fehler verhindern den Start
NODE64_HONEYPOT_HOSTNAME–Hostname der Fallen (Banner, Zertifikate); leer = aus der Sensor-Kennung erzeugt
NODE64_NAMEHoneypot64Name des Sensors in der Node-Übersicht auf ipv64.net (höchstens 64 Zeichen)
NODE64_HONEYPOT_SCAN1Port-Scan-Erkennung an (1) oder aus (0)
NODE64_HONEYPOT_RETENTION7dAufbewahrung, z. B. 3d oder 48h (1 Stunde bis 365 Tage); dazu höchstens 200.000 Ereignisse
NODE64_HONEYPOT_INFO_PORT9064Port der Info-Seite, 0 = aus; darf kein Fallen-Port sein
NODE64_HONEYPOT_INFO_TOKEN–erlaubt die Info-Seite auch von außerhalb privater Netze (mindestens 16 Zeichen)
NODE64_HONEYPOT_LOGS–Log-Sensor: Komma-Liste, je Eintrag pfad oder pfad=format, z. B. /host/log/auth.log=syslog; höchstens 32. Leer = aus
NODE64_HONEYPOT_SYSLOG_PORT–Syslog-Empfänger auf UDP und TCP, z. B. 514; leer oder 0 = aus
NODE64_HONEYPOT_SYSLOG_ALLOWprivate Netzeerlaubte Syslog-Absender, Komma-Liste von IPs oder Netzen
NODE64_IPV64_KEY–API-Key des ipv64-Accounts (16 bis 64 Buchstaben und Ziffern). Gesetzt = Meldung an ipv64 alle 10 Minuten; ein ungültiges Format verhindert den Start
NODE64_HONEYPOT_REPORT10 schaltet die Meldung trotz Key ab; ohne Key ist sie immer aus
NODE64_FIREWALL–nftables schaltet den Firewall-Helfer ein (braucht --cap-add NET_ADMIN und --network host)
NODE64_FIREWALL_LISTSv64Listen für die Firewall, Komma-Liste von IDs aus der index.json
NODE64_FIREWALL_ALLOW–eigene Netze, die nie gesperrt werden (IPs oder CIDR)
NODE64_FIREWALL_KEEP01 lässt die Tabelle beim Beenden stehen
NODE64_IPV64_LIST_TOKEN–Listen-Token aus dem ipv64-Account: v64-Listen live statt im Tagesstand
NODE64_DATA_DIR/dataDatenbank und Sensor-Dateien (SSH-Host-Schlüssel, TLS-Zertifikat, Sensor-Kennung, Stand der Meldung)
NODE64_BIND_ADDR–Adresse der Info-Seite (leer = alle)
NODE64_LOG_LEVEL, NODE64_LOG_FORMATinfo, textwie im normalen Betrieb

Info-Seite, /metrics und /health

Auf dem Info-Port (getrennt von den Fallen) antwortet ein kleiner Server, nur mit GET und HEAD:

PfadInhalt
/Info-Seite, nur lesend, ohne JavaScript: Zustand der Dienste, Treffer 24 h und 7 Tage, Quell-IPs, Login-Versuche, Ranglisten, Zustand der Meldung an ipv64, Version und Laufzeit; aktualisiert sich jede Minute
/metricsPrometheus, dazu node64_honeypot_up, node64_honeypot_info{version,profile} und node64_honeypot_uptime_seconds
/health200, wenn die Datenbank antwortet und mindestens eine Falle offen ist, sonst 503; der Docker-Healthcheck des Images fragt das ab

Zugriff: Ohne Token nur aus privaten Netzen (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, fc00::/7), CGNAT (100.64.0.0/10, z. B. Tailscale), Loopback und Link-Local. Es zählt allein die Absender-Adresse der Verbindung, Kopfzeilen wie X-Forwarded-For nicht. Mit NODE64_HONEYPOT_INFO_TOKEN ist die Seite zusätzlich von überall erreichbar – mit ?token=… oder Authorization: Bearer …; alles andere bekommt 403. Den Info-Port gibst du trotzdem nicht am Router frei.

yaml
scrape_configs:
  - job_name: honeypot64
    static_configs:
      - targets: ["honeypot.lan:9064"]
    # von außerhalb privater Netze: authorization: { credentials: "DEIN_TOKEN" }

Firewall-Helfer (nftables)

Im Modus ohne Oberfläche trägt Node64 auf Wunsch die v64 Blocklist in die Firewall des Hosts ein – wie ein Firewall-Bouncer. Was andere Sensoren gesehen haben, kommt dann gar nicht erst bei deinen Diensten an.

bash
docker run -d --name honeypot64 --network host --cap-add NET_ADMIN --restart unless-stopped \
  -e NODE64_MODE=honeypot -e NODE64_IPV64_KEY=DEIN_API_KEY \
  -e NODE64_FIREWALL=nftables -e NODE64_FIREWALL_ALLOW=BUERO_IP,VPN_NETZ/24 \
  -e NODE64_IPV64_LIST_TOKEN=DEIN_LISTEN_TOKEN \
  -v honeypot64:/data ghcr.io/ipv64net/node64
  • Eigene Tabelle: Node64 legt table inet node64 mit den Sets blocklist_v4 und blocklist_v6 und den Ketten input und forward an (vor den üblichen Filterregeln). Sie verwerfen nur Pakete, deren Absender auf der Liste steht; alles andere geht unverändert an deine vorhandene Firewall (ufw, firewalld, Docker). Anschauen mit nft list table inet node64.
  • Listen: Standard ist die Gesamtliste v64; mit NODE64_FIREWALL_LISTS wählst du andere Listen aus der index.json, z. B. v64_ssh,v64_web oder auch fremde wie spamhaus_drop. Ohne Listen-Token gilt der Tagesstand, mit NODE64_IPV64_LIST_TOKEN (Token holen) die Live-Fassung.
  • Aktualisierung: alle 30 Minuten, nur bei Änderungen. Die Sets werden in einer Transaktion ersetzt – es gibt keinen Moment ohne Schutz. Fehlt die Tabelle (z. B. nach nft flush ruleset), legt Node64 sie neu an. Die letzte Fassung liegt unter /data, damit der Schutz nach einem Neustart ohne Netz sofort steht.
  • Nie gesperrt: private und reservierte Netze, bei IPv6 alles außerhalb von 2000::/3, die Adressen des Hosts selbst und NODE64_FIREWALL_ALLOW. Zu große Netze aus einer Liste (größer als /8 bzw. /16) werden verworfen.
  • Beenden: docker stop löscht die Tabelle; mit NODE64_FIREWALL_KEEP=1 bleibt sie stehen.
  • Zustand: auf der Info-Seite (Einträge, Fassung je Liste, letzte Prüfung, Fehler) und unter /metrics.

Rechte: --cap-add NET_ADMIN erlaubt dem Container, die Firewall zu ändern, --network host ist nötig, sonst schützt die Tabelle nur das Netz des Containers. Ohne NET_ADMIN startet Node64 mit NODE64_FIREWALL=nftables gar nicht. Nur Linux mit nftables im Kernel (auch Hosts, deren iptables über nftables läuft).

Vorher eigene Netze freistellen
  • Trag deine festen öffentlichen IPs in NODE64_FIREWALL_ALLOW ein: Büro, VPN-Gegenstelle, Monitoring, Backup-Ziel. Steht eine davon – etwa durch eine gemeinsam genutzte IP – auf der Liste, sperrst du dich sonst selbst aus, bei einem entfernten Server auch per SSH. Wer zu Unrecht gelistet ist, kann bei ipv64 eine Freigabe beantragen.
  • Gesperrt wird nur eingehend nach Absender. Auch Antworten gelisteter Adressen auf eigene Verbindungen werden verworfen.
  • forward betrifft auch Container und VMs hinter dem Host. Die Regeln von Docker selbst ändert Node64 nicht.
  • Werkzeuge, die mit nft flush ruleset alles neu schreiben, löschen auch diese Tabelle; Node64 legt sie spätestens nach 30 Minuten wieder an.

MikroTik RouterOS (Container)

Der Sensor kann direkt auf einem MikroTik-Router laufen: dasselbe Image, Modus ohne Oberfläche, Profil minimal (SSH 22, HTTP 80).

Noch nicht auf einem echten Gerät getestet

Die Schritte folgen der Container-Doku von MikroTik (Stand RouterOS 7.21). Was noch offen ist, steht unter Ungeprüft. Erfahrungen gern ins Forum v64.tech.

Voraussetzungen

  • RouterOS 7; die Befehle gelten für 7.21 oder neuer.
  • Paket container installiert (aus den „Extra packages“ der eigenen Version) und Container-Modus freigeschaltet – nach dem Befehl die Reset-Taste drücken (x86: Kaltstart):
    routeros
    /system/device-mode/update container=yes
  • Architektur arm64, arm 32 Bit (linux/arm/v7) oder x86 (linux/amd64). Geräte mit EN7562CT (z. B. hEX Refresh) führen nur arm32v5-Images aus; dafür gibt es kein Image.
  • Mindestens 256 MB RAM; der Sensor braucht etwa 30–50 MB.
  • Ein externer Datenträger (USB, SATA oder NVMe); MikroTik rät für Container vom internen Speicher ab. Den Namen zeigt /disk print (unten disk1).

1. Netz für den Container

routeros
/interface/veth/add name=veth-hp64 address=172.17.0.2/24 gateway=172.17.0.1
/interface/bridge/add name=containers
/ip/address/add address=172.17.0.1/24 interface=containers
/interface/bridge/port/add bridge=containers interface=veth-hp64
/ip/firewall/nat/add chain=srcnat action=masquerade src-address=172.17.0.0/24 comment="Honeypot64 ausgehend"

Nach außen braucht der Sensor nur HTTPS zu ipv64 (Meldung). Damit niemand über den Sensor ins Heimnetz kommt, sperrst du neue Verbindungen vom Container ins LAN. Für LAN-NETZ setzt du dein LAN-Netz ein; die Regel muss vor Regeln stehen, die solchen Verkehr erlauben:

routeros
/ip/firewall/filter/add chain=forward src-address=172.17.0.0/24 dst-address=LAN-NETZ connection-state=new action=drop comment="Honeypot64 nicht ins LAN"

2. Fallen-Ports weiterleiten

routeros
/ip/firewall/nat/add chain=dstnat in-interface-list=WAN protocol=tcp dst-port=22 action=dst-nat to-addresses=172.17.0.2 to-ports=22 comment="Honeypot64 SSH"
/ip/firewall/nat/add chain=dstnat in-interface-list=WAN protocol=tcp dst-port=80 action=dst-nat to-addresses=172.17.0.2 to-ports=80 comment="Honeypot64 HTTP"
  • dst-nat ändert nur das Ziel; der Sensor sieht die echten Quell-Adressen.
  • Port 22 und 80 aus dem Internet landen danach beim Sensor, nicht mehr beim Router. Verwalte den Router nur aus dem LAN oder per VPN. Die Regeln greifen nur auf der Interface-Liste WAN.
  • Die Info-Seite (9064) nicht weiterleiten. Aus dem LAN ist sie unter http://172.17.0.2:9064/ erreichbar; Prometheus fragt dort /metrics ab.
  • Weitere Fallen (z. B. 23, 443) über NODE64_HONEYPOT_SERVICES und je Port eine dst-nat-Regel; jede Falle braucht etwas RAM.

3. Image

Bis das Image öffentlich ist, geht nur der Import als Datei. Auf einem PC mit Docker, Plattform passend zum Router (linux/arm64, linux/arm/v7 oder linux/amd64):

bash
docker pull --platform linux/arm64 ghcr.io/ipv64net/node64:latest
docker save ghcr.io/ipv64net/node64:latest > node64.tar

node64.tar kopierst du auf den Datenträger des Routers (WinBox → Files, SFTP oder SCP), z. B. nach disk1/node64.tar. Später kann RouterOS das Image auch selbst laden (/container/config/set registry-url=https://ghcr.io tmpdir=disk1/tmp, dann remote-image=ipv64net/node64:latest statt file=…) – das braucht aber viel freien RAM; auf kleinen Geräten ist die Datei der sicherere Weg.

4. Umgebungsvariablen und Datenordner

routeros
/container/envs/add list=hp64-env key=NODE64_MODE value=honeypot
/container/envs/add list=hp64-env key=NODE64_HONEYPOT_PROFILE value=minimal
/container/envs/add list=hp64-env key=NODE64_IPV64_KEY value=DEIN_API_KEY
/container/envs/add list=hp64-env key=NODE64_HONEYPOT_RETENTION value=3d
/container/mounts/add list=hp64-data src=disk1/honeypot64/data dst=/data
  • Ohne NODE64_IPV64_KEY bleiben die Ereignisse lokal. Exporte der Router-Konfiguration können den Key enthalten – solche Exporte nicht weitergeben.
  • NODE64_HONEYPOT_RETENTION=3d ist optional und schont den Datenträger.
  • Im Datenordner liegen Datenbank, SSH-Host-Schlüssel und Sensor-Kennung. Liegt er im Mount, bleiben sie bei einem Update erhalten.

5. Container anlegen und starten

routeros
/container/add name=honeypot64 file=disk1/node64.tar interface=veth-hp64 root-dir=disk1/honeypot64/root envlists=hp64-env mountlists=hp64-data logging=yes start-on-boot=yes memory-max=128M

Der Container startet nach dem Anlegen nicht von selbst. Warte, bis /container/print ihn nicht mehr beim Entpacken zeigt, dann:

routeros
/container/start honeypot64
/log/print where topics~"container"

Im Log steht für jeden Fallen-Dienst, ob er offen ist. Danach öffnest du aus dem LAN http://172.17.0.2:9064/. memory-max=128M begrenzt den RAM des Containers; braucht er mehr, beendet RouterOS den Prozess. Den meisten Platz brauchen die Ereignisse in /data (höchstens 200.000).

Ungeprüft

  • Ports 22 und 80: Das Image läuft ohne Root und öffnet Ports unter 1024 über cap_net_bind_service. Ob RouterOS das im Container zulässt, ist nicht getestet. Meldet das Log „permission denied“, nimmst du hohe Ports und setzt sie per dst-nat um:
    routeros
    /container/stop honeypot64
    /container/envs/add list=hp64-env key=NODE64_HONEYPOT_SERVICES value="ssh:2222,http:8080"
    /ip/firewall/nat/set [find comment="Honeypot64 SSH"] to-ports=2222
    /ip/firewall/nat/set [find comment="Honeypot64 HTTP"] to-ports=8080
    /container/start honeypot64
  • Schreibrechte in /data: nicht getestet. Falls nötig, den gestoppten Container mit /container/set [find name=honeypot64] user=0:0 als root laufen lassen oder ohne Mount betreiben – dann meldet ein neu angelegter Container mit neuer Sensor-Kennung.
  • Registry ghcr.io und der Import per docker save sind nicht auf einem Router ausprobiert.
  • Aktualisieren: Container stoppen, entfernen und neu anlegen (Daten im Mount bleiben). Der Befehl repull (ab 7.20) ist nicht getestet.
  • Ältere RouterOS-Versionen: Vor 7.21 heißt der Parameter mounts= statt mountlists=; mehrere envlists und memory-max je Container gibt es erst ab 7.20. Was die eigene Version kennt, zeigt /container/add ?.
  • IPv6 ist hier nicht beschrieben; die Weiterleitung gilt nur für IPv4.

Von der Meldung zur v64 Blocklist

ipv64 bewertet die Meldungen aller Sensoren alle 30 Minuten. Damit eine IP auf die Liste kommt, müssen sie mehrere unabhängige Beitragende gemeldet haben – gezählt werden Accounts, nicht Sensoren. Wie viele es sein müssen, hängt davon ab, wie viele Accounts gerade melden. Nie gelistet werden reservierte Netze, die Sensoren selbst, Infrastruktur von ipv64, große CDNs und freigegebene Adressen. Ohne neue Treffer fällt eine IP nach 14 Tagen wieder heraus.

ListeInhalt
v64 Blocklistalle gerade gesperrten IPs
TeillistenSSH, Web, Mail, RDP und Scanner – für gezielte Sperren je Dienst
Forschungs-Scannerfür alle, die Such- und Forschungs-Scanner aussperren wollen

Die Listen bekommt jeder vollständig (Lizenz CC BY 4.0); der Unterschied ist nur die Aktualität:

Fassungaktualisiertfür
Tagesstandeinmal täglichalle, frei und ohne Anmeldung
Livealle 30 MinutenBeitragende mit Honeypot64 und alle Account-Klassen außer Standard – per Listen-Token
  • In PROXY64 schaltest du die Listen per Klick ein; mit hinterlegtem Listen-Token lädt PROXY64 die Live-Fassung – siehe Live-Listen mit Listen-Token.
  • Live-Fassung: Dein Listen-Token holst du angemeldet unter ipv64.net/honeypot/token.php.
  • Firewalls wie pfSense, OPNsense oder MikroTik laden die Listen als Text-Adresse – siehe den Leitfaden zur v64 Blocklist. Die Anleitungen für Firmen-Firewalls folgen der Doku der Hersteller und sind nicht live getestet.
  • IP-Auskunft: Warum steht eine IP auf der Liste? Unter ipv64.net/honeypot/ip.php und per API (GET https://ipv64.net/api/v2/threat/ip/{ip}) – mit Status, Vertrauenswert, Listen, Arten und Zeitraum.
  • Freigabe: Steht eine eigene Adresse zu Unrecht auf der Liste, stellst du über die IP-Auskunft einen Freigabe-Antrag.
  • Statistik: aktive Sensoren, Angriffe der letzten 24 Stunden, häufigste Ports und Arten, Größe der Listen sowie die häufigsten Benutzernamen, Passwörter, Pfade und User-Agents unter ipv64.net/honeypot/stats.php, per API GET https://ipv64.net/api/v2/threat/stats.
  • Text-Listen: die häufigsten Passwörter, Benutzernamen, User-Agents und Angriffspfade der Angreifer – für Passwort-Richtlinien, Webserver und WAF. Sie stehen in der index.json der Blocklisten unter data (Kategorie honeypot-data, Lizenz CC BY 4.0).
  • Passwortprüfung: Steht ein Passwort auf der Liste der Angreifer? Prüfen unter ipv64.net/honeypot/password.php oder per API GET https://ipv64.net/api/v2/threat/passwords/range/{prefix} – mit k-Anonymität wie bei „Have I Been Pwned“: Übertragen werden nur die ersten Zeichen des SHA-1-Hashs, nie das Passwort, und die Antwort ist aufgefüllt.
  • Änderungs-Feed: GET https://ipv64.net/api/v2/threat/feed?since=… liefert nur die Änderungen der Listen seit einem Zeitpunkt – für eigene Werkzeuge und große Abnehmer. Mit API-Key, für alle Account-Klassen außer Standard und für Beitragende.
  • Fingerabdrücke: Die häufigsten JA4- und HASSH-Fingerabdrücke aller Sensoren stehen in der Statistik und unter /threat/stats (top.fingerprints).

Fragen und Wünsche zu Honeypot64 gern ins Forum v64.tech.

Etwas unklar, fehlt etwas oder hast du eine Frage zu Node64? Frag im offiziellen Forum v64.tech.

Fragen zu Node64?
Für alle Fragen zum Produkt gibt es das offizielle Forum: Einrichtung, Fehlersuche, Ideen und Austausch mit der Community und dem ipv64.net-Team.
Zum Forum v64.tech