
Honeypot de interacción media para SSH/Telnet construido con Cowrie, Loki, Promtail y Grafana - aprovisionado en DigitalOcean mediante Terraform con un pipeline de validación de GitLab CI.
Un stack de honeypot SSH/Telnet desplegado en un droplet de DigitalOcean usando Terraform. Los ataques son capturados por Cowrie, almacenados en Loki y visualizados en Grafana con un mapa mundial en vivo del origen de los ataques.
honeypot/
├── cowrie/
│ └── etc/
│ ├── cowrie.cfg # Cowrie honeypot configuration
│ └── userdb.txt # Accepted and rejected fake credentials
├── geoip/
│ └── .gitkeep # Placeholder - MMDB files are gitignored
├── grafana/
│ ├── provisioning/
│ │ ├── dashboards/
│ │ │ ├── dashboards.yml # Provisioning: dashboard provider
│ │ │ └── honeypot-dashboard.json # Pre-built Attack Monitor dashboard
│ │ └── datasources/
│ │ └── loki.yml # Auto-provisioned Loki datasource
│ └── grafana.ini # Grafana server settings
├── loki/
│ └── config.yml # Loki single-binary config and retention
├── promtail/
│ └── config.yml # Promtail scrape and GeoIP pipeline
├── scripts/
│ ├── geoip-update.sh # Download or refresh GeoIP database
│ └── setup-firewall.sh # Host UFW rules for honeypot ports
├── terraform/
│ ├── templates/
│ │ ├── cloud-init.yaml.tftpl # Droplet first-boot script (Terraform-templated)
│ │ └── env.tftpl # .env lines embedded via Terraform
│ ├── backend.tf # Terraform backend config
│ ├── main.tf # Droplet, SSH key, firewall, cloud-init
│ ├── outputs.tf # IPs and helpful post-apply values
│ ├── terraform.tfvars.example # Example variable values (copy to terraform.tfvars)
│ ├── variables.tf # Terraform input variables
│ └── versions.tf # Terraform and provider version constraints
├── .env.example # Example environment file for manual setup
├── .gitignore # Ignored paths and files
├── .gitlab-ci.yml # CI/CD pipeline: fmt, validate, Checkov
├── docker-compose.yml # Docker Compose file for the honeypot stack
├── LICENSE # GPLv2 license
├── manual-deployment.sh # Legacy VM bootstrap without Terraform
└── README.md # Project documentation
## Requisitos de Hardware
> Nota: Estos requisitos se basan en el plan Basic Droplet de DigitalOcean a partir de mayo de 2026 y son los requisitos mínimos para ejecutar el proyecto.
- Proveedor: DigitalOcean
- Plan: Basic Droplet - 1 vCPU Intel
- RAM: 1 GB (+2 GB de swap)
- Almacenamiento: 35 GB NVMe SSD
- SO: Ubuntu 24.04 LTS
## Instalación y Configuración
>Nota: Después de la instalación, se recomienda abrir una nueva terminal y verificar que aún puedes conectarte por SSH en `ADMIN_SSH_PORT` (Predeterminado: 2022) antes de cerrar tu sesión original.
### Despliegue con Terraform (Recomendado)
1. Crea un token de API de DigitalOcean con permisos de lectura/escritura:
- Inicia sesión en DigitalOcean y navega a Cuenta > API > Tokens > Generar nuevo token.
- Nombra tu token (por ejemplo, "Cowrie Honeypot") y selecciona permisos de "Acceso completo".
- Haz clic en "Generar token" y copia el valor del token en un lugar seguro (no podrás volver a verlo).
2. Crea un par de claves SSH en tu máquina local y copia la ruta de la clave pública.
3. Ve al directorio `terraform`, luego copia y edita el archivo de variables:
> Nota: `do_token`, `ssh_public_key_path` y `grafana_admin_password` deben configurarse al menos en `terraform.tfvars` antes de aplicar.```bash
cd terraform
cp terraform.tfvars.example terraform.tfvars
Nota: Terraform debe estar instalado en tu máquina local. Visita Guía de instalación de Terraform para obtener instrucciones.```bash terraform init # Initialize Terraform and download providers terraform apply
5. Si pruebas - Redesplegar con reemplazo:```bash
terraform apply -replace="digitalocean_droplet.honeypot"
### Despliegue Manual (Legado)
1. Crea un droplet de DigitalOcean con los requisitos de hardware mencionados y tu clave SSH.
2. Conéctate mediante SSH al droplet o usa la consola web de DigitalOcean y ejecuta los siguientes comandos:```bash
ssh root@<your-droplet-ip> # If using DigitalOcean web console, skip this command
git clone https://gitlab.com/Oseguera12/cowrie-honeypot-digitalocean.git /opt/honeypot
cd /opt/honeypot
cp .env.example .env
nano .env
bash manual-deployment.sh
Nota: Por defecto, Terraform escribe el estado en
terraform/terraform.tfstateen tu máquina local. Este archivo contiene valores de salida sensibles (IP del droplet, contraseña de Grafana, huella digital de la clave SSH) y nunca debe ser enviado al repositorio..gitignorecubre*.tfstatey*.tfstate.*.
Riesgos del estado local:
apply pueden corromper el archivoPara cualquier cosa más allá de un laboratorio personal, cambia a un backend remoto. terraform/backend.tf contiene una configuración comentada de DigitalOcean Spaces (compatible con S3).
Para habilitar el backend remoto:
terraform.tfvars): ```bash
export AWS_ACCESS_KEY_ID=
export AWS_SECRET_ACCESS_KEY=
backend "s3" en terraform/backend.tf y completa con el nombre de tu bucket y el endpoint de la región.terraform init -migrate-state para mover el estado local existente a Spaces..gitlab-ci.yml ejecuta tres trabajos en cada push en una sola etapa validate: