Serveur « honeypot »
Un serveur honeypot open source qui détecte les attaques et partage automatiquement des informations sur les menaces avec la 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 pirates. Il imite des services réels mais n'a aucune utilité légitime : toute interaction avec lui est intrinsèquement suspecte.
Le serveur ReportedIP simule des installations de CMS vulnérables afin d'identifier les adresses IP malveillantes. Lorsqu'un pirate tente une attaque par force brute pour se connecter, recherche des failles connues ou analyse le système à la recherche de vulnérabilités, le honeypot enregistre l'adresse IP source et les détails de l'attaque, puis les transmet automatiquement à ReportedIP .
Émulation CMS
Le serveur honeypot simule les pages de connexion et les panneaux d'administration des systèmes de gestion de contenu les plus courants. Les pirates qui tentent des attaques par force brute ou par exploitation sont immédiatement détectés et signalés.
| CMS | Chemins émulés | Détection |
|---|---|---|
| WordPress | /wp-login.php, /wp-admin/, /xmlrpc.php |
Attaques par force brute lors de la connexion, utilisation abusive du protocole XML-RPC, failles dans les plugins |
| Drupal | /user/login, /admin/ |
Tentatives de connexion, signatures Drupalgeddon |
| Joomla | /administrator/, /index.php/component/users/ |
Attaques par force brute contre les comptes administrateur, failles de sécurité des composants |
Analyseurs de menaces
Le honeypot intègre 36 analyseurs qui examinent chaque requête entrante à la recherche de modèles et de techniques d'attaque connus :
| Analyseur | Description |
|---|---|
| Détection des attaques par force brute | Détecte les tentatives de connexion répétées provenant d'une même source |
| Injection SQL | Détecte les charges utiles d'injection SQL dans les paramètres et les en-têtes |
| Charges utiles XSS | Détecte les tentatives de cross-site scripting dans les données de requête |
| Parcours de chemin | Identifie les séquences de traversée de répertoires (../, ..\\) |
| Signatures d'exploits connus | Compare les requêtes à une base de données répertoriant les failles CVE connues |
| Attaque par réutilisation d'identifiants | Détecte les tentatives automatisées de piratage de comptes à l'aide de différentes combinaisons de nom d'utilisateur et de mot de passe |
| Énumération des répertoires | Identifie l'analyse systématique des fichiers et répertoires sensibles |
| Abus via XML-RPC | Détecte l'amplification des pingbacks et les attaques par force brute via XML-RPC |
Génération automatique de rapports
Chaque attaque détectée est automatiquement signalée à ReportedIP sans intervention manuelle. Chaque rapport comprend :
- Adresse IP source — l'adresse IP de l'attaquant
- Type d'attaque — le schéma d'attaque spécifique détecté
- ID de catégorie — associé à l'une des 30 catégories de menaces prédéfinies
- Horodatages — heure exacte de chaque incident de sécurité
Incidence sur l'indice de confiance
Les rapports issus des honeypots ont un poids particulier dans le système de réputation, car ils reflètent une activité malveillante confirmée — il n'y a aucune raison légitime d'interagir avec un honeypot. Le système applique un bonus « honeypot » spécifique en plus du score de confiance de base.
| Avantage | Détails |
|---|---|
| Bonus Honeypot | Jusqu'à +25 points ajoutés au score de confiance |
| Réduction de l'atténuation temporelle | Les rapports restent d'actualité plus longtemps ; le taux de honeypots réduit le facteur de décroissance |
| Poids de confiance plus élevé | Les rapports sur les honeypots se multiplient par honeypot_report_weight_multiplier (par défaut : 2.0x) |
| Confiance minimale | À partir de 2 rapports de honeypot, un niveau de confiance d'au moins 25 % est garanti |
Formule 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)
Conditions requises
Le serveur honeypot est une application PHP autonome qui ne dépend d'aucun composant Composer externe. Il stocke toutes les données dans une base de données SQLite locale, ce qui rend inutile l'utilisation d'un serveur de base de données distinct.
- PHP 8.2+ avec le
pdo_sqlite,curl, etjsonextensions - nginx ou Apache rediriger 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 se lancer. Clonez le dépôt et démarrez 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 : le programme d'installation en ligne se lance automatiquement lors de votre première visite et vous guide tout au long des vérifications du système, de la saisie de la clé API, de la sélection du CMS et de la configuration des identifiants d'administrateur. Vous aurez besoin d'une clé ReportedIP pour l'étape de génération de rapports. Consultez la section « Authentification et limites de débit» pour savoir comment en créer une (des clés dédiées de type « honeypot » avec un nombre illimité 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. Les
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 en ligne vous guide tout au long des vérifications du système, de la saisie de la clé API, du choix du CMS, de la configuration des identifiants d'administrateur et de la configuration facultative d'OpenAI.
Configuration
La plupart des paramètres sont enregistrés par le programme d'installation 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.
| Contexte | Par défaut | Description |
|---|---|---|
api_key |
— | Votre clé d'accès ReportedIP (obligatoire). Utilisez une clé de type « Honeypot » pour bénéficier d'un nombre illimité de rapports — demandez-en une à l'adresse [email protected]. |
cms_profile |
wordpress |
Profil CMS à imiter : wordpress, drupal, ou joomla. |
admin_path |
/_hp_admin |
Chemin d'accès au panneau d'administration. Choisissez une valeur peu évidente pour le garder caché. |
trusted_proxies |
CIDR de Cloudflare | Plages d'adresses IP proxy utilisées pour déterminer 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 consultation de la page) ou cron. |
log_retention_days |
90 |
Combien de jours avant que les anciennes entrées du journal ne soient supprimées automatiquement ? |
openai_api_key |
— | Clé OpenAI facultative pour le contenu leurre généré par l'IA. |
Traitement des files d'attente
Les attaques détectées sont mises en file d'attente et transmises à ReportedIP 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 : ensemble
queue_modeàcronet planifier vous-même le travailleur 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 terminal externe — en acheminant directement les attaques vers votre SIEM, votre plateforme de journalisation, une alerte par chat ou une autre base de données de menaces. Les webhooks ont fait leur apparition 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 point de terminaison 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 regroupé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 point de terminaison prend en charge :
- Filtres par catégorie — limiter la diffusion aux identifiants de catégorie de menaces spécifiques.
- Filtres d'analyseur — limiter la diffusion à certains moteurs de détection (par exemple
SqlInjection). - Clé secrète — facultative, permet la signature de la charge utile HMAC-SHA256.
Des filtres vides signifient tout les alertes sont transmises. Lorsque les deux filtres sont activés, le webhook
se déclenche lorsque ou bien correspond. Chaque point de terminaison 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é |
Charge utile
{
"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
}
]
}
Vérification de la signature
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 désormais plus limité au format ReportedIP . Depuis la version 1.3.0, chaque point de terminaison définit sa propre méthode HTTP, ses en-têtes et son corps ; vous pouvez ainsi envoyer des requêtes directement vers AbuseIPDB, Slack, Discord ou n'importe quelle API HTTP, sans avoir besoin de middleware.
| Option par webhook | Choix | Remarques |
|---|---|---|
| Méthode HTTP | POST, PUT, PATCH, GET |
Respectez les exigences de l'API cible. |
| En-têtes personnalisés | Un par ligne | Ajoutez des clés API ou des en-têtes d'authentification ; ceux-ci remplaceront 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 modèle sont remplis à partir de variables de remplacement. Les jetons confirmés comprennent
{{ip}}, {{categories}}, {{severity}}, et
{{timestamp}}; les autres champs de requête et de détection indiqués dans la charge utile ci-dessus sont
également disponibles. Chaque jeton comporte également un {{..._url}} (codé en URL) et
{{..._json}} (au format JSON) afin que les valeurs restent valides dans n'importe quel contexte.
Intégration d'AbuseIPDB
Le honeypot fournit un {{abuseipdb_categories}} espace réservé qui traduit
le Catégories ReportedIP (ID 1 à 30)
aux ID de catégorie AbuseIPDB les plus proches. Ainsi,
un rapport direct à l'API AbuseIPDB v2 se résume à 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 remplissent automatiquement la méthode, les en-têtes et le corps du message : choisissez-en un, saisissez votre clé ou votre URL, puis envoyez un test.
127.0.0.1, de sorte que
la vérification d'un AbuseIPDB ou d'un webhook tiers n'entraîne jamais l'envoi d'un véritable rapport concernant une adresse active.
Dépôt GitHub
Le serveur honeypot 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 ReportedIP