Skip to main contentSkip to footer

Honeypot Server

Ein Open-Source-Honeypot-Server, der Angriffe erkennt und automatisch Threat Intelligence an die ReportedIP-Community weiterleitet. Setzen Sie ihn in Ihrer Infrastruktur ein, um Angreifer abzufangen, bevor diese Ihre eigentlichen Systeme erreichen.

Was ist ein Honeypot?

Ein Honeypot ist ein Ködersystem, das dazu dient, Angreifer anzulocken und zu erkennen. Er ahmt echte Dienste nach, hat jedoch keinen legitimen Zweck – jede Interaktion mit ihm ist von Natur aus verdächtig.

Der ReportedIP-Honeypot-Server emuliert anfällige CMS-Installationen, um bösartige IP-Adressen zu identifizieren. Wenn ein Angreifer einen Brute-Force-Login unternimmt, nach bekannten Exploits sucht oder nach Schwachstellen scannt, erfasst der Honeypot die Quell-IP und die Angriffsdetails und meldet diese anschließend automatisch an die ReportedIP API.

CMS Emulation

Der Honeypot Server simuliert Anmeldeseiten und Admin-Bereiche beliebter Content-Management-Systeme. Angreifer, die Brute-Force- oder Exploit-Angriffe versuchen, werden sofort erkannt und gemeldet.

CMS Emulierte Pfade Erkennung
WordPress /wp-login.php, /wp-admin/, /xmlrpc.php Brute-Force-Angriffe auf den Login, Missbrauch von XML-RPC, Exploits in Plugins
Drupal /user/login, /admin/ Login-Versuche, „Drupalgeddon“-Signaturen
Joomla /administrator/, /index.php/component/users/ Brute-Force-Angriffe auf den Admin-Bereich, Ausnutzung von Sicherheitslücken in Komponenten

Threat Analyzers

Der Honeypot umfasst 36 integrierte Analysatoren, die jede eingehende Anfrage auf bekannte Angriffsmuster und -techniken überprüfen:

Analysator Beschreibung
Brute-Force-Erkennung Erkennt wiederholte Versuche des Logins von derselben Quelle
SQL Injection Erkennt SQL Injection-Payloads in Parametern und Headern
XSS-Payloads Erkennt Cross-Site-Scripting-Versuche in Anfragedaten
Pfadtraversierung Identifiziert Verzeichnis-Traversal-Sequenzen (../, ..\\)
Bekannte Exploit-Signaturen Gleicht Anfragen mit einer Datenbank bekannter CVE-Exploits ab
Credential Stuffing Erkennt automatisierte Anmeldeversuche mit verschiedenen Benutzernamen-Passwort-Kombinationen
Verzeichnisaufzählung Identifiziert systematisches Scannen nach sensiblen Dateien und Verzeichnissen
XML-RPC-Missbrauch Erkennt Pingback-Amplifikation und Brute-Force-Angriffe auf Methoden über XML-RPC

Automatische Berichterstellung

Jeder erkannte Angriff wird automatisch und ohne manuellen Eingriff an die ReportedIP API gemeldet. Jeder Bericht enthält:

  • Quell-IP – die IP-Adresse des Angreifers
  • Angriffstyp – das spezifische erkannte Angriffsmuster
  • Kategorie-ID – zugeordnet zu einer der 30 vordefinierten Threat Categories
  • Zeitstempel – der genaue Zeitpunkt jedes Angriffsereignisses
Höheres Vertrauen: Honeypot-Reports werden bei der Berechnung des Confidence Score stärker gewichtet. Von Honeypots gemeldete IP-Adressen erhalten einen speziellen Bonus, und ihre Reports bleiben aufgrund einer reduzierten Time Dampening länger relevant.

Auswirkungen auf den Confidence Score

Honeypot-Reports haben im Reputationssystem ein besonderes Gewicht, da sie bestätigte böswillige Aktivitäten darstellen – es gibt keinen legitimen Grund, mit einem Honeypot zu interagieren. Das System wendet zusätzlich zum Basis-Confidence Score einen speziellen Honeypot-Bonus an.

Vorteil Details
Honeypot-Bonus Bis zu +25 Punkte werden dem Confidence Score hinzugefügt
Reduziertes Time Dampening Reports bleiben länger relevant; die Honeypot-Quote verringert den Abklingfaktor
Höheres Vertrauensgewicht Honeypot-Reports werden mit honeypot_report_weight_multiplier (Standard: 2,0x)
Mindestvertrauensgrad Bei ≥2 Honeypot-Reports ist ein Mindestvertrauensgrad von 25 % gewährleistet

Formel für den Honeypot-Bonus

text
base_bonus = honeypot_count * base_bonus_per_report

# Diversity requirement
diversity_factor = min(unique_reporters / diversity_divisor, 1.0)
base_bonus = base_bonus * diversity_factor

# Single reporter penalty (if > 5 honeypot reports & only 1 reporter)
if honeypot_reports > threshold AND unique_reporters == 1:
    penalty = 10

final_bonus = min(base_bonus - penalty, 25)

# Time dampening reduction
honeypot_ratio = honeypot_reports_count / report_count
dampening_reduction = honeypot_ratio * 0.5
time_dampening_factor = min(1.0, time_dampening_factor + dampening_reduction)

Voraussetzungen

Der Honeypot Server ist eine eigenständige PHP-Anwendung ohne externe Composer-Abhängigkeiten. Er speichert alle Daten in einer lokalen SQLite-Datenbank, sodass kein separater Datenbankserver erforderlich ist.

  • PHP 8.2+ mit dem pdo_sqlite, curlsowie json Erweiterungen
  • nginx oder Apache, die alle Anfragen an public/index.php
  • SQLite zur Speicherung weiterleiten – kein MySQL-/PostgreSQL-Server erforderlich

Installation

Docker (empfohlen)

Der schnellste Weg, um Getting Started zu beginnen. Klonen Sie das Repository und starten Sie den mitgelieferten Compose-Stack:

bash
git clone https://github.com/reportedip/honeypot-server.git
cd honeypot-server
docker compose -f docker/docker-compose.yml up -d

Öffnen Sie die Container-URL in Ihrem Browser – der Web-Installer startet automatisch beim ersten Besuch und führt Sie durch die Systemprüfungen, die Eingabe des API Keys, die CMS-Auswahl und die Eingabe der Administrator-Anmeldedaten. Für den Berichtsschritt benötigen Sie einen ReportedIP-API-Schlüssel – unter „Authentifizierung & Rate Limits“ erfahren Sie, wie Sie einen solchen erstellen können (spezielle Honeypot-Schlüssel mit unbegrenzter Berichterstellung werden auf Anfrage zugewiesen).

Manuelle Einrichtung

Klonen Sie das Repository und verweisen Sie Ihren Webserver auf das public/ Verzeichnis. Vorlagen für beide Webserver sind im Repository enthalten:

bash
git clone https://github.com/reportedip/honeypot-server.git
cd honeypot-server

# nginx: adapt the bundled example
cp config/nginx.conf.example /etc/nginx/sites-available/honeypot.conf

# Apache: copy the htaccess template into the document root
cp config/apache.htaccess.example public/.htaccess

Öffnen Sie anschließend die URL der Website in Ihrem Browser. Der Web-Installer führt Sie durch die Systemprüfungen, die Eingabe des API Keys, die Auswahl des CMS, die Eingabe der Administrator-Anmeldedaten sowie die optionale OpenAI-Einrichtung.

Konfiguration

Die meisten Einstellungen werden beim ersten Start vom Web-Installationsprogramm erfasst. Sie können später im Admin-Panel oder in der Konfigurationsdatei angepasst werden.

Einstellung Standard Beschreibung
api_key Ihr „ReportedIP Community Access Key“ (erforderlich). Verwenden Sie einen Schlüssel mit „Honeypot“-Rolle für uneingeschränkte Berichterstellung – fordern Sie diesen unter 1@reportedip.com.
cms_profile wordpress zu emulierendes CMS-Profil: wordpress, drupaloder joomla.
admin_path /_hp_admin URL-Pfad des Admin-Panels. Wählen Sie einen nicht offensichtlichen Wert, um ihn verborgen zu halten.
trusted_proxies Cloudflare-CIDRs Proxy-IP-Bereiche, die zur Ermittlung der tatsächlichen Client-IP hinter einem CDN verwendet werden.
rate_limit_per_ip 10 Maximale Anzahl der pro IP-Adresse und Minute gespeicherten Protokolleinträge.
report_rate_limit 60 Maximale Anzahl der pro Minute gesendeten API-Reports.
report_batch_size 10 Anzahl der in der Warteschlange befindlichen Reports, die pro Cron-Batch übertragen werden.
queue_mode web Verarbeitungsmodus der Berichtswarteschlange: web (nach jedem Seitenbesuch) oder cron.
log_retention_days 90 Anzahl der Tage, nach denen alte Protokolleinträge automatisch gelöscht werden.
openai_api_key Optionaler OpenAI-Schlüssel für KI-generierte Scheininhalte.

Warteschlangenverarbeitung

Erkannte Angriffe werden in die Warteschlange gestellt und in kleinen Stapeln an die ReportedIP API weitergeleitet. Es stehen zwei Modi zur Verfügung:

  • Web-Cron (Standard): Die Warteschlange wird nach jedem Seitenaufruf automatisch verarbeitet. Ein externer Cron-Job ist nicht erforderlich – ideal für Shared Hosting.
  • Manueller Cron: Legen Sie queue_mode , um cron und planen Sie den CLI-Worker selbst ein.
bash
# Process the report queue every 5 minutes
*/5 * * * * php /path/to/honeypot-server/cli.php process-queue

Webhooks

Der Honeypot kann jede übereinstimmende Erkennung in Echtzeit an einen externen Endpoint weiterleiten – leiten Sie Angriffe direkt in Ihr SIEM, Ihre Protokollierungsplattform, einen Chat-Alarm oder eine andere Bedrohungsdatenbank weiter. Webhooks wurden mit Version 1.2.0 eingeführt; ab Version 1.3.0 wurden sie zu einem flexiblen Router, der jede beliebige HTTP-API ansteuern kann, einschließlich einer integrierten AbuseIPDB-Zuordnung.

Jeder Webhook ist ein HTTP(S)-Endpoint, der für jede Erkennung, auf die er zutrifft, eine Anfrage empfängt. Die Übermittlung erfolgt, nachdem die Trap-Antwort an den Angreifer gesendet wurde, sodass Webhooks den Honeypot niemals verlangsamen. Wenn eine einzelne Anfrage mehrere Analysatoren auslöst, werden die Erkennungen zu einer einzigen Übermittlung zusammengefasst (zusammengeführte Kategorien, höchster Schweregrad).

Einrichtung

Webhooks werden im Admin-Panel unter „Webhooks“ verwaltet. Jeder Endpoint unterstützt:

  • Kategoriefilter – beschränken die Übermittlung auf bestimmte Threat Categories.
  • Analyzer-Filter – beschränken die Übermittlung auf benannte Erkennungs-Engines (z. B. SqlInjection).
  • Geheimer Schlüssel – optional, ermöglicht die HMAC-SHA256-Signierung der Payload.

Leere Filter bedeuten, dass alle Erkennungen übermittelt werden. Sind beide Filter gesetzt, wird der Webhook ausgelöst, sobald einer davon übereinstimmt. Jeder Endpoint kann über das Admin-Panel mit einer Testübermittlung überprüft werden, die den Header X-ReportedIP-Event: test.

Anfrage-Header

Header Wert
Content-Type application/json
User-Agent reportedip-honeypot-server/<version>
X-ReportedIP-Event detection oder test
X-ReportedIP-Signature sha256=<HMAC> — nur, wenn ein Geheimnis konfiguriert ist

Payload

json
{
  "event": "detection",
  "generated_at": "2026-06-12T14:00:00+00:00",
  "honeypot": {
    "name": "reportedip-honeypot-server",
    "version": "1.3.0",
    "host": "your-honeypot.example.com",
    "profile": "wordpress"
  },
  "request": {
    "ip": "203.0.113.50",
    "method": "POST",
    "uri": "/wp-login.php",
    "user_agent": "sqlmap/1.7"
  },
  "detections": [
    {
      "analyzer": "SqlInjection",
      "categories": [16, 21],
      "category_names": ["SQL Injection", "Web App Attack"],
      "comment": "SQL injection attempt detected: ...",
      "severity": 85
    }
  ]
}

Signature Verification

Wenn ein Geheimnis konfiguriert ist, berechnen Sie den HMAC über den Rohtext des Anfragetextkörpers und vergleichen Sie ihn in konstanter Zeit:

php
$expected = 'sha256=' . hash_hmac('sha256', $rawBody, $secret);
$valid = hash_equals($expected, $_SERVER['HTTP_X_REPORTEDIP_SIGNATURE'] ?? '');
Zustellstatus: Das Admin-Panel erfasst das letzte Zustellergebnis, den Zeitstempel sowie einen Zähler für aufeinanderfolgende Fehler pro Webhook, sodass Sie einen fehlerhaften Endpoint auf einen Blick erkennen können.

Weiterleitung an beliebige APIs

Ein Webhook ist nicht mehr an das JSON-Format „ReportedIP“ gebunden. Seit Version 1.3.0 definiert jeder Endpoint seine eigene HTTP-Methode, seine eigenen Header und seinen eigenen Body, sodass Sie Daten direkt an AbuseIPDB, Slack, Discord oder jede beliebige HTTP-API senden können – ganz ohne Middleware.

Optionen pro Webhook Auswahlmöglichkeiten Hinweise
HTTP-Methode POST, PUT, PATCH, GET Passen Sie diese an die Anforderungen der Ziel-API an.
Benutzerdefinierte Header Einer pro Zeile Fügen Sie API Keys oder Authentifizierungs-Header hinzu; diese überschreiben die Standardwerte.
Format des Hauptteils json, form, benutzerdefinierte Vorlage Strukturiertes JSON, URL-kodierte Schlüssel-Wert-Paare oder eine frei formatierbare Vorlage.

Platzhalter

Benutzerdefinierte Header und vorlagengestützte Hauptteile werden anhand von Platzhaltern ausgefüllt. Zu den bestätigten Tokens gehören {{ip}}, {{categories}}, {{severity}}, und {{timestamp}}; die übrigen in der obigen Payload angezeigten Anfrage- und Erkennungsfelder stehen ebenfalls zur Verfügung. Jedes Token verfügt zudem über eine {{..._url}} (URL-kodierte) sowie {{..._json}} (JSON-escaped) Variante, sodass die Werte in jedem Kontext sicher bleiben.

AbuseIPDB-Integration

Der Honeypot enthält einen speziellen {{abuseipdb_categories}} Platzhalter mit, der die Threat Categories von ReportedIP (IDs 1–30) in die am ehesten entsprechenden AbuseIPDB-Kategorie-IDs übersetzt. Dadurch wird eine direkte Meldung an die AbuseIPDB-v2-API zu einer einzeiligen Body-Vorlage:

text
POST https://api.abuseipdb.com/api/v2/report
Header:  Key: <your-abuseipdb-api-key>
Body (form):  ip={{ip}}&categories={{abuseipdb_categories}}&comment={{comment_url}}

Voreinstellungen

Sie müssen dies nicht manuell einrichten. Integrierte Voreinstellungen für AbuseIPDB, Slack, Discord und ein generisches JSON-Ziel füllen die Methode, die Header und den Body bereits vorab aus – wählen Sie eine aus, geben Sie Ihren Schlüssel oder Ihre URL ein und senden Sie einen Test.

Sicheres Testen: Testübermittlungen verwenden die Loopback-IP 127.0.0.1, sodass die Überprüfung eines AbuseIPDB- oder Drittanbieter-Webhooks niemals eine echte Meldung gegen eine Live-Adresse auslöst.

GitHub-Repository

Der Honeypot Server ist vollständig Open Source. Beiträge, Fehlermeldungen und Feature-Anfragen sind willkommen.

Open Source: github.com/reportedIP/honeypot-server – Markieren Sie das Repository mit einem Stern, melden Sie Probleme oder tragen Sie mit Analysetools zum Schutz der Community bei.

Zuletzt aktualisiert: · Betreut vom reportedIP-Team

Security Focused
GDPR Compliant
Made in Germany
Zurück zu den Docs