
Krawl é um servidor de decepção web personalizável, leve e nativo da nuvem, e um anti-crawler que cria aplicações web falsas com vulnerabilidades de baixa complexidade, utilizando dados fictícios realistas gerados aleatoriamente e modelos HTML gerados por IA.
Um servidor de honeypot web moderno e personalizável, projetado para detectar e rastrear atividades maliciosas de atacantes e rastreadores web por meio de páginas web enganosas, credenciais falsas e canary tokens.
Dica: rastreie os caminhos do robots.txt para diversão adicional
Krawl é um servidor de engano (deception) nativo da nuvem, projetado para detectar, atrasar e analisar atacantes maliciosos, rastreadores web e scanners automatizados.
Ele cria aplicações web falsas e realistas, repletas de alvos fáceis, como painéis administrativos, arquivos de configuração e credenciais falsas expostas, para atrair e identificar atividades suspeitas.

Ao desperdiçar recursos dos atacantes, o Krawl ajuda a distinguir claramente o comportamento malicioso de rastreadores legítimos.
Ele apresenta:
Você pode facilmente expor o Krawl junto com seus outros serviços para protegê-los de rastreadores web e usuários maliciosos usando um reverse proxy. Para mais detalhes, consulte a documentação do Reverse Proxy.

O Krawl fornece um painel abrangente, acessível em um caminho secreto aleatório gerado na inicialização ou em um caminho personalizado configurado via KRAWL_DASHBOARD_SECRET_PATH. Isso mantém o painel oculto de atacantes que escaneiam seu honeypot.
O painel está organizado em seis abas:



Além disso, após autenticar com a senha do painel, duas abas protegidas ficam disponíveis:
Para mais detalhes, consulte a documentação do Painel.
O Krawl suporta dois modos de implantação, controlados pela configuração mode no config.yaml ou pela variável de ambiente KRAWL_MODE.
Standalone: ideal para ambientes de desenvolvimento ou homelabs com baixo volume de requisições. Nenhuma configuração adicional é necessária; basta executar o Krawl e ele funciona.
Escalável: projetado para ambientes de produção ou honeypots de alto tráfego. O Helm chart usa esse modo por padrão.
Para configuração detalhada, exemplos de Docker Compose, configuração Kubernetes/Helm e instruções passo a passo de migração, consulte a documentação de Modos de Implantação.
O Krawl mantém uma banlist.txt atualizada regularmente com endereços IP de atacantes que acionaram suas armadilhas de honeypot. A lista de bloqueio é publicada semanalmente e disponibilizada para download, ajudando a comunidade a bloquear preventivamente atores maliciosos conhecidos, mesmo sem usar o Krawl.
A lista de bloqueio também pode ser obtida diretamente de: https://demo.krawlme.com/das_dashboard/api/export-ips?categories=attacker&fwtype=raw.
Instâncias do Krawl podem federar suas listas de bloqueio: cada uma pode publicar sua própria lista em um caminho sem autenticação e importar listas de outras instâncias (ou qualquer lista de IPs em texto simples). Os IPs obtidos são mesclados às decisões locais de bloqueio e exibidos no painel.```yaml banlist:
export_path: "/public_banlist.txt"
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
## Início rápido
### Execução com Docker
Execute o Krawl em modo autônomo com a imagem mais recente:```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
Acesse o servidor em http://localhost:5000
Crie um docker-compose.yaml com um dos dois modos de implantação.
Standalone: apenas o servidor Krawl com armazenamento 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:
**Escalável**: com PostgreSQL e Redis:
> [!CAUTION]
> O exemplo abaixo usa **senhas padrão** (`krawl`/`krawl`). **Altere-as antes de implantar em produção.**```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 fazer o deploy, basta executar```bash docker compose up -d
Arquivos compose prontos para produção também estão disponíveis no diretório [`docker/`](https://github.com/blessedrebus/krawl/blob/HEAD/docker/). Para **desenvolvimento** (builds a partir do código-fonte com hot-reload), use os arquivos compose em [`docker/dev/`](https://github.com/blessedrebus/krawl/blob/HEAD/docker/dev/).
Para mais detalhes sobre ambos os modos, consulte [Modos de Implantação](https://github.com/blessedrebus/krawl/blob/HEAD/docs/deployment-modes.md).
### Kubernetes
**Krawl também está disponível nativamente no Kubernetes**. A instalação pode ser feita tanto [via manifesto](https://github.com/blessedrebus/krawl/blob/HEAD/kubernetes/README.md) quanto [usando o Helm chart](https://github.com/blessedrebus/krawl/blob/HEAD/helm/README.md).
O Helm chart **usa o modo escalável por padrão** com PostgreSQL e Redis integrados:```bash
helm install krawl oci://ghcr.io/blessedrebus/krawl-chart --version 2.3.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
Arquivos de valores de exemplo mínimos são fornecidos para ambos os modos:
values-minimal.yaml ---> Scalable (default)values-standalone.yaml ---> StandaloneConsulte Modos de Implantação e documentação do Chart para instruções completas de configuração e migração.
Execute o Krawl diretamente com Python 3.13+ e uvicorn para desenvolvimento ou testes locais:```bash pip install -r requirements.txt uvicorn app:app --host 0.0.0.0 --port 5000 --app-dir src --no-server-header
Access the server at `http://localhost:5000`
## Configuração
O Krawl usa uma **hierarquia de configuração** na qual **as variáveis de ambiente têm precedência sobre o arquivo de configuração**. Essa abordagem é recomendada para implantações Docker e personalização rápida pronta para uso.
### Configuração via config.yaml
Você pode usar o arquivo [config.yaml](https://github.com/blessedrebus/krawl/blob/HEAD/config.yaml) para configurações avançadas, como implantações com Docker Compose ou Helm chart.
### Configuração via Variáveis de Ambiente
Todas as configurações podem ser fornecidas como variáveis de ambiente, que substituem o `config.yaml`.
O nome da variável é `KRAWL_` mais o caminho da configuração em maiúsculas, então `dashboard.password` vira `KRAWL_DASHBOARD_PASSWORD`.
<details>
<summary><b>Servidor e geração de links</b> (12 variáveis)</summary>
Como o Krawl se apresenta e modela o labirinto de páginas geradas.
| Variável de Ambiente | Descrição | Padrão |
|----------------------|-------------|---------|
| `CONFIG_LOCATION` | Caminho para o arquivo de configuração yaml | `config.yaml` |
| `KRAWL_PORT` | Porta de escuta do servidor | `5000` |
| `KRAWL_DELAY` | Atraso de resposta em milissegundos | `100` |
| `KRAWL_SERVER_HEADER` | Cabeçalho HTTP Server para enganação | `""` |
| `KRAWL_LINKS_LENGTH_RANGE` | Intervalo de comprimento dos links como `min,max` | `5,15` |
| `KRAWL_LINKS_PER_PAGE_RANGE` | Links por página como `min,max` | `10,15` |
| `KRAWL_CHAR_SPACE` | Caracteres usados para geração de links | `abcdefgh...` |
| `KRAWL_MAX_COUNTER` | Valor inicial do contador | `10` |
| `KRAWL_PROBABILITY_ERROR_CODES` | Probabilidade de respostas de erro (0-100%) | `0` |
| `KRAWL_INFINITE_PAGES_FOR_MALICIOUS` | Servir páginas infinitas para IPs maliciosos | `true` |
| `KRAWL_MAX_PAGES_LIMIT` | Limite máximo de páginas para rastreadores | `250` |
| `KRAWL_BAN_DURATION_SECONDS` | Duração do banimento em segundos para IPs com limite de taxa | `600` |
</details>
<details>
<summary><b>Dashboard, métricas e logging</b> (8 variáveis)</summary>
Acesso ao dashboard, pré-aquecimento de cache, Prometheus e nível de log.
| Variável de Ambiente | Descrição | Padrão |
|----------------------|-------------|---------|
| `KRAWL_DASHBOARD_SECRET_PATH` | Caminho personalizado do dashboard | Gerado automaticamente |
| `KRAWL_DASHBOARD_PASSWORD` | Senha para painéis protegidos do dashboard | Gerada automaticamente |
| `KRAWL_DASHBOARD_CACHE_WARMUP` | Pré-calcular dados do dashboard a cada 5 minutos para carregamento instantâneo de páginas | `true` |
| `KRAWL_DASHBOARD_WARMUP_PAGES` | Número de páginas para pré-aquecer por painel de tabela | `10` |
| `KRAWL_DASHBOARD_WARMUP_AGGREGATION` | Pré-calcular agregações completas de top_paths/top_ua para servir sem consultas | `false` |
| `KRAWL_DASHBOARD_TOP_N_MIN_COUNT` | Contagem mínima de acessos para os painéis de principais caminhos/user agents (defina como 1 para desativar) | `5` |
| `KRAWL_METRICS_ENABLED` | Expor métricas Prometheus em `/<dashboard_path>/metrics` | `true` |
| `KRAWL_LOG_LEVEL` | Nível de log da aplicação (`DEBUG`, `INFO`, `WARNING`, `ERROR`) | `INFO` |
</details>
<details>
<summary><b>Banco de dados, retenção e backups</b> (6 variáveis)</summary>
Local de armazenamento, por quanto tempo os dados são mantidos e o job de dump.
| Variável de Ambiente | Descrição | Padrão |
|----------------------|-------------|---------|
| `KRAWL_DATABASE_PATH` | Local do arquivo do banco de dados | `data/krawl.db` |
| `KRAWL_DATABASE_PERSIST_SUSPICIOUS_ONLY` | Persistir apenas requisições suspeitas no log de acesso | `false` |
| `KRAWL_DATABASE_RETENTION_DAYS` | Dias para reter dados no banco de dados | `30` |
| `KRAWL_BACKUPS_PATH` | Caminho onde os dumps do banco de dados são salvos | `backups` |
| `KRAWL_BACKUPS_CRON` | Expressão cron para controlar o agendamento do job de backup | `*/30 * * * *` |
| `KRAWL_BACKUPS_ENABLED` | Booleano para habilitar o job de dump do banco de dados | `true` |
</details>
<details>
<summary><b>Armadilhas: tarpit, páginas de decepção e canary</b> (6 variáveis)</summary>
Armadilhas opcionais e as páginas servidas a atacantes.
| Variável de Ambiente | Descrição | Padrão |
|----------------------|-------------|---------|
| `KRAWL_TARPIT_ENABLED` | Prender agentes de IA com respostas lentas e texto aleatório | `false` |
| `KRAWL_TARPIT_DELAY_SECONDS` | Atraso extra em segundos adicionado por resposta quando o tarpit está ativo | `5` |
| `KRAWL_DECEPTION_IMPORT_PAGES` | Importar automaticamente páginas de decepção de `src/templates/deception/` na inicialização | `true` |
| `KRAWL_CUSTOM_TEMPLATE_PATH` | Caminho dentro do contêiner para um modelo HTML personalizado. O modelo deve incluir os placeholders `{counter}` e `{content}`. | `/templates/custom_page.html` |
| `KRAWL_CANARY_TOKEN_URL` | URL externa do token canary | None |
| `KRAWL_CANARY_TOKEN_TRIES` | Requisições antes de exibir o token canary | `10` |
</details>
<details>
<summary><b>Analisador de reputação de IP</b> (6 variáveis)</summary>
Limiares que decidem como um IP é classificado.
| Variável de Ambiente | Descrição | Padrão |
|----------------------|-------------|---------|
| `KRAWL_HTTP_RISKY_METHODS_THRESHOLD` | Limiar para detecção de métodos HTTP arriscados | `0.1` |
| `KRAWL_VIOLATED_ROBOTS_THRESHOLD` | Limiar para violações de robots.txt | `0.1` |
| `KRAWL_UNEVEN_REQUEST_TIMING_THRESHOLD` | Limiar do coeficiente de variação para temporização | `0.5` |
| `KRAWL_UNEVEN_REQUEST_TIMING_TIME_WINDOW_SECONDS` | Janela de tempo para análise de temporização de requisições em segundos | `300` |
| `KRAWL_USER_AGENTS_USED_THRESHOLD` | Limiar para detecção de múltiplos user agents | `2` |
| `KRAWL_ATTACK_URLS_THRESHOLD` | Limiar para detecção de URLs de ataque | `1` |
</details>
<details>
<summary><b>Lista de banimento e IPs ignorados</b> (4 variáveis)</summary>
Compartilhamento de listas de banimento com outras instâncias e tráfego que nunca deve ser rastreado.
| Variável de Ambiente | Descrição | Padrão |
|----------------------|-------------|---------|
| `KRAWL_IGNORED_IPS` | IPs/CIDRs separados por vírgula que nunca são rastreados, banidos ou exportados | Loopback, RFC1918, link-local, CGNAT |
| `KRAWL_BANLIST_EXPORT_PATH` | Caminho público de download da lista de banimento, ex.: `/public_banlist.txt` (vazio = desativado) | `""` |
| `KRAWL_BANLIST_SOURCES` | URLs de listas de banimento upstream separadas por vírgula para buscar e mesclar | Lista de banimento da comunidade Krawl |
| `KRAWL_BANLIST_REFRESH_INTERVAL` | Segundos entre buscas de listas de banimento upstream | `3600` |
</details>
<details>
<summary><b>Páginas de decepção geradas por IA</b> (10 variáveis)</summary>
Consulte a [documentação de Geração por IA](https://github.com/blessedrebus/krawl/blob/HEAD/docs/ai_generation.md).
| Variável de Ambiente | Descrição | Padrão |
|----------------------|-------------|---------|
| `KRAWL_AI_ENABLED` | Habilitar páginas de decepção geradas por IA | `false` |
| `KRAWL_AI_PROVIDER` | Provedor de IA (`"openrouter"` ou `"openai"`) | `"openrouter"` |
| `KRAWL_AI_OPENAI_BASE_URL` | URL Base OpenAI opcional para endpoints de API personalizados | `"https://api.openai.com/v1"` |
| `KRAWL_AI_API_KEY` | Chave da API para o provedor de IA | `None` |
| `KRAWL_AI_MODEL` | Modelo de IA a ser usado para geração de páginas | `"nvidia/nemotron-3-super-120b-a12b:free"` |
| `KRAWL_AI_TIMEOUT` | Tempo limite de requisição em segundos para chamadas de API de IA | `60` |
| `KRAWL_AI_MAX_DAILY_REQUESTS` | Número máximo de páginas geradas por IA por dia (0 = ilimitado) | `0` |
| `KRAWL_AI_PROMPT` | Modelo de prompt personalizado para geração de páginas por IA | Prompt padrão |
| `KRAWL_AI_REASONING_ENABLED` | Habilitar tokens de raciocínio (somente modelos de raciocínio do OpenRouter) | `false` |
| `KRAWL_AI_REASONING_EFFORT` | Esforço de raciocínio (`none`, `minimal`, `low`, `medium`, `high`, `xhigh`) | `"medium"` |
</details>
<details>
<summary><b>Modo escalável: PostgreSQL e Redis</b> (13 variáveis)</summary>
Usado apenas quando `KRAWL_MODE=scalable`. Consulte [Modos de Implantação](https://github.com/blessedrebus/krawl/blob/HEAD/docs/deployment-modes.md).
| Variável de Ambiente | Descrição | Padrão |
|----------------------|-------------|---------|
| `KRAWL_MODE` | Modo de implantação (`standalone` ou `scalable`) | `standalone` |
| `KRAWL_POSTGRES_HOST` | Hostname do PostgreSQL | `localhost` |
| `KRAWL_POSTGRES_PORT` | Porta do PostgreSQL | `5432` |
| `KRAWL_POSTGRES_USER` | Usuário do PostgreSQL | `krawl` |
| `KRAWL_POSTGRES_PASSWORD` | Senha do PostgreSQL | `krawl` |
| `KRAWL_POSTGRES_DATABASE` | Nome do banco de dados PostgreSQL | `krawl` |
| `KRAWL_REDIS_HOST` | Hostname do Redis | `localhost` |
| `KRAWL_REDIS_PORT` | Porta do Redis | `6379` |
| `KRAWL_REDIS_DB` | Número do banco de dados Redis | `0` |
| `KRAWL_REDIS_PASSWORD` | Senha do Redis | None |
| `KRAWL_REDIS_CACHE_TTL` | TTL em segundos para dados de pré-aquecimento do dashboard | `600` |
| `KRAWL_REDIS_HOT_TTL` | TTL em segundos para dados de caminho quente (informações de banimento, categorias de IP) | `30` |
| `KRAWL_REDIS_TABLE_TTL` | TTL em segundos para tabelas paginadas do dashboard | `120` |
</details>
Por exemplo```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"
Exemplo de um Docker run com variáveis de ambiente (modo standalone):```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
## Use o Krawl para Banir IPs Maliciosos
O Krawl usa um sistema baseado em reputação para classificar endereços IP de atacantes e oferece duas formas de exportar listas de IP para integração com firewall.
O endpoint `/api/export-ips` consulta o banco de dados diretamente e suporta filtragem por categoria de IP (`attacker`, `bad_crawler`, `regular_user`, `good_crawler`) e formato de saída (`raw`, `iptables`, `nftables`):```bash
curl "https://your-krawl-instance/<DASHBOARD-PATH>/api/export-ips?categories=attacker&fwtype=raw"
Isso permite o bloqueio automático de tráfego malicioso em várias plataformas:
Para ver todos os parâmetros da API, exemplos e como adicionar formatos de firewall personalizados, consulte a documentação do Firewall Exporters.
O Krawl também pode enviar IPs banidos diretamente para uma Cloudflare Account IP List para uso em regras de WAF. A sincronização é executada como uma tarefa em segundo plano e atualiza a lista por substituição completa em um intervalo configurável. Consulte a documentação de Cloudflare Banlist Sync.
O Krawl usa tarefas que analisam o tráfego recente para construir e atualizar continuamente uma pontuação de reputação de IP. Ele é executado periodicamente e avalia cada endereço IP ativo com base em múltiplos indicadores comportamentais para classificá-lo como atacante, crawler ou usuário comum. Os limites são totalmente personalizáveis.

A análise inclui:
Cada sinal contribui para um modelo de pontuação ponderada que atribui uma categoria de reputação:
attackerbad_crawlergood_crawlerregular_userunknown (para dados insuficientes)As pontuações e métricas resultantes são armazenadas no banco de dados e usadas pelo Krawl para alimentar dashboards, rastreamento de reputação e ações automatizadas de mitigação, como banimento de IP ou integração com firewall.
O Krawl pode gerar automaticamente páginas de decepção realistas usando modelos de IA das APIs OpenRouter ou OpenAI. Esse recurso cria páginas honeypot únicas e plausíveis em tempo real para enganar atacantes, sem necessidade de criação manual de páginas.
Principais Recursos:
Configuração 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
Para configuração e uso detalhados, consulte a [documentação de AI Generation](https://github.com/blessedrebus/krawl/blob/HEAD/docs/ai_generation.md).
Você também pode **contribuir com modelos de decepção** abrindo um PR; veja [Contribuindo com Modelos de Decepção](https://github.com/blessedrebus/krawl/blob/HEAD/docs/deception_pages.md#contributing-deception-templates-via-pr).
## Executando Atrás de um Proxy Reverso ou CDN
**NGINX, Traefik e outros proxies como CloudFlare** precisam de encaminhamento de cabeçalhos para que o Krawl possa ver o IP real. Consulte a [documentação de Proxy Reverso](https://github.com/blessedrebus/krawl/blob/HEAD/docs/reverse-proxy.md) para exemplos de configuração e a lista completa de cabeçalhos.
## Métricas e Monitoramento
O Krawl expõe métricas do [Prometheus](https://prometheus.io/) em `/<dashboard_secret_path>/metrics` (habilitado por padrão) e acompanha um painel do [Grafana](https://grafana.com/) pronto para importação em [`grafana-dashboard.json`](https://github.com/blessedrebus/krawl/blob/HEAD/grafana-dashboard.json).
Consulte a [documentação de Monitoramento](https://github.com/blessedrebus/krawl/blob/HEAD/docs/monitoring.md) para a lista completa de métricas, etapas de importação do Grafana e configuração de coleta (scraping) do Prometheus / Kubernetes (`ServiceMonitor`).
## Documentação Adicional
| Tópico | Descrição |
|-------|-------------|
| [AI Generation](https://github.com/blessedrebus/krawl/blob/HEAD/docs/ai_generation.md) | Configure páginas de decepção geradas por IA usando OpenRouter ou OpenAI |
| [Deception Pages](https://github.com/blessedrebus/krawl/blob/HEAD/docs/deception_pages.md) | Gerencie, importe e exporte páginas de decepção; operações em massa e filtragem por data |
| [Deployment Modes](https://github.com/blessedrebus/krawl/blob/HEAD/docs/deployment-modes.md) | Modo standalone (SQLite) vs escalável (PostgreSQL + Redis), configuração e migração de dados |
| [Honeypot](https://github.com/blessedrebus/krawl/blob/HEAD/docs/honeypot.md) | Visão geral completa das páginas de honeypot: logins falsos, listagens de diretório, arquivos de credenciais, armadilhas de SQLi/XSS/XXE/injeção de comando e muito mais |
| [Dashboard](https://github.com/blessedrebus/krawl/blob/HEAD/docs/dashboard.md) | Acesse e explore o painel de monitoramento em tempo real |
| [Dashboard API](https://github.com/blessedrebus/krawl/blob/HEAD/docs/dashboard-api.md) | A própria API JSON do Krawl: referência de endpoints, autenticação, documentação OpenAPI interativa e download de anexos |
| [External APIs](https://github.com/blessedrebus/krawl/blob/HEAD/docs/api.md) | APIs de terceiros que o Krawl consulta para dados de IP, reputação e geolocalização |
| [Reverse Proxy](https://github.com/blessedrebus/krawl/blob/HEAD/docs/reverse-proxy.md) | Como implantar o Krawl atrás do NGINX ou usar subdomínios de isca |
| [Database Backups](https://github.com/blessedrebus/krawl/blob/HEAD/docs/backups.md) | Habilite e configure o trabalho automático de dump do banco de dados |
| [Canary Token](https://github.com/blessedrebus/krawl/blob/HEAD/docs/canary-token.md) | Configure gatilhos de alerta externos por meio do canarytokens.org |
| [Wordlist](https://github.com/blessedrebus/krawl/blob/HEAD/docs/wordlist.md) | Personalize nomes de usuário, senhas e listagens de diretório falsos |
| [Architecture](https://github.com/blessedrebus/krawl/blob/HEAD/docs/architecture.md) | Visão geral técnica do código-fonte, pipeline de requisições, esquema do banco de dados e tarefas em segundo plano |
| [Cloudflare Banlist Sync](https://github.com/blessedrebus/krawl/blob/HEAD/docs/cloudflare_banlist.md) | Envia os IPs banidos do Krawl para uma lista de IPs da conta Cloudflare para uso em regras de WAF. A sincronização é executada como uma tarefa em segundo plano e atualiza a lista por substituição completa. |
| [Firewall Exporters](https://github.com/blessedrebus/krawl/blob/HEAD/docs/firewall-exporters.md) | Exporte listas de banimento de IP nos formatos raw, iptables ou nftables via API REST |
| [Tarpit](https://github.com/blessedrebus/krawl/blob/HEAD/docs/tarpit.md) | Desacelere e envenene rastreadores de IA com respostas atrasadas e com ruído adicionado |
| [Metrics & Monitoring](https://github.com/blessedrebus/krawl/blob/HEAD/docs/monitoring.md) | Endpoint de métricas do Prometheus, referência de métricas expostas, painel do Grafana e coleta via ServiceMonitor |
## Contribuindo
Contribuições são bem-vindas! Por favor:
1. Faça um fork do repositório
2. Crie uma branch de funcionalidade
3. Faça suas alterações
4. Envie um pull request (explique as alterações!)
## Aviso Legal
> [!CAUTION]
> Este é um sistema de decepção/honeypot. Implante em ambientes isolados e monitore cuidadosamente os eventos de segurança. Use com responsabilidade e em conformidade com as leis e regulamentos aplicáveis.
## Histórico de Estrelas
<img src="https://star-history.dera.page/svg?repos=BlessedRebuS/Krawl&type=Date" width="600" alt="Star History Chart" />
| Standalone | Escalável |
|---|
| Banco de dados | SQLite (modo WAL) | PostgreSQL |
| Cache | Dict Python em memória | Redis (TTL em várias camadas) |
| Réplicas | 1 (instância única) | 1+ (escalonamento horizontal) |
| Dependências externas | Nenhuma | PostgreSQL + Redis |
| Melhor para | Dev, homelabs, <500k requisições | Produção, HA, >500k requisições |