Honeypot Server
Un Honeypot Server de código abierto que detecta ataques y aporta automáticamente Threat Intelligence a la comunidad reportedIP. Implántalo junto a tu infraestructura para atrapar a los atacantes antes de que lleguen a tus sistemas reales.
¿Qué es un Honeypot?
Un Honeypot es un sistema señuelo diseñado para atraer y detectar a los atacantes. Imita servicios reales, pero no tiene ningún propósito legítimo: cualquier interacción con él es intrínsecamente sospechosa.
El Honeypot Server de ReportedIP emula instalaciones vulnerables de CMS para identificar direcciones IP maliciosas. Cuando un atacante intenta un Login por Brute Force, busca vulnerabilidades conocidas o escanea en busca de vulnerabilidades, el honeypot captura la dirección IP de origen y los detalles del ataque, y luego los comunica automáticamente a la ReportedIP API.
CMS Emulation
El Honeypot Server simula páginas de Login y paneles de administración de sistemas de gestión de contenidos populares. Los atacantes que intentan ataques de Brute Force o mediante vulnerabilidades son detectados y notificados de inmediato.
| CMS | Rutas emuladas | Detección |
|---|---|---|
| WordPress | /wp-login.php, /wp-admin/, /xmlrpc.php |
Ataques de Brute Force al Login, uso indebido de XML-RPC, vulnerabilidades en plugins |
| Drupal | /user/login, /admin/ |
Intentos de Login, firmas de Drupalgeddon |
| Joomla | /administrator/, /index.php/component/users/ |
Ataques de Brute Force al administrador, vulnerabilidades en componentes |
Threat Analyzers
El Honeypot incluye 36 analizadores integrados que inspeccionan cada solicitud entrante en busca de patrones y técnicas de ataque conocidos:
| Analizador | Descripción |
|---|---|
| Detección de Brute Force | Identifica intentos repetidos de Login procedentes de la misma fuente |
| SQL Injection | Detecta Payloads de SQL Injection en parámetros y encabezados |
| Payloads de XSS | Detecta intentos de cross-site scripting en los datos de las solicitudes |
| Recorrido de directorios | Identifica secuencias de recorrido de directorios (../, ..\\) |
| Firmaturas de exploits conocidas | Compara las solicitudes con una base de datos de vulnerabilidades CVE conocidas |
| Credential Stuffing | Detecta pruebas automatizadas de credenciales con distintos pares de nombre de usuario y contraseña |
| Enumeración de directorios | Identifica el escaneo sistemático en busca de archivos y directorios confidenciales |
| Uso indebido de XML-RPC | Detecta la amplificación de pingback y los ataques de Brute-Force a métodos a través de XML-RPC |
Informes automáticos
Cada ataque detectado se notifica automáticamente a la ReportedIP API sin intervención manual. Cada informe incluye:
- IP de origen: la dirección IP del atacante
- Tipo de ataque: el patrón de ataque específico detectado
- ID de categoría: asignado a una de las 30 Threat Categories predefinidas
- Marcas de tiempo: hora exacta de cada evento de ataque
Repercusión en el Confidence Score
Los informes de honeypots tienen un peso especial en el sistema de reputación porque representan una actividad maliciosa confirmada: no hay ninguna razón legítima para interactuar con un honeypot. El sistema aplica una bonificación específica por honeypot además del Confidence Score base.
| Ventaja | Detalle |
|---|---|
| Bonificación de Honeypot | Se añaden hasta +25 puntos al Confidence Score |
| Reducción del factor de Time Dampening | Los informes mantienen su relevancia durante más tiempo; la proporción de Honeypots reduce el factor de decaimiento |
| Mayor ponderación de confianza | Los informes de honeypot se multiplican por honeypot_report_weight_multiplier (por defecto: 2,0x) |
| Confianza mínima | Con ≥2 informes de Honeypot, se garantiza un mínimo del 25 % de confianza |
Fórmula de bonificación de 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)
Requisitos
El Honeypot Server es una aplicación PHP autónoma sin dependencias externas de Composer. Almacena todo en una base de datos SQLite local, por lo que no se requiere un servidor de bases de datos independiente.
- PHP 8.2+ con el
pdo_sqlite,curl, yjsonextensiones - nginx o Apache que redirijan todas las solicitudes a
public/index.php - SQLite para su almacenamiento — no se necesita ningún servidor MySQL/PostgreSQL
Instalación
Docker (recomendado)
La forma más rápida de empezar. Clona el repositorio e inicia la pila de Compose incluida:
git clone https://github.com/reportedip/honeypot-server.git
cd honeypot-server
docker compose -f docker/docker-compose.yml up -d
Abre la URL del contenedor en tu navegador: el instalador web se inicia automáticamente en la primera visita y te guía a través de las comprobaciones del sistema, la introducción de la API Key, la selección del CMS y las credenciales de administrador. Necesitas una API Key de ReportedIP para el paso de generación de informes; consulta «Autenticación y Rate Limits» para saber cómo crear una (se asignan, previa solicitud, claves dedicadas para honeypots con generación de informes Unlimited).
Configuración manual
Clona el repositorio y configura tu servidor web para que apunte al public/ directorio. Las
configuraciones de plantilla para ambos servidores web se incluyen en el repositorio:
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
A continuación, abre la URL del sitio en tu navegador. El instalador web te guiará a través de las comprobaciones del sistema, la introducción de la API Key, la selección del CMS, las credenciales de administrador y la configuración opcional de OpenAI.
Configuración
La mayoría de los ajustes se configuran mediante el instalador web en la primera ejecución. Se pueden modificar posteriormente en el panel de administración o en el archivo de configuración.
| Configuración | Valor por defecto | Descripción |
|---|---|---|
api_key |
— | Tu Community Access Key de ReportedIP (obligatoria). Utiliza una clave con función de «Honeypot» para disfrutar de informes Unlimited; solicítala en 1@reportedip.com. |
cms_profile |
wordpress |
Perfil de CMS que se va a emular: wordpress, drupal, o joomla. |
admin_path |
/_hp_admin |
ruta URL del panel de administración. Elige un valor que no sea obvio para mantenerlo oculto. |
trusted_proxies |
CIDR de Cloudflare | Rangos de IP de proxy utilizados para resolver la IP real del cliente detrás de una CDN. |
rate_limit_per_ip |
10 |
Número máximo de entradas de registro almacenadas por IP por minuto. |
report_rate_limit |
60 |
Número máximo de informes de API enviados por minuto. |
report_batch_size |
10 |
Número de Reports en cola transmitidos por lote cron. |
queue_mode |
web |
Modo de procesamiento de la cola de informes: web (después de cada visita a la página) o cron. |
log_retention_days |
90 |
Días antes de que las entradas antiguas del registro se eliminen automáticamente. |
openai_api_key |
— | Clave OpenAI opcional para contenido señuelo generado por IA. |
Procesamiento de la cola
Los ataques detectados se ponen en cola y se reenvían a la ReportedIP API en pequeños lotes. Hay dos modos disponibles:
- Cron web (predeterminado): la cola se procesa automáticamente tras cada visita a la página . No se necesita ninguna tarea cron externa, lo que resulta ideal para el alojamiento compartido.
-
Cron manual:
configura
queue_modeparacrony programa tú mismo el proceso de la CLI.
# Process the report queue every 5 minutes
*/5 * * * * php /path/to/honeypot-server/cli.php process-queue
Webhooks
El honeypot puede reenviar cada detección coincidente a un Endpoint externo en tiempo real — dirigiendo los ataques directamente a tu SIEM, plataforma de registro, una alerta de chat u otra base de datos de amenazas. Los Webhooks se introdujeron en la versión 1.2.0; la versión 1.3.0 los convirtió en un enrutador flexible capaz de dirigirse a cualquier API HTTP, incluida una asignación integrada con AbuseIPDB.
Cada Webhook es un endpoint HTTP(S) que recibe una solicitud por cada detección que coincida. La entrega se produce después de que se haya enviado la respuesta de trampa al atacante, por lo que los Webhooks nunca ralentizan el Honeypot. Cuando una sola solicitud activa varios analizadores, las detecciones se agregarán en una única entrega (categorías fusionadas, máxima gravedad).
Configuración
Los Webhooks se gestionan en el panel de administración, en la sección «Webhooks». Cada Endpoint admite:
- Filtros de categoría: restringen el envío a ID de Threat Categories específicas.
- Filtros de analizador: restringen el envío a motores de detección específicos (p. ej.,
SqlInjection). - Clave secreta: opcional, permite la firma de la Payload mediante HMAC-SHA256.
Si los filtros están vacíos, se envían todas las detecciones. Cuando se configuran ambos filtros, el Webhook
se activa cuando cualquiera de ellos coincide. Cada Endpoint se puede verificar desde el panel de administración mediante
un envío de prueba, que lleva el encabezado X-ReportedIP-Event: test.
Encabezados de solicitud
| Encabezado | Valor |
|---|---|
Content-Type |
application/json |
User-Agent |
reportedip-honeypot-server/<version> |
X-ReportedIP-Event |
detection o test |
X-ReportedIP-Signature |
sha256=<HMAC> — solo cuando se haya configurado un secreto |
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
Cuando se haya configurado un secreto, calcula el HMAC sobre el cuerpo de la solicitud sin procesar y compáralo en tiempo constante:
$expected = 'sha256=' . hash_hmac('sha256', $rawBody, $secret);
$valid = hash_equals($expected, $_SERVER['HTTP_X_REPORTEDIP_SIGNATURE'] ?? '');
Enrutamiento a cualquier API
Un Webhook ya no está limitado al formato JSON de ReportedIP. Desde la versión 1.3.0, cada Endpoint define su propio método HTTP, encabezados y cuerpo, por lo que puedes enviar datos directamente a AbuseIPDB, Slack, Discord o cualquier API HTTP, sin necesidad de middleware.
| Opciones por Webhook | Opciones | Notas |
|---|---|---|
| Método HTTP | POST, PUT, PATCH, GET |
Debe coincidir con lo que espere la API de destino. |
| Encabezados personalizados | Uno por línea | Añade API Keys o encabezados de autenticación; estos anulan los valores predeterminados. |
| Formato del cuerpo | json, form, plantilla personalizada |
JSON estructurado, pares clave/valor codificados en URL o una plantilla de formato libre. |
Marcadores de posición
Los encabezados personalizados y los cuerpos basados en plantillas se rellenan a partir de marcadores de posición. Los tokens confirmados incluyen
{{ip}}, {{categories}}, {{severity}}, y
{{timestamp}}; los demás campos de solicitud y detección que aparecen en la Payload anterior también están
disponibles. Cada token también tiene una {{..._url}} (codificada en URL) y
{{..._json}} (con escape JSON), para que los valores se mantengan seguros en cualquier contexto.
Integración con AbuseIPDB
The Honeypot includes a dedicated {{abuseipdb_categories}} marcador de posición específico que traduce
las categorías de amenazas de ReportedIP (ID 1–30)
a los ID de categoría de AbuseIPDB más cercanos. Esto hace que
un informe directo a la API v2 de AbuseIPDB se reduzca a una plantilla de cuerpo de una sola línea:
POST https://api.abuseipdb.com/api/v2/report
Header: Key: <your-abuseipdb-api-key>
Body (form): ip={{ip}}&categories={{abuseipdb_categories}}&comment={{comment_url}}
Configuraciones predefinidas
No es necesario configurarlo manualmente. Los ajustes preestablecidos integrados para AbuseIPDB, Slack, Discord y un destino JSON genérico rellenan automáticamente el método, los encabezados y el cuerpo: elige uno, introduce tu clave o URL y envía una prueba.
127.0.0.1, por lo que
la verificación de un Webhook de AbuseIPDB o de terceros nunca envía un informe real contra una dirección activa.
Repositorio de GitHub
El Honeypot Server es totalmente de código abierto. Se agradecen las contribuciones, los informes de errores y las solicitudes de nuevas funciones .
Última actualización: · Gestionado por el equipo de reportedIP