
Honeypot SSH/Telnet di media interazione costruito con Cowrie, Loki, Promtail e Grafana - provisionato su DigitalOcean tramite Terraform con una pipeline di validazione GitLab CI.
Uno stack di honeypot SSH/Telnet distribuito su un droplet DigitalOcean utilizzando Terraform. Gli attacchi vengono catturati da Cowrie, archiviati in Loki e visualizzati in Grafana con una mappa mondiale in tempo reale delle origini degli attacchi.
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
## Requisiti Hardware
> Nota: Questi requisiti si basano sul piano DigitalOcean Basic Droplet di maggio 2026 e sono i requisiti minimi per eseguire il progetto.
- Provider: DigitalOcean
- Piano: Basic Droplet - 1 vCPU Intel
- RAM: 1 GB (+2 GB di swap)
- Storage: 35 GB NVMe SSD
- OS: Ubuntu 24.04 LTS
## Installazione e Configurazione
>Nota: Dopo l'installazione, si consiglia di aprire un nuovo terminale e verificare di poter ancora eseguire SSH su `ADMIN_SSH_PORT` (Predefinito: 2022) prima di chiudere la sessione originale.
### Distribuzione con Terraform (Consigliata)
1. Crea un token API DigitalOcean con autorizzazioni di lettura/scrittura:
- Accedi a DigitalOcean e vai su Account > API > Tokens > Generate New Token.
- Assegna un nome al token (ad es., "Cowrie Honeypot") e seleziona le autorizzazioni "Full Access".
- Fai clic su "Generate Token" e copia il valore del token in un luogo sicuro (non potrai vederlo di nuovo).
2. Crea una coppia di chiavi SSH sulla tua macchina locale e copia il percorso della chiave pubblica.
3. Vai nella directory `terraform` quindi copia e modifica il file delle variabili:
> Nota: `do_token`, `ssh_public_key_path` e `grafana_admin_password` devono essere configurati come minimo in `terraform.tfvars` prima di applicare.```bash
cd terraform
cp terraform.tfvars.example terraform.tfvars
Nota: Terraform deve essere installato sulla tua macchina locale. Visita la Guida all'installazione di Terraform per le istruzioni.```bash terraform init # Initialize Terraform and download providers terraform apply
5. Se Testing - Ridistribuire con sostituzione:```bash
terraform apply -replace="digitalocean_droplet.honeypot"
### Distribuzione Manuale (Legacy)
1. Crea un droplet DigitalOcean con i requisiti hardware sopra indicati e la tua chiave SSH.
2. Connettiti al droplet via SSH o usa la console web DigitalOcean ed esegui i seguenti comandi:```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: Per impostazione predefinita, Terraform scrive lo stato in
terraform/terraform.tfstatesulla tua macchina locale. Questo file contiene valori di output sensibili (IP del droplet, password di Grafana, impronta digitale della chiave SSH) e non deve mai essere committato..gitignorecopre*.tfstatee*.tfstate.*.
Rischi dello stato locale:
apply possono danneggiare il filePer qualsiasi cosa oltre a un laboratorio personale, passa a un backend remoto. terraform/backend.tf contiene una configurazione DigitalOcean Spaces (compatibile con S3) commentata.
Per abilitare il backend remoto:
terraform.tfvars): ```bash
export AWS_ACCESS_KEY_ID=
export AWS_SECRET_ACCESS_KEY=
backend "s3" in terraform/backend.tf e inserisci il nome del tuo bucket e l'endpoint della regione.terraform init -migrate-state per spostare lo stato locale esistente su Spaces..gitlab-ci.yml esegue tre job a ogni push in un'unica fase validate: