
Mittelinteraktiver SSH/Telnet-Honeypot, erstellt mit Cowrie, Loki, Promtail und Grafana – bereitgestellt auf DigitalOcean über Terraform mit einer GitLab CI Validierungspipeline.
Ein SSH/Telnet-Honeypot-Stack, der mit Terraform auf einem DigitalOcean-Droplet bereitgestellt wird. Angriffe werden von Cowrie erfasst, in Loki gespeichert und in Grafana mit einer Live-Weltkarte der Angriffsursprünge visualisiert.
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
## Hardware-Anforderungen
> Hinweis: Diese Anforderungen basieren auf dem DigitalOcean Basic Droplet-Plan Stand Mai 2026 und stellen die Mindestanforderungen für den Betrieb des Projekts dar.
- Anbieter: DigitalOcean
- Plan: Basic Droplet - 1 Intel vCPU
- RAM: 1 GB (+2 GB Swap)
- Speicher: 35 GB NVMe SSD
- OS: Ubuntu 24.04 LTS
> **Speicherreserve nach den Container-Versionssprüngen:** `docker-compose.yml` pinnt neuere Grafana- (12.0.0), Loki- und Promtail-Images (3.6.13) als diese Droplet-Größe ursprünglich abgestimmt wurde. Die `mem_limit`/`memswap_limit`-Werte pro Dienst sind unverändert — beobachte `docker stats` nach dem ersten Deployment und erhöhe den Droplet-Plan (oder reduziere Lokis `retention_period` / Grafanas Cache), falls ein Container dauerhaft nahe an seinem Limit liegt.
## Installation & Einrichtung
>Hinweis: Nach der Installation wird empfohlen, ein neues Terminal zu öffnen und zu überprüfen, ob du dich weiterhin per SSH auf `ADMIN_SSH_PORT` (Standard: 2022) verbinden kannst, bevor du deine ursprüngliche Sitzung schließt.
### Terraform-Deployment (Empfohlen)
1. Erstelle ein DigitalOcean API-Token mit Lese-/Schreibberechtigungen:
- Melde dich bei DigitalOcean an und navigiere zu Account > API > Tokens > Generate New Token.
- Benenne dein Token (z. B. „Cowrie Honeypot") und wähle die Berechtigungen „Full Access" aus.
- Klicke auf „Generate Token" und kopiere den Token-Wert an einen sicheren Ort (du wirst ihn nicht erneut sehen können).
2. Erstelle ein SSH-Schlüsselpaar auf deinem lokalen Rechner und kopiere den Pfad zum öffentlichen Schlüssel.
3. Gehe in das `terraform`-Verzeichnis und kopiere und bearbeite die Variablendatei:
> Hinweis: `do_token`, `ssh_public_key_path` und `grafana_admin_password` müssen mindestens in `terraform.tfvars` konfiguriert sein, bevor du sie anwendest.```bash
cd terraform
cp terraform.tfvars.example terraform.tfvars
Hinweis: Terraform muss auf Ihrem lokalen Rechner installiert sein. Besuchen Sie die Terraform-Installationsanleitung für Anweisungen.```bash terraform init # Initialize Terraform and download providers terraform apply
5. If Testing - Redeploy with replacement:```bash
terraform apply -replace="digitalocean_droplet.honeypot"
### Manuelle Bereitstellung (Legacy)
1. Erstellen Sie einen DigitalOcean-Droplet mit den oben genannten Hardwareanforderungen und Ihrem SSH-Schlüssel.
2. Melden Sie sich per SSH am Droplet an oder verwenden Sie die DigitalOcean-Webkonsole und führen Sie die folgenden Befehle aus:```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
Hinweis: Standardmäßig schreibt Terraform den State in
terraform/terraform.tfstateauf Ihren lokalen Rechner. Diese Datei enthält sensible Ausgabewerte (Droplet-IP, Grafana-Passwort, SSH-Key-Fingerprint) und darf niemals committet werden..gitignoredeckt*.tfstateund*.tfstate.*ab.