Honeypot-Server
Ein Open-Source-Honeypot-Server, der Angriffe erkennt und automatisch Bedrohungsdaten an die ReportedIP übermittelt. Setzen Sie ihn in Ihrer Infrastruktur ein, um Angreifer abzufangen, bevor sie Ihre eigentlichen Systeme erreichen.
Was ist ein Honeypot?
Ein Honeypot ist ein Ködersystem, das dazu dient, Angreifer anzulocken und aufzuspüren. Es ahmt echte Dienste nach, hat jedoch keinen legitimen Zweck – jede Interaktion damit ist von Natur aus verdächtig.
Der ReportedIP emuliert anfällige CMS-Installationen, um böswillige IP-Adressen zu identifizieren. Wenn ein Angreifer einen Brute-Force-Anmeldeversuch unternimmt, nach bekannten Exploits sucht oder nach Sicherheitslücken scannt, erfasst der Honeypot die Quell-IP und die Angriffsdetails und meldet diese automatisch an die ReportedIP .
CMS-Emulation
Der Honeypot-Server simuliert Anmeldeseiten und Administrationsbereiche 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, Ausnutzung von Plugin-Sicherheitslücken |
| Drupal | /user/login, /admin/ |
Anmeldeversuche, Drupalgeddon-Signaturen |
| Joomla | /administrator/, /index.php/component/users/ |
Brute-Force-Angriffe auf das Admin-System, Ausnutzung von Sicherheitslücken in Komponenten |
Bedrohungsanalysatoren
Der Honeypot verfügt über 36 integrierte Analysatoren, die jede eingehende Anfrage auf bekannte Angriffsmuster und -techniken überprüfen:
| Analysator | Beschreibung |
|---|---|
| Erkennung von Brute-Force-Angriffen | Erkennt wiederholte Anmeldeversuche von derselben Quelle |
| SQL Injection | Erkennt SQL-Injection-Payloads in Parametern und Headern |
| XSS-Payloads | Erkennt Cross-Site-Scripting-Versuche in Anfragedaten |
| Pfaddurchlauf | Erkennt Verzeichnisüberquerungssequenzen (../, ..\\) |
| Bekannte Exploit-Signaturen | Gleicht Anfragen mit einer Datenbank bekannter CVE-Exploits ab |
| Credential Stuffing | Erkennt automatisierte Anmeldeversuche mit verschiedenen Benutzernamen-Passwort-Kombinationen |
| Verzeichnisaufzählung | Ermittelt systematische Suchvorgänge nach sensiblen Dateien und Verzeichnissen |
| Missbrauch von XML-RPC | Erkennt Pingback-Amplifikation und Brute-Force-Angriffe über XML-RPC |
Automatische Berichterstellung
Jeder erkannte Angriff wird automatisch und ohne manuellen Eingriff an die ReportedIP gemeldet. Jeder Bericht enthält:
- Quell-IP – die IP-Adresse des Angreifers
- Angriffstyp – das erkannte spezifische Angriffsmuster
- Category ID — mapped to one of the 30 predefined threat categories
- Zeitstempel – genauer Zeitpunkt jedes Angriffsvorfalls
Auswirkungen auf den Vertrauensindex
Honeypot-Meldungen haben im Reputationssystem 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 zur Basis-Vertrauensbewertung einen speziellen Honeypot-Bonus an.
| Vorteil | Details |
|---|---|
| Honeypot-Bonus | Bis zu +25 Punkte werden zum Vertrauenswert hinzugefügt |
| Reduzierte Zeitdämpfung | Berichte bleiben länger aktuell; die Honeypot-Quote verringert den Verfallsfaktor |
| Höheres Vertrauensgewicht | Honeypot-Meldungen werden mit honeypot_report_weight_multiplier (Standard: 2.0x) |
| Mindestvertrauen | Bei ≥2 Honeypot-Meldungen ist eine Zuverlässigkeit von mindestens 25 % gewährleistet |
Honeypot-Bonusformel
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)
Anforderungen
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,curlundjsonErweiterungen - nginx oder Apache alle Anfragen an
public/index.php - SQLite als Speicherlösung – kein MySQL-/PostgreSQL-Server erforderlich
Installation
Docker (empfohlen)
Der schnellste Weg, um loszulegen. 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
Open the container URL in your browser — the web installer starts automatically on first visit and walks you through system checks, API key entry, CMS selection, and admin credentials. You need a ReportedIP API key for the reporting step — see Authentication & Rate Limits for how to create one (dedicated honeypot keys with unlimited reporting are assigned on request).
Manuelle Einrichtung
Klonen Sie das Repository und richten 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-Schlüssels, die Auswahl des CMS, die Eingabe der Administrator-Anmeldedaten und 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 -Zugangsschlüssel (erforderlich). Verwenden Sie einen Schlüssel mit Honeypot-Rolle für uneingeschränkte Berichterstellung – fordern Sie diesen unter [email protected]. |
cms_profile |
wordpress |
Zu emulierendes CMS-Profil: wordpress, drupaloder joomla. |
admin_path |
/_hp_admin |
URL-Pfad des Admin-Bereichs. Wähle einen nicht offensichtlichen Wert, damit er verborgen bleibt. |
trusted_proxies |
Cloudflare-CIDRs | Proxy-IP-Bereiche, die verwendet werden, um die tatsächliche Client-IP hinter einem CDN zu ermitteln. |
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-Anfragen. |
report_batch_size |
10 |
Anzahl der pro Cron-Batch übermittelten Berichte in der Warteschlange. |
queue_mode |
web |
Verarbeitungsmodus für die Berichtswarteschlange: web (nach jedem Seitenaufruf) oder cron. |
log_retention_days |
90 |
Wie viele Tage, bevor alte Protokolleinträge automatisch gelöscht werden. |
openai_api_key |
— | Optionaler OpenAI-Schlüssel für KI-generierte Scheininhalte. |
Warteschlangenverarbeitung
Erkannte Angriffe werden in eine Warteschlange gestellt und in kleinen Stapeln an die ReportedIP 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-Job: Satz
queue_modezucronund planen 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 Endpunkt weiterleiten – Angriffe werden direkt an Ihr SIEM, Ihre Protokollierungsplattform, einen Chat-Alarm oder eine andere Bedrohungsdatenbank weitergeleitet. Webhooks wurden mit Version 1.2.0 eingeführt; in Version 1.3.0 wurden sie zu einem flexiblen Router, der jede beliebige HTTP-API ansteuern kann, einschließlich einer integrierten Zuordnung zur AbuseIPDB.
Jeder Webhook ist ein HTTP(S)-Endpunkt, 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-Bereich unter „Webhooks“ verwaltet. Jeder Endpunkt unterstützt:
- Kategoriefilter – Beschränken Sie die Zustellung auf bestimmte IDs von Bedrohungskategorien.
- Analysatorfilter — die Bereitstellung auf bestimmte Erkennungsmodule beschränken (z. B.
SqlInjection). - Geheimer Schlüssel – optional, ermöglicht die Signierung der Nutzdaten mit HMAC-SHA256.
Leere Filter bedeuten alle Erkennungen übermittelt werden. Wenn beide Filter aktiviert sind, wird der Webhook
ausgelöst, wenn oder eine Übereinstimmung vorliegt. Jeder Endpunkt kann über das Admin-Panel mit
einer Testübermittlung überprüft werden, die den Header X-ReportedIP-Event: test.
Anfrage-Header
| Kopfzeile | 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 Secret konfiguriert ist |
Nutzlast
{
"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
}
]
}
Unterschriftsprüfung
Wenn ein Geheimnis konfiguriert ist, berechne den HMAC über den Rohtext des Anfragetextkörpers und vergleiche ihn in konstanter Zeit:
$expected = 'sha256=' . hash_hmac('sha256', $rawBody, $secret);
$valid = hash_equals($expected, $_SERVER['HTTP_X_REPORTEDIP_SIGNATURE'] ?? '');
Weiterleitung an eine beliebige API
Ein Webhook ist nicht mehr an das ReportedIP gebunden. Seit Version 1.3.0 definiert jeder Endpunkt 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.
| Option pro Webhook | Auswahlmöglichkeiten | Anmerkungen |
|---|---|---|
| HTTP-Methode | POST, PUT, PATCH, GET |
Passe dich den Anforderungen der Ziel-API an. |
| Benutzerdefinierte Kopfzeilen | Einer pro Zeile | Fügen Sie API-Schlüssel oder Authentifizierungs-Header hinzu; diese überschreiben die Standardeinstellungen. |
| Seitenformat | json, form, benutzerdefinierte Vorlage |
Strukturiertes JSON, URL-kodierte Schlüssel-Wert-Paare oder eine frei gestaltbare Vorlage. |
Platzhalter
Benutzerdefinierte Kopfzeilen und vorlagenbasierte Hauptteile werden anhand von Platzhaltern ausgefüllt. Zu den bestätigten Tokens gehören
{{ip}}, {{categories}}, {{severity}}und
{{timestamp}}; die anderen in der obigen Nutzlast angezeigten Anfrage- und Erkennungsfelder sind
ebenfalls verfügbar. Jedes Token verfügt zudem über ein {{..._url}} (URL-kodiert) und
{{..._json}} (JSON-escaped) Variante, damit die Werte in jedem Kontext sicher bleiben.
Integration von AbuseIPDB
Der Honeypot verfügt über einen eigenen {{abuseipdb_categories}} placeholder that translates
the ReportedIP threat categories (IDs 1–30)
to their nearest AbuseIPDB category IDs. That makes
a direct report to the AbuseIPDB v2 API a one-line body template:
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 Option aus, geben Sie Ihren Schlüssel oder Ihre URL ein und senden Sie einen Test.
127.0.0.1, daher
führt die Überprüfung einer AbuseIPDB oder eines Webhooks eines Drittanbieters niemals zu einer tatsächlichen Meldung gegen eine aktive Adresse.
GitHub-Repository
Der Honeypot-Server ist vollständig Open Source. Beiträge, Fehlermeldungen und Feature-Anfragen sind willkommen.
Zuletzt aktualisiert: · Betreut vom ReportedIP