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
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
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,curlsowiejsonErweiterungen - 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:
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:
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, umcronund planen Sie den CLI-Worker selbst ein.
# 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
{
"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:
$expected = 'sha256=' . hash_hmac('sha256', $rawBody, $secret);
$valid = hash_equals($expected, $_SERVER['HTTP_X_REPORTEDIP_SIGNATURE'] ?? '');
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:
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.
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.
Zuletzt aktualisiert: · Betreut vom reportedIP-Team