
Honeypot SSH/Telnet à interaction moyenne construit avec Cowrie, Loki, Promtail et Grafana - provisionné sur DigitalOcean via Terraform avec un pipeline de validation GitLab CI.
Une pile honeypot SSH/Telnet déployée sur un droplet DigitalOcean à l'aide de Terraform. Les attaques sont capturées par Cowrie, stockées dans Loki et visualisées dans Grafana avec une carte mondiale en direct des origines des attaques.
honeypot/
├── cowrie/
│ └── etc/
│ ├── cowrie.cfg # Cowrie honeypot configuration
│ └── userdb.txt # Accepted and rejected fake credentials
├── docs/
│ └── ttp-to-runtime-rules.md # Observed attacker TTPs → Falco rules (eks-gitops, platform-engineering-lab)
├── 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
├── metrics/
│ ├── runtime-metrics.schema.json # Shared schema — identical across all 4 portfolio projects
│ └── runtime-metrics.json # Generated by scripts/export-honeypot-metrics.sh; gitignored, not committed
├── 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
│ ├── export-honeypot-metrics.sh # Queries Grafana/Loki, writes attacker_telemetry
│ └── emit-runtime-metrics.py # Wraps attacker_telemetry in the shared metrics schema
├── 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, metrics schema/export
├── 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
## Configuration matérielle requise
> Remarque : ces exigences sont basées sur le plan DigitalOcean Basic Droplet en date de mai 2026 et constituent les exigences minimales pour exécuter le projet.
- Fournisseur : DigitalOcean
- Plan : Basic Droplet - 1 Intel vCPU
- RAM : 1 Go (+2 Go de swap)
- Stockage : 35 Go NVMe SSD
- OS : Ubuntu 24.04 LTS
> **Marge de mémoire après les mises à jour de version des conteneurs :** `docker-compose.yml` épingle des images Grafana (12.0.0), Loki et Promtail (3.6.13) plus récentes que ce que cette taille de droplet était initialement calibrée pour supporter. Les valeurs `mem_limit`/`memswap_limit` par service sont inchangées — surveillez `docker stats` après le premier déploiement, et augmentez le plan du droplet (ou réduisez le `retention_period` de Loki / le cache de Grafana) si un conteneur est constamment proche de sa limite.
## Installation et configuration
>Remarque : après l'installation, il est recommandé d'ouvrir un nouveau terminal et de vérifier que vous pouvez toujours vous connecter en SSH sur `ADMIN_SSH_PORT` (par défaut : 2022) avant de fermer votre session d'origine.
### Déploiement Terraform (recommandé)
1. Créez un jeton d'API DigitalOcean avec des permissions de lecture/écriture :
- Connectez-vous à DigitalOcean et naviguez vers Account > API > Tokens > Generate New Token.
- Nommez votre jeton (par exemple, « Cowrie Honeypot ») et sélectionnez les permissions « Full Access ».
- Cliquez sur « Generate Token » et copiez la valeur du jeton dans un emplacement sécurisé (vous ne pourrez plus la voir par la suite).
2. Créez une paire de clés SSH sur votre machine locale et copiez le chemin de la clé publique.
3. Rendez-vous dans le répertoire `terraform`, puis copiez et modifiez le fichier de variables :
> Remarque : `do_token`, `ssh_public_key_path` et `grafana_admin_password` doivent au minimum être configurés dans `terraform.tfvars` avant l'application.```bash
cd terraform
cp terraform.tfvars.example terraform.tfvars
Remarque : Terraform doit être installé sur votre machine locale. Consultez le Guide d'installation de Terraform pour les instructions.```bash terraform init # Initialize Terraform and download providers terraform apply
5. Si Test - Redéployer avec remplacement :```bash
terraform apply -replace="digitalocean_droplet.honeypot"
### Déploiement manuel (hérité)
1. Créez un droplet DigitalOcean avec les prérequis matériels ci-dessus et votre clé SSH.
2. Connectez-vous au droplet en SSH ou utilisez la console web DigitalOcean et exécutez les commandes suivantes :```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