Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Krawl — Krawl es un servidor de decepción web personalizable, liviano y nativo de la nube, y un anti-crawler que crea aplicaciones web falsas con vulnerabilidades de bajo nivel utilizando datos señuelo generados aleatoriamente y realistas, y plantillas HTML generadas por IA. | Kitploit
Herramientas/GitHubGitHub/blessedrebus/krawl
Seguridad de ContenedoresRecopilación de InformaciónSeguridad WebSeguridad de RedesSeguridad en la NubeInteligencia de AmenazasRespuesta a IncidentesAnti-BotSeguridad de IA
GitHubblessedrebus/krawl

Krawl

Krawl es un servidor de decepción web personalizable, liviano y nativo de la nube, y un anti-crawler que crea aplicaciones web falsas con vulnerabilidades de bajo nivel utilizando datos señuelo generados aleatoriamente y realistas, y plantillas HTML generadas por IA.

5584561hace 4 díasRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Ver RepositorioSitio web
<h1 align="center">Krawl</h1>

<h3 align="center">
  <a name="readme-top"></a>
  <img
    src="https://raw.githubusercontent.com/blessedrebus/krawl/HEAD/img/krawl-svg.svg"
    height="250"
  >
</h3>
<div align="center">

<p align="center">
  Un servidor honeypot web moderno y personalizable diseñado para detectar y rastrear actividad maliciosa de atacantes y rastreadores web mediante páginas web engañosas, credenciales falsas y canary tokens.
</p>

<div align="center">
  <a href="https://github.com/blessedrebus/krawl/blob/main/LICENSE">
    <img src="https://img.shields.io/github/license/blessedrebus/krawl" alt="License">
  </a>
  <a href="https://github.com/blessedrebus/krawl/releases">
    <img src="https://img.shields.io/github/v/release/blessedrebus/krawl" alt="Release">
  </a>
</div>

<div align="center">
  <a href="https://ghcr.io/blessedrebus/krawl">
    <img src="https://img.shields.io/badge/ghcr.io-krawl-blue" alt="GitHub Container Registry">
  </a>
  <a href="https://kubernetes.io/">
    <img src="https://img.shields.io/badge/kubernetes-ready-326CE5?logo=kubernetes&amp;logoColor=white" alt="Kubernetes">
  </a>
  <a href="https://github.com/BlessedRebuS/Krawl/pkgs/container/krawl-chart">
    <img src="https://img.shields.io/badge/helm-chart-0F1689?logo=helm&amp;logoColor=white" alt="Helm Chart">
  </a>
</div>
</div>

## Tabla de Contenidos
- [Demo](#demo)
- [¿Qué es Krawl?](#qué-es-krawl)
- [Panel de Krawl](#panel-de-krawl)
- [Modos de Despliegue](#modos-de-despliegue)
- [Lista de Bloqueo de Krawl](#lista-de-bloqueo-de-krawl)
- [Inicio Rápido](#inicio-rápido)
  - [Docker Run](#docker-run)
  - [Docker Compose](#docker-compose)
  - [Kubernetes](#kubernetes)
  - [Uvicorn (Python)](#uvicorn-python)
- [Configuración](#configuración)
  - [config.yaml](#configuración-vía-configyaml)
  - [Variables de Entorno](#configuración-vía-variables-de-entorno)
- [Bloquear IPs Maliciosas](#usar-krawl-para-bloquear-ips-maliciosas)
- [Reputación de IP](#reputación-de-ip)
- [Ejecución Detrás de un Proxy Inverso o CDN](#ejecución-detrás-de-un-proxy-inverso-o-cdn)
- [Métricas y Monitoreo](#métricas--monitoreo)
- [Documentación Adicional](#documentación-adicional)
- [Engaño usando IA](#páginas-de-engaño-generadas-por-ia)
- [Contribuir](#contribuir)

## Demo
Consejo: rastrea las rutas de `robots.txt` para diversión adicional
### URL de Krawl: [http://demo.krawlme.com](http://demo.krawlme.com)
### Ver el panel [http://demo.krawlme.com/das_dashboard](http://demo.krawlme.com/das_dashboard)

## ¿Qué es Krawl?

**Krawl** es un servidor de engaño nativo de la nube diseñado para detectar, retrasar y analizar atacantes maliciosos, rastreadores web y escáneres automatizados.

Crea aplicaciones web falsas realistas llenas de objetivos fáciles como paneles de administración, archivos de configuración y credenciales falsas expuestas para atraer e identificar actividad sospechosa.

![dashboard](https://assets.kitploit.com/production/public/readmes/12879/a01b9a420bd9f26c6837b29c55c0c4f7c415cf155d5b640ecf614cfed4097997.png)

Al desperdiciar recursos del atacante, Krawl ayuda a distinguir claramente el comportamiento malicioso de los rastreadores legítimos.

Incluye:

- **[Páginas de Engaño Generadas por IA](https://github.com/blessedrebus/krawl/blob/main/docs/ai_generation.md)**: **Deja que los atacantes ayuden a generar tu superficie de ataque falsa y vulnerable**
- **Páginas Trampa para Arañas**: Enlaces aleatorios infinitos para desperdiciar recursos de los rastreadores basado en el [proyecto spidertrap](https://github.com/adhdproject/spidertrap)
- **Páginas de Inicio de Sesión Falsas**: WordPress, phpMyAdmin, paneles de administración
- **Rutas Honeypot**: Anunciadas en robots.txt para atrapar escáneres
- **Credenciales Falsas**: Nombres de usuario, contraseñas y claves API de aspecto realista
- **Integración de [Canary Token](https://github.com/blessedrebus/krawl/blob/main/docs/canary-token.md)**: Disparo de alertas externas
- **Cabeceras de servidor aleatorias**: Confunden ataques basados en la cabecera y versión del servidor
- **Panel en Tiempo Real**: Monitorea actividad sospechosa
- **Listas de Palabras Personalizables**: Configuración sencilla basada en JSON
- **Inyección de Errores Aleatorios**: Imita el comportamiento de un servidor real

Puedes exponer fácilmente Krawl junto a tus otros servicios para protegerlos de rastreadores web y usuarios maliciosos usando un proxy inverso. Para más detalles, consulta la [documentación de Proxy Inverso](https://github.com/blessedrebus/krawl/blob/main/docs/reverse-proxy.md).

![use case](https://assets.kitploit.com/production/public/readmes/12879/60f7ddddd201d89a440fbd2b0b3ac08a1d19b9b9a87dc956a02a06c608f1a73d.png)

## Panel de Krawl

Krawl proporciona un panel completo, accesible en una **ruta secreta aleatoria** generada al inicio o en una **ruta personalizada** configurada mediante `KRAWL_DASHBOARD_SECRET_PATH`. Esto mantiene el panel oculto de los atacantes que escanean tu honeypot.

El panel está organizado en seis pestañas:

- **Overview**: vista de alto nivel de la actividad de ataque: un mapa interactivo de orígenes de IP, solicitudes sospechosas recientes y las principales IPs, User-Agents y rutas.

![geoip](https://assets.kitploit.com/production/public/readmes/12879/391bf8fda76ed917c8731427a914f2279d9e0cc8bc69034797c355944972f085.png)

- **Attacks**: desglose detallado de credenciales capturadas, disparos de honeypot y tipos de ataque detectados (SQLi, XSS, path traversal, etc.) con gráficos y tablas.

![attack_types](https://assets.kitploit.com/production/public/readmes/12879/30a42393851ed51015609282643749e98372b0ac6eee207eb779f8ea070c7f63.png)

- **Threats**: payloads agrupados en campañas por hash difuso TLSH, de modo que un webshell y sus variantes editadas se leen como una sola campaña en lugar de hallazgos no relacionados, con un índice de cada archivo capturado.

- **IP Insight**: vista forense en profundidad de una IP seleccionada: geolocalización, información de ISP/ASN, indicadores de reputación, línea de tiempo de comportamiento, distribución de tipos de ataque, historial de referers, archivos y credenciales capturados, e historial completo de accesos.

![ipinsight](https://assets.kitploit.com/production/public/readmes/12879/93a6ddb8e4b69769fadbba30869373248d0f14c2c7c14d008f0143f3e24c5728.png)

Además, tras autenticarse con la contraseña del panel, se habilitan pestañas protegidas:

- **Tracked IPs**: mantén una lista de vigilancia de direcciones IP que quieres monitorear a lo largo del tiempo.
- **IP Banlist**: gestiona bloqueos de IP, visualiza atacantes detectados y exporta la lista de bloqueo en formato raw o IPTables.
- **Timed Out IPs**: revisa las IPs actualmente retenidas en el tarpit y exime aquellas que no deberían estarlo.
- **Deception**: gestiona páginas generadas por IA, expórtalas o importa nuevas.
- **Webhooks**: reenvía bloqueos a CloudFlare y otros firewalls.

Los iconos de la cabecera abren la documentación de la API, la exportación de la lista de bloqueo y un panel de configuración que muestra la configuración en ejecución y una página de mantenimiento para ejecutar tareas programadas bajo demanda.

Para más detalles, consulta la [documentación del Panel](https://github.com/blessedrebus/krawl/blob/main/docs/dashboard.md).

## Modos de Despliegue

Krawl soporta dos modos de despliegue, controlados por la configuración `mode` en `config.yaml` o la variable de entorno `KRAWL_MODE`.

| | Standalone | Scalable |
|---|---|---|
| **Base de datos** | SQLite (modo WAL) | PostgreSQL |
| **Caché** | Diccionario Python en memoria | Redis (TTL multinivel) |
| **Réplicas** | 1 (instancia única) | 1+ (escalado horizontal) |
| **Dependencias externas** | Ninguna | PostgreSQL + Redis |
| **Ideal para** | Desarrollo, homelabs, <500k solicitudes | Producción, HA, >500k solicitudes |

**Standalone**: ideal para entornos de desarrollo o homelabs con bajo número de solicitudes. No requiere configuración adicional, solo ejecuta Krawl y funciona.
- Despliegue en un solo contenedor sin dependencias externas
- Menor uso de RAM y recursos

**Scalable**: diseñado para entornos de producción o honeypots de alto tráfico. El Helm chart usa este modo por defecto.
- Panel más rápido y receptivo gracias al almacenamiento en caché multinivel de Redis
- Menor E/S de disco con Redis actuando como caché de ruta rápida frente a PostgreSQL
- El escalado horizontal aumenta el número de réplicas de Krawl detrás de un balanceador de carga

Para configuración detallada, ejemplos de Docker Compose, configuración de Kubernetes/Helm e instrucciones de migración paso a paso, consulta la [documentación de Modos de Despliegue](https://github.com/blessedrebus/krawl/blob/main/docs/deployment-modes.md).

## Lista de Bloqueo de Krawl

Krawl mantiene un [`banlist.txt`](https://github.com/blessedrebus/krawl/blob/main/banlist.txt) actualizado regularmente con direcciones IP de **atacantes que activaron sus trampas honeypot**. La lista de bloqueo se publica semanalmente y está disponible para descargar, ayudando a la comunidad a bloquear de forma preventiva actores maliciosos conocidos incluso sin usar Krawl.

La lista de bloqueo también se puede obtener directamente desde:
[https://demo.krawlme.com/das_dashboard/api/export-ips?categories=attacker&fwtype=raw](https://demo.krawlme.com/das_dashboard/api/export-ips?categories=attacker&fwtype=raw).

### Compartir listas de bloqueo entre instancias

Las instancias de Krawl pueden federar sus listas de bloqueo: cada una puede publicar su propia lista en una
ruta no autenticada y obtener listas de otras instancias (o cualquier lista de IPs en texto plano).
Las IPs obtenidas se fusionan en las decisiones de bloqueo locales y se muestran en el panel.```yaml
banlist:
  # Public, unauthenticated download path for this instance's banlist.
  # Supports the same ?categories= and ?fwtype= parameters as the main API.
  # Empty = disabled.
  export_path: "/public_banlist.txt"

  # Upstream banlists to fetch and merge. Plain ".txt" lists work too.
  sources:
    - "https://demo.krawlme.com/das_dashboard/api/export-ips?categories=attacker&fwtype=raw"
    - "https://krawl.example.com/public_banlist.txt"

  refresh_interval: 3600  # seconds between fetches
```
## Inicio rápido

### Ejecución con Docker

Ejecuta Krawl en modo autónomo con la imagen más reciente:```bash
docker run -d \
  -p 5000:5000 \
  -e KRAWL_DASHBOARD_SECRET_PATH="/my-secret-dashboard" \
  -e KRAWL_DASHBOARD_PASSWORD="my-secret-password" \
  -v krawl-data:/app/data \
  --name krawl \
  ghcr.io/blessedrebus/krawl:latest
```
Accede al servidor en `http://localhost:5000`

### Docker Compose

Crea un `docker-compose.yaml` con uno de los dos modos de despliegue.

**Standalone**: solo el servidor Krawl con almacenamiento Sqlite:```yaml
services:
  krawl:
    image: ghcr.io/blessedrebus/krawl:latest
    container_name: krawl-server
    ports:
      - "5000:5000"
    environment:
      - CONFIG_LOCATION=config.yaml
      # - KRAWL_DASHBOARD_PASSWORD=my-secret-password
    volumes:
      - ./config.yaml:/app/config.yaml:ro
      - krawl-data:/app/data
    restart: unless-stopped

volumes:
  krawl-data:
```
**Escalable**: con PostgreSQL y Redis:

> [!CAUTION]
> El ejemplo a continuación utiliza **contraseñas predeterminadas** (`krawl`/`krawl`). **Cámbialas antes de desplegar en producción.**```yaml
services:
  postgres:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: krawl
      POSTGRES_USER: krawl
      POSTGRES_PASSWORD: krawl
    volumes:
      - postgres_data:/var/lib/postgresql/data
    restart: unless-stopped
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U krawl -d krawl"]
      interval: 10s
      timeout: 5s
      retries: 5

  redis:
    image: redis:7-alpine
    volumes:
      - redis_data:/data
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 10s
      timeout: 5s
      retries: 5

  krawl:
    image: ghcr.io/blessedrebus/krawl:latest
    container_name: krawl-server
    ports:
      - "5000:5000"
    environment:
      - CONFIG_LOCATION=config.yaml
      - KRAWL_MODE=scalable
      - KRAWL_POSTGRES_HOST=postgres
      - KRAWL_POSTGRES_PORT=5432
      - KRAWL_POSTGRES_USER=krawl
      - KRAWL_POSTGRES_PASSWORD=krawl
      - KRAWL_POSTGRES_DATABASE=krawl
      - KRAWL_REDIS_HOST=redis
      - KRAWL_REDIS_PORT=6379
      # - KRAWL_DASHBOARD_PASSWORD=my-secret-password
    volumes:
      - ./config.yaml:/app/config.yaml:ro
    restart: unless-stopped
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy

volumes:
  postgres_data:
  redis_data:
```
Para desplegar, solo ejecuta```bash
docker compose up -d
```
También hay archivos compose listos para producción disponibles en el directorio [`docker/`](https://github.com/blessedrebus/krawl/blob/main/docker). Para **desarrollo** (compilaciones desde el código fuente con recarga en caliente), use los archivos compose en [`docker/dev/`](https://github.com/blessedrebus/krawl/blob/main/docker/dev).

Para obtener más detalles sobre ambos modos, consulte [Modos de despliegue](https://github.com/blessedrebus/krawl/blob/main/docs/deployment-modes.md).

### Kubernetes
**Krawl también está disponible de forma nativa en Kubernetes**. La instalación se puede realizar [mediante manifiesto](https://github.com/blessedrebus/krawl/blob/main/kubernetes/README.md) o [usando el chart de Helm](https://github.com/blessedrebus/krawl/blob/main/helm/README.md).

El chart de Helm **usa el modo escalable por defecto** con PostgreSQL y Redis incluidos:```bash
helm install krawl oci://ghcr.io/blessedrebus/krawl-chart --version 2.4.0 \
  -n krawl-system --create-namespace \
  --set postgres.password=your-password \
  --set redis.password=your-redis-password \
  --set dashboardPassword=your-dashboard-password \
  --set config.dashboard.secret_path=/my-secret-dashboard
```
Se proporcionan archivos de valores de ejemplo mínimos para ambos modos:
- [`values-minimal.yaml`](https://github.com/blessedrebus/krawl/blob/main/helm/values-minimal.yaml) ---> Escalable (predeterminado)
- [`values-standalone.yaml`](https://github.com/blessedrebus/krawl/blob/main/helm/values-standalone.yaml) ---> Autónomo

Consulte [Modos de despliegue](https://github.com/blessedrebus/krawl/blob/main/docs/deployment-modes.md) y [Documentación del Chart](https://github.com/blessedrebus/krawl/blob/main/helm/README.md) para obtener la configuración completa y las instrucciones de migración.

### Uvicorn (Python)

Ejecute Krawl directamente con Python 3.13+ y uvicorn para desarrollo local o pruebas:```bash
pip install -r requirements.txt
uvicorn app:app --host 0.0.0.0 --port 5000 --app-dir src --no-server-header
```
Accede al servidor en `http://localhost:5000`


## Configuración
Krawl utiliza una **jerarquía de configuración** en la que **las variables de entorno tienen prioridad sobre el archivo de configuración**. Este enfoque se recomienda para despliegues con Docker y para personalizaciones rápidas listas para usar.

### Configuración mediante config.yaml
Puedes usar el archivo [config.yaml](https://github.com/blessedrebus/krawl/blob/main/config.yaml) para configuraciones avanzadas, como despliegues con Docker Compose o Helm chart.

### Configuración mediante variables de entorno

Todas las opciones se pueden proporcionar como variables de entorno, las cuales anulan `config.yaml`.
El nombre de la variable es `KRAWL_` más la ruta de la opción en mayúsculas, por lo que `dashboard.password`
se convierte en `KRAWL_DASHBOARD_PASSWORD`.

<details>
<summary><b>Servidor y generación de enlaces</b> (11 variables)</summary>

Cómo se presenta Krawl y cómo da forma al laberinto de páginas generadas.

| Variable de entorno | Descripción | Valor por defecto |
|----------------------|-------------|---------|
| `CONFIG_LOCATION` | Ruta al archivo de configuración yaml | `config.yaml` |
| `KRAWL_PORT` | Puerto de escucha del servidor | `5000` |
| `KRAWL_DELAY` | Retardo de respuesta en milisegundos | `100` |
| `KRAWL_SERVER_HEADER` | Cabecera HTTP Server para engaño | `""` |
| `KRAWL_LINKS_LENGTH_RANGE` | Rango de longitud de enlaces como `min,max` | `5,15` |
| `KRAWL_LINKS_PER_PAGE_RANGE` | Enlaces por página como `min,max` | `10,15` |
| `KRAWL_CHAR_SPACE` | Caracteres usados para la generación de enlaces | `abcdefgh...` |
| `KRAWL_MAX_COUNTER` | Valor inicial del contador | `10` |
| `KRAWL_PROBABILITY_ERROR_CODES` | Probabilidad de respuesta de error (0-100%) | `0` |
| `KRAWL_INFINITE_PAGES_FOR_MALICIOUS` | Servir páginas infinitas a IPs maliciosas | `true` |
| `KRAWL_MAX_PAGES_LIMIT` | Límite máximo de páginas para crawlers | `250` |
| `KRAWL_BAN_DURATION_SECONDS` | Duración del baneo en segundos para IPs con límite de tasa | `600` |

</details>

<details>
<summary><b>Panel, métricas y registro</b> (13 variables)</summary>

Acceso al panel, precalentamiento de caché, Prometheus y nivel de registro.

| Variable de entorno | Descripción | Valor por defecto |
|----------------------|-------------|---------|
| `KRAWL_DASHBOARD_SECRET_PATH` | Ruta personalizada del panel | Generada automáticamente |
| `KRAWL_DASHBOARD_PASSWORD` | Contraseña para los paneles protegidos del panel | Generada automáticamente |
| `KRAWL_DASHBOARD_CACHE_WARMUP` | Precalcular los datos del panel cada 5 minutos para cargas instantáneas de página | `true` |
| `KRAWL_DASHBOARD_WARMUP_PAGES` | Número de páginas a precalentar por panel de tabla | `10` |
| `KRAWL_DASHBOARD_WARMUP_AGGREGATION` | Precalcular las agregaciones completas de top_paths/top_ua para servirlas sin consultas | `false` |
| `KRAWL_DASHBOARD_TOP_N_MIN_COUNT` | Recuento mínimo de accesos para los paneles de rutas/user agents principales (establecer a 1 para desactivar) | `5` |
| `KRAWL_DASHBOARD_BRAND_NAME` | Nombre en el logotipo textual y el encabezado del panel | `Krawl` |
| `KRAWL_DASHBOARD_BRAND_URL` | A dónde enlaza el logotipo textual (vacío lo muestra como texto plano) | Repositorio de Krawl |
| `KRAWL_DASHBOARD_BRAND_LOGO` | URL de imagen mostrada en lugar de la marca de GitHub | Sin establecer |
| `KRAWL_DASHBOARD_BRAND_SHOW_VERSION` | Mostrar la versión junto al nombre | `true` |
| `KRAWL_DASHBOARD_BRAND_CONTACT` | Contacto mostrado bajo el logotipo textual (dirección, URL o texto plano) | Sin establecer |
| `KRAWL_METRICS_ENABLED` | Exponer métricas de Prometheus en `/<dashboard_path>/metrics` | `true` |
| `KRAWL_LOG_LEVEL` | Nivel de registro de la aplicación (`DEBUG`, `INFO`, `WARNING`, `ERROR`) | `INFO` |

</details>

<details>
<summary><b>Base de datos, retención y copias de seguridad</b> (12 variables)</summary>

Ubicación de almacenamiento, cuánto tiempo se conservan los datos y la tarea de volcado.

| Variable de entorno | Descripción | Valor por defecto |
|----------------------|-------------|---------|
| `KRAWL_DATABASE_PATH` | Ubicación del archivo de base de datos | `data/krawl.db` |
| `KRAWL_DATABASE_PERSIST_SUSPICIOUS_ONLY` | Persistir solo las solicitudes sospechosas en el registro de accesos | `false` |
| `KRAWL_MAP_TILE_URL` | Plantilla de URL de teselas para el mapa del panel (`{z}/{x}/{y}`, opcional `{s}`/`{r}`) | Esri dark canvas |
| `KRAWL_MAP_TILE_ATTRIBUTION` | Atribución mostrada en el mapa | Esri/OSM |
| `KRAWL_MAP_API_KEY` | Se añade a cada solicitud de tesela como parámetro de consulta — requerido por CARTO | _(vacío)_ |
| `KRAWL_MAP_API_KEY_PARAM` | Nombre de ese parámetro de consulta (`api_key`, `apikey`, `key`) | `api_key` |
| `KRAWL_IPV6_IGNORE` | Descartar por completo las solicitudes IPv6: se siguen registrando en stdout, nunca se persisten, ni se comprueban para baneo ni se exportan | `false` |
| `KRAWL_IPV6_PURGE_EXISTING` | Eliminar también las filas IPv6 existentes en el siguiente arranque (irreversible; requiere `KRAWL_IPV6_IGNORE`) | `false` |
| `KRAWL_DATABASE_RETENTION_DAYS` | Días de retención de datos en la base de datos | `30` |
| `KRAWL_BACKUPS_PATH` | Ruta donde se guardan los volcados de la base de datos | `backups` |
| `KRAWL_BACKUPS_CRON` | expresión cron para controlar la programación de la tarea de copia de seguridad | `*/30 * * * *` |
| `KRAWL_BACKUPS_ENABLED` | Booleano para habilitar la tarea de volcado de la base de datos | `true` |

</details>

<details>
<summary><b>Trampas: tarpit, páginas de engaño y canary</b> (6 variables)</summary>

Trampas opcionales y las páginas servidas a los atacantes.

| Variable de entorno | Descripción | Valor por defecto |
|----------------------|-------------|---------|
| `KRAWL_TARPIT_ENABLED` | Atrapar a los agentes de IA con respuestas lentas y texto aleatorio | `false` |
| `KRAWL_TARPIT_DELAY_SECONDS` | Retardo adicional en segundos añadido por respuesta cuando el tarpit está activo | `5` |
| `KRAWL_DECEPTION_IMPORT_PAGES` | Importar automáticamente las páginas de engaño desde `src/templates/deception/` al arrancar | `true` |
| `KRAWL_CUSTOM_TEMPLATE_PATH` | Ruta dentro del contenedor a una plantilla HTML personalizada. La plantilla debe incluir los marcadores `{counter}` y `{content}`. | `/templates/custom_page.html` |
| `KRAWL_CANARY_TOKEN_URL` | URL de token canary externo | Ninguno |
| `KRAWL_CANARY_TOKEN_TRIES` | Solicitudes antes de mostrar el token canary | `10` |

</details>

<details>
<summary><b>Analizador de reputación de IP</b> (6 variables)</summary>

Umbrales que determinan cómo se clasifica una IP.

| Variable de entorno | Descripción | Valor por defecto |
|----------------------|-------------|---------|
| `KRAWL_HTTP_RISKY_METHODS_THRESHOLD` | Umbral para la detección de métodos HTTP de riesgo | `0.1` |
| `KRAWL_VIOLATED_ROBOTS_THRESHOLD` | Umbral para violaciones de robots.txt | `0.1` |
| `KRAWL_UNEVEN_REQUEST_TIMING_THRESHOLD` | Umbral del coeficiente de variación para la temporización | `0.5` |
| `KRAWL_UNEVEN_REQUEST_TIMING_TIME_WINDOW_SECONDS` | Ventana temporal para el análisis de temporización de solicitudes en segundos | `300` |
| `KRAWL_USER_AGENTS_USED_THRESHOLD` | Umbral para detectar múltiples user agents | `2` |
| `KRAWL_ATTACK_URLS_THRESHOLD` | Umbral para la detección de URL de ataque | `1` |

</details>

<details>
<summary><b>Captura de threat-intel</b> (4 variables)</summary>

Aplica fuzzy-hash a las cargas útiles capturadas (archivos y cuerpos de solicitud marcados) y agrupa
las variantes casi duplicadas en clústeres de campañas. Requiere `py-tlsh`.

El hashing se ejecuta como la tarea en segundo plano programada `hash-payloads` (véase
`src/tasks/hash_payloads.py`), que aplica hash a cada ataque capturado una vez — los nuevos
impactos en el momento de la ingesta, y un barrido retrospectivo único del historial existente
rastreado mediante una marca de agua `payload_hash_watermark` — y luego agrupa los
digests en campañas de patrones recurrentes.

| Variable de entorno | Descripción | Valor por defecto |
|----------------------|-------------|---------|
| `KRAWL_TLSH_ENABLED` | Aplicar hash con TLSH a los archivos subidos y a los cuerpos de solicitud marcados para la agrupación de casi duplicados | `true` |
| `KRAWL_TLSH_CLUSTER_THRESHOLD` | Distancia TLSH por debajo de la cual una carga útil se une a una campaña existente (0 = bytes idénticos; las variantes de un webshell suelen diferir en < 100) | `150` |
| `KRAWL_TLSH_CAMPAIGN_MIN_EVENTS` | Número de veces que debe verse una carga útil antes de que su campaña aparezca en la pestaña Threats | `10` |
| `KRAWL_REFERER_ENABLED` | Registrar el Referer HTTP entrante en los registros de acceso, para el seguimiento de cadenas de cebo | `true` |

</details>

<details>
<summary><b>Lista de baneos e IPs ignoradas</b> (4 variables)</summary>

Compartir listas de baneos con otras instancias, y tráfico que nunca debe rastrearse.

| Variable de entorno | Descripción | Valor por defecto |
|----------------------|-------------|---------|
| `KRAWL_IGNORED_IPS` | IPs/CIDRs separadas por comas que nunca se rastrean, banean ni exportan | Loopback, RFC1918, link-local, CGNAT |
| `KRAWL_BANLIST_EXPORT_PATH` | Ruta pública de descarga de la lista de baneos, p. ej. `/public_banlist.txt` (vacío = deshabilitado) | `""` |
| `KRAWL_BANLIST_SOURCES` | URLs de listas de baneos upstream separadas por comas para obtener y fusionar | Lista de baneos de la comunidad de Krawl |
| `KRAWL_BANLIST_REFRESH_INTERVAL` | Segundos entre obtenciones de listas de baneos upstream | `3600` |

</details>

<details>
<summary><b>Páginas de engaño generadas por IA</b> (10 variables)</summary>

Consulta la [documentación de generación por IA](https://github.com/blessedrebus/krawl/blob/main/docs/ai_generation.md).

| Variable de entorno | Descripción | Valor por defecto |
|----------------------|-------------|---------|
| `KRAWL_AI_ENABLED` | Habilitar páginas de engaño generadas por IA | `false` |
| `KRAWL_AI_PROVIDER` | Proveedor de IA (`"openrouter"` u `"openai"`) | `"openrouter"` |
| `KRAWL_AI_OPENAI_BASE_URL` | URL base opcional de OpenAI para endpoints de API personalizados | `"https://api.openai.com/v1"` |
| `KRAWL_AI_API_KEY` | Clave de API para el proveedor de IA | `None` |
| `KRAWL_AI_MODEL` | Modelo de IA a usar para la generación de páginas | `"nvidia/nemotron-3-super-120b-a12b:free"` |
| `KRAWL_AI_TIMEOUT` | Tiempo de espera de solicitud en segundos para las llamadas a la API de IA | `60` |
| `KRAWL_AI_MAX_DAILY_REQUESTS` | Número máximo de páginas generadas por IA al día (0 = ilimitado) | `0` |
| `KRAWL_AI_PROMPT` | Plantilla de prompt personalizada para la generación de páginas por IA | Prompt por defecto |
| `KRAWL_AI_REASONING_ENABLED` | Habilitar tokens de razonamiento (solo modelos de razonamiento de OpenRouter) | `false` |
| `KRAWL_AI_REASONING_EFFORT` | Esfuerzo de razonamiento (`none`, `minimal`, `low`, `medium`, `high`, `xhigh`) | `"medium"` |

</details>

<details>
<summary><b>Modo escalable: PostgreSQL y Redis</b> (13 variables)</summary>

Solo se usa cuando `KRAWL_MODE=scalable`. Consulta [Modos de despliegue](https://github.com/blessedrebus/krawl/blob/main/docs/deployment-modes.md).

| Variable de entorno | Descripción | Valor por defecto |
|----------------------|-------------|---------|
| `KRAWL_MODE` | Modo de despliegue (`standalone` o `scalable`) | `standalone` |
| `KRAWL_POSTGRES_HOST` | Nombre de host de PostgreSQL | `localhost` |
| `KRAWL_POSTGRES_PORT` | Puerto de PostgreSQL | `5432` |
| `KRAWL_POSTGRES_USER` | Nombre de usuario de PostgreSQL | `krawl` |
| `KRAWL_POSTGRES_PASSWORD` | Contraseña de PostgreSQL | `krawl` |
| `KRAWL_POSTGRES_DATABASE` | Nombre de la base de datos de PostgreSQL | `krawl` |
| `KRAWL_REDIS_HOST` | Nombre de host de Redis | `localhost` |
| `KRAWL_REDIS_PORT` | Puerto de Redis | `6379` |
| `KRAWL_REDIS_DB` | Número de base de datos de Redis | `0` |
| `KRAWL_REDIS_PASSWORD` | Contraseña de Redis | Ninguno |
| `KRAWL_REDIS_CACHE_TTL` | TTL en segundos para los datos de precalentamiento del panel | `600` |
| `KRAWL_REDIS_HOT_TTL` | TTL en segundos para los datos de ruta activa (información de baneo, categorías de IP) | `30` |
| `KRAWL_REDIS_TABLE_TTL` | TTL en segundos para las tablas paginadas del panel | `120` |

</details>


Por ejemplo```bash
# Set canary token
export CONFIG_LOCATION="config.yaml"
export KRAWL_CANARY_TOKEN_URL="http://your-canary-token-url"

# Set number of pages range (min,max format)
export KRAWL_LINKS_PER_PAGE_RANGE="5,25"

# Set analyzer thresholds
export KRAWL_HTTP_RISKY_METHODS_THRESHOLD="0.2"
export KRAWL_VIOLATED_ROBOTS_THRESHOLD="0.15"

# Set custom dashboard path and password
export KRAWL_DASHBOARD_SECRET_PATH="/my-secret-dashboard"
export KRAWL_DASHBOARD_PASSWORD="my-secret-password"
```
Ejemplo de una ejecución de Docker con variables de entorno (modo independiente):```bash
docker run -d \
  -p 5000:5000 \
  -e KRAWL_MODE=standalone \
  -e KRAWL_PORT=5000 \
  -e KRAWL_DELAY=100 \
  -e KRAWL_DASHBOARD_PASSWORD="my-secret-password" \
  -e KRAWL_CUSTOM_TEMPLATE_PATH="/templates/custom_page.html" \
  -e KRAWL_CANARY_TOKEN_URL="http://your-canary-token-url" \
  --name krawl \
  ghcr.io/blessedrebus/krawl:latest
```
## Usar Krawl para bloquear IPs maliciosas
Krawl utiliza un sistema basado en reputación para clasificar las direcciones IP de los atacantes y proporciona dos formas de exportar listas de IPs para la integración con el firewall.

El endpoint `/api/export-ips` consulta la base de datos directamente y admite el filtrado por categoría de IP (`attacker`, `bad_crawler`, `regular_user`, `good_crawler`) y formato de salida (`raw`, `iptables`, `nftables`):```bash
curl "https://your-krawl-instance/<DASHBOARD-PATH>/api/export-ips?categories=attacker&fwtype=raw"
```
Esto permite el bloqueo automático de tráfico malicioso en varias plataformas:
* [OPNsense y pfSense](https://ipv64.net/v64_blocklist_integration_guide)
* [RouterOS](https://rentry.co/krawl-routeros)
* [IPtables](https://github.com/blessedrebus/krawl/blob/main/plugins/iptables/README.md) y [Nftables](https://github.com/blessedrebus/krawl/blob/main/plugins/nftables/README.md)
* [Fail2Ban](https://github.com/blessedrebus/krawl/blob/main/plugins/fail2ban/README.md)

Para ver todos los parámetros de la API, ejemplos y cómo añadir formatos de firewall personalizados, consulta la [documentación de Exportadores de Firewall](https://github.com/blessedrebus/krawl/blob/main/docs/firewall-exporters.md).

Krawl también puede enviar IPs bloqueadas directamente a una Lista de IPs de una Cuenta de Cloudflare para su uso en reglas de WAF. La sincronización se ejecuta como una tarea en segundo plano y actualiza la lista mediante reemplazo completo en un intervalo configurable. Consulta la documentación de [Sincronización de Lista de Bloqueo de Cloudflare](https://github.com/blessedrebus/krawl/blob/main/docs/cloudflare_banlist.md).

## Reputación de IP
Krawl [utiliza tareas que analizan el tráfico reciente para construir y actualizar continuamente una puntuación de reputación de IP](https://github.com/blessedrebus/krawl/blob/main/src/tasks/analyze_ips.py). Se ejecuta periódicamente y evalúa cada dirección IP activa basándose en múltiples indicadores de comportamiento para clasificarla como atacante, crawler o usuario regular. Los umbrales son totalmente personalizables.

![ip reputation](https://assets.kitploit.com/production/public/readmes/12879/b6498c17152c4bc5667f22e5a2bfe92c0b0a6e7c5ced5b7d99176bda23963753.png)

El análisis incluye:
- **Uso de métodos HTTP riesgosos** (por ejemplo, proporciones de POST, PUT, DELETE)
- **Violaciones de Robots.txt**
- **Anomalías en los tiempos de las solicitudes** (patrones irregulares o en ráfagas)
- **Consistencia del User-Agent**
- **Detección de URLs de ataque** (por ejemplo, inyección SQL, patrones XSS)

Cada señal contribuye a un modelo de puntuación ponderada que asigna una categoría de reputación:
- `attacker`
- `bad_crawler`
- `good_crawler`
- `regular_user`
- `unknown` (para datos insuficientes)

Las puntuaciones y métricas resultantes se almacenan en la base de datos y son utilizadas por Krawl para alimentar paneles de control, seguimiento de reputación y acciones de mitigación automatizadas como el bloqueo de IP o la integración con firewalls.

## Páginas de Engaño Generadas por IA

Krawl puede generar automáticamente páginas de engaño realistas utilizando modelos de IA de las APIs de **OpenRouter** o **OpenAI**. Esta función crea páginas honeypot únicas y plausibles sobre la marcha para engañar a los atacantes sin necesidad de crear páginas manualmente.

**Características Principales:**
- **Generación Dinámica**: Crea páginas HTML únicas para cualquier ruta de solicitud
- **Caché Inteligente**: Almacena en caché las páginas generadas para evitar llamadas redundantes a la API
- **Limitación de Tasa Diaria**: Controla los costes de la API con límites de solicitudes configurables
- **Múltiples Proveedores**: Compatibilidad con OpenRouter (opciones gratuitas) y OpenAI
- **Degradación Elegante**: Recurre al honeypot estándar cuando está deshabilitado o se alcanza el límite
- **Servicio desde Caché**: Las páginas generadas previamente se sirven incluso cuando la IA está deshabilitada

**Configuración Rápida:**```yaml
ai:
  enabled: true
  provider: "openrouter"
  openai_base_url: "your-custom-base-url"
  api_key: "your-api-key"
  model: "nvidia/nemotron-3-super-120b-a12b:free"
  timeout: 60
  max_daily_requests: 10

---

[Read more](https://github.com/blessedrebus/krawl)
Descargar herramienta