Honeypot Server
Un Honeypot Server open source qui détecte les attaques et partage automatiquement de la Threat Intelligence avec la communauté ReportedIP. Déployez-le au sein de votre infrastructure pour intercepter les attaquants avant qu’ils n’atteignent vos systèmes réels.
Qu'est-ce qu'un Honeypot ?
Un Honeypot est un système leurre conçu pour attirer et détecter les attaquants. Il imite des services réels mais n’a aucune finalité légitime — toute interaction avec lui est intrinsèquement suspecte.
Le Honeypot Server ReportedIP émule des installations CMS vulnérables afin d’identifier les adresses IP malveillantes. Lorsqu’un attaquant tente un Login Brute Force, recherche des failles connues ou analyse le système à la recherche de vulnérabilités, le honeypot capture l’adresse IP source et les détails de l’attaque, puis les transmet automatiquement à l’API ReportedIP.
CMS Emulation
Le Honeypot Server simule les pages de Login et les panneaux d’administration des systèmes de gestion de contenu les plus courants. Les attaquants tentant des attaques par Brute-Force ou par exploitation de failles sont détectés et signalés immédiatement.
| CMS | Chemins émulés | Détection |
|---|---|---|
| WordPress | /wp-login.php, /wp-admin/, /xmlrpc.php |
Attaques Brute-Force sur le Login, utilisation abusive de XML-RPC, exploits de plugins |
| Drupal | /user/login, /admin/ |
Tentatives de Login, signatures « Drupalgeddon » |
| Joomla | /administrator/, /index.php/component/users/ |
Attaques Brute-Force sur l'interface d'administration, failles de composants |
Threat Analyzers
Le Honeypot intègre 36 analyseurs qui inspectent chaque requête entrante à la recherche de modèles et de techniques d'attaque connus :
| Analyseur | Description |
|---|---|
| Détection des attaques Brute Force | Identifie les tentatives de Login répétées provenant d’une même source |
| SQL Injection | Détecte les Payloads d'SQL Injection dans les paramètres et les en-têtes |
| Payloads XSS | Détecte les tentatives de cross-site scripting dans les données de requête |
| Traversée de répertoires | Identifie les séquences de traversée de répertoires (../, ..\\) |
| Signatures d’exploits connus | Compare les requêtes à une base de données d'exploits CVE connus |
| Credential Stuffing | Détecte les tentatives automatisées de connexion à l'aide de différentes paires nom d'utilisateur/mot de passe |
| Énumération de répertoires | Identifie les analyses systématiques visant à repérer des fichiers et répertoires sensibles |
| Abus XML-RPC | Détecte l'amplification des pingbacks et les attaques Brute-Force sur les méthodes via XML-RPC |
Génération automatique de rapports
Chaque attaque détectée est automatiquement signalée à la ReportedIP API sans intervention manuelle. Chaque rapport comprend :
- L'adresse IP source — l'adresse IP de l'attaquant
- Type d’attaque — le modèle d’attaque spécifique détecté
- ID de catégorie — associé à l’une des 30 Threat Categories prédéfinies
- Horodatages — heure précise de chaque événement d’attaque
Impact sur le Confidence Score
Les rapports des honeypots ont un poids particulier dans le système de réputation car ils représentent une activité malveillante confirmée — il n’existe aucune raison légitime d’interagir avec un honeypot. Le système applique un bonus « honeypot » spécifique en plus du Confidence Score de base.
| Avantage | Détails |
|---|---|
| Bonus « Honeypot » | Jusqu’à +25 points ajoutés au Confidence Score |
| Réduction du Time Dampening | Les rapports restent pertinents plus longtemps ; le ratio « Honeypot » réduit le facteur de décroissance |
| Pondération de confiance plus élevée | Les rapports « honeypot » sont multipliés par honeypot_report_weight_multiplier (par défaut : 2,0x) |
| Confiance minimale | Avec ≥2 rapports « Honeypot », un niveau de confiance minimum de 25 % est garanti |
Formule du bonus « Honeypot »
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)
Configuration requise
Le Honeypot Server est une application PHP autonome ne présentant aucune dépendance externe à Composer. Il stocke toutes les données dans une base de données SQLite locale ; aucun serveur de base de données distinct n’est donc nécessaire.
- PHP 8.2+ avec le
pdo_sqlite,curl, ainsi quejsonextensions - nginx ou Apache redirigeant toutes les requêtes vers
public/index.php - SQLite pour le stockage — aucun serveur MySQL/PostgreSQL n’est nécessaire
Installation
Docker (recommandé)
La manière la plus rapide de démarrer Getting Started. Clonez le dépôt et lancez la pile Compose fournie :
git clone https://github.com/reportedip/honeypot-server.git
cd honeypot-server
docker compose -f docker/docker-compose.yml up -d
Ouvrez l’URL du conteneur dans votre navigateur — l’installateur web démarre automatiquement lors de la première visite et vous guide à travers les vérifications du système, la saisie de l’API Key, la sélection du CMS et la configuration des identifiants d’administrateur. Vous avez besoin d’une API Key ReportedIP pour l’étape de génération de rapports — consultez la section « Authentification et Rate Limits » pour savoir comment en créer une (des clés dédiées de type « Honeypot » avec un nombre Unlimited de rapports sont attribuées sur demande).
Configuration manuelle
Clonez le dépôt et configurez votre serveur web pour qu’il pointe vers le public/ répertoire. Des
configurations types pour les deux serveurs web sont fournies avec le dépôt :
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
Ouvrez ensuite l’URL du site dans votre navigateur. Le programme d’installation Web vous guide à travers les vérifications du système, la saisie de l’API Key, la sélection du CMS, les identifiants d’administrateur et la configuration optionnelle d’OpenAI.
Configuration
La plupart des paramètres sont enregistrés par l’installateur web lors de la première exécution. Ils peuvent être modifiés ultérieurement dans le panneau d’administration ou dans le fichier de configuration.
| Paramètre | Valeur par défaut | Description |
|---|---|---|
api_key |
— | Votre Community Access Key ReportedIP (obligatoire). Utilisez une clé de type « Honeypot » pour bénéficier d'un nombre Unlimited de rapports — demandez-en une à l'adresse 1@reportedip.com. |
cms_profile |
wordpress |
profil CMS à émuler : wordpress, drupal, ou joomla. |
admin_path |
/_hp_admin |
Chemin d’accès URL du panneau d’administration. Choisissez une valeur peu évidente pour la garder cachée. |
trusted_proxies |
CIDR Cloudflare | Plages d’adresses IP proxy utilisées pour résoudre l’adresse IP réelle du client derrière un CDN. |
rate_limit_per_ip |
10 |
Nombre maximal d'entrées de journal stockées par adresse IP et par minute. |
report_rate_limit |
60 |
Nombre maximal de rapports API envoyés par minute. |
report_batch_size |
10 |
Nombre de rapports en file d'attente transmis par lot cron. |
queue_mode |
web |
Mode de traitement de la file d'attente des rapports : web (après chaque visite de page) ou cron. |
log_retention_days |
90 |
Nombre de jours avant que les anciennes entrées de journal ne soient automatiquement supprimées. |
openai_api_key |
— | Clé OpenAI facultative pour le contenu leurre généré par l'IA. |
Traitement de la file d'attente
Les attaques détectées sont mises en file d’attente et transmises à la ReportedIP API par petits lots. Deux modes sont disponibles :
- Cron Web (par défaut) : la file d’attente est traitée automatiquement après chaque visite de la page. Aucune tâche cron externe n’est nécessaire — idéal pour l’hébergement mutualisé.
-
Cron manuel :
configurez
queue_modedecronet planifiez vous-même le worker CLI.
# Process the report queue every 5 minutes
*/5 * * * * php /path/to/honeypot-server/cli.php process-queue
Webhooks
Le Honeypot peut transférer en temps réel chaque détection correspondante vers un Endpoint externe — acheminant ainsi les attaques directement vers votre SIEM, votre plateforme de journalisation, une alerte par chat ou une autre base de données de menaces. Les Webhooks ont été introduits dans la version 1.2.0 ; la version 1.3.0 les a transformés en un routeur flexible capable de cibler n’importe quelle API HTTP, y compris un mappage AbuseIPDB intégré.
Chaque Webhook est un endpoint HTTP(S) qui reçoit une requête pour chaque détection à laquelle il correspond. La transmission a lieu après l’envoi de la réponse de piège à l’attaquant ; ainsi, les Webhooks ne ralentissent jamais le Honeypot. Lorsqu’une seule requête déclenche plusieurs analyseurs, les détections sont agrégées en une seule transmission (catégories fusionnées, gravité la plus élevée).
Configuration
Les Webhooks sont gérés dans le panneau d’administration, sous la rubrique « Webhooks ». Chaque Endpoint prend en charge :
- Filtres par catégorie — limitent la transmission à des identifiants de Threat Categories spécifiques.
- Filtres par analyseur — limitent la transmission à des moteurs de détection nommés (par ex.
SqlInjection). - Clé secrète — facultative, active la signature de la Payload HMAC-SHA256.
Des filtres vides signifient que toutes les détections sont transmises. Lorsque les deux filtres sont définis, le Webhook
se déclenche dès qu’un des deux correspond. Chaque Endpoint peut être vérifié depuis le panneau d’administration à l’aide d’
un envoi test, qui comporte l’en-tête X-ReportedIP-Event: test.
En-têtes de requête
| En-tête | Valeur |
|---|---|
Content-Type |
application/json |
User-Agent |
reportedip-honeypot-server/<version> |
X-ReportedIP-Event |
detection ou test |
X-ReportedIP-Signature |
sha256=<HMAC> — uniquement lorsqu’un secret est configuré |
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
Lorsqu’un secret est configuré, calculez le HMAC sur le corps brut de la requête et comparez-le en temps constant :
$expected = 'sha256=' . hash_hmac('sha256', $rawBody, $secret);
$valid = hash_equals($expected, $_SERVER['HTTP_X_REPORTEDIP_SIGNATURE'] ?? '');
Routage vers n’importe quelle API
Un Webhook n’est plus limité au format JSON ReportedIP. Depuis la version 1.3.0, chaque Endpoint définit sa propre méthode HTTP, ses en-têtes et son corps, ce qui vous permet d’envoyer directement des requêtes vers AbuseIPDB, Slack, Discord, ou n’importe quelle API HTTP — sans avoir besoin de middleware.
| Options par Webhook | Choix | Remarques |
|---|---|---|
| Méthode HTTP | POST, PUT, PATCH, GET |
Adaptez-la aux exigences de l’API cible. |
| En-têtes personnalisés | Un par ligne | Ajoutez des API Keys ou des en-têtes d'authentification ; ceux-ci remplacent les valeurs par défaut. |
| Format du corps | json, form, modèle personnalisé |
JSON structuré, paires clé/valeur encodées en URL ou modèle libre. |
Espaces réservés
Les en-têtes personnalisés et les corps de message basés sur des modèles sont remplis à partir des espaces réservés. Les jetons confirmés incluent
{{ip}}, {{categories}}, {{severity}}, et
{{timestamp}}; les autres champs de requête et de détection indiqués dans la Payload ci-dessus sont
également disponibles. Chaque jeton comporte également une {{..._url}} variante (encodée en URL) et
{{..._json}} (avec échappement JSON) afin que les valeurs restent sécurisées dans n’importe quel contexte.
Intégration d’AbuseIPDB
The honeypot provides a dedicated {{abuseipdb_categories}} qui traduit
les catégories de menaces ReportedIP (ID 1 à 30)
en ID de catégories AbuseIPDB les plus proches. Cela permet de
générer un rapport direct vers l’API AbuseIPDB v2 à l’aide d’un modèle de corps de message d’une seule ligne :
POST https://api.abuseipdb.com/api/v2/report
Header: Key: <your-abuseipdb-api-key>
Body (form): ip={{ip}}&categories={{abuseipdb_categories}}&comment={{comment_url}}
Préréglages
Vous n’avez pas besoin de configurer cela manuellement. Des préréglages intégrés pour AbuseIPDB, Slack, Discord et une cible JSON générique prémplissent la méthode, les en-têtes et le corps — choisissez-en un, insérez votre clé ou votre URL, puis envoyez un test.
127.0.0.1, de sorte que
la vérification d’un Webhook AbuseIPDB ou tiers n’entraîne jamais l’envoi d’un véritable signalement à une adresse active.
Dépôt GitHub
Le Honeypot Server est entièrement open source. Les contributions, les rapports de bogues et les demandes de fonctionnalités sont les bienvenus.
Dernière mise à jour : · Géré par l'équipe ReportedIP