
SSH/Telnet honeypot среднего уровня взаимодействия, созданный с помощью Cowrie, Loki, Promtail и Grafana - развернутый на DigitalOcean через Terraform с конвейером валидации GitLab CI.
Стек honeypot для SSH/Telnet, развёрнутый на droplet DigitalOcean с помощью Terraform. Атаки перехватываются Cowrie, сохраняются в Loki и визуализируются в Grafana с живой картой мира источников атак.
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
## Требования к оборудованию
> Примечание: Эти требования основаны на плане DigitalOcean Basic Droplet по состоянию на май 2026 года и являются минимальными требованиями для запуска проекта.
- Провайдер: DigitalOcean
- План: Basic Droplet — 1 Intel vCPU
- RAM: 1 ГБ (+2 ГБ swap)
- Хранилище: 35 ГБ NVMe SSD
- ОС: Ubuntu 24.04 LTS
> **Запас памяти после обновления версий контейнеров:** `docker-compose.yml` фиксирует более новые образы Grafana (12.0.0), Loki и Promtail (3.6.13), чем те, под которые изначально подбирался размер этого дроплета. Значения `mem_limit`/`memswap_limit` для каждого сервиса не изменились — следите за `docker stats` после первого развёртывания и повысьте план дроплета (или уменьшите `retention_period` у Loki / кэш Grafana), если какой-либо контейнер постоянно находится near its limit.
## Установка и настройка
>Примечание: После установки рекомендуется открыть новый терминал и убедиться, что вы по-прежнему можете подключиться по SSH на `ADMIN_SSH_PORT` (по умолчанию: 2022), прежде чем закрывать исходную сессию.
### Развёртывание через Terraform (рекомендуется)
1. Создайте токен API DigitalOcean с правами на чтение/запись:
- Войдите в DigitalOcean и перейдите в Account > API > Tokens > Generate New Token.
- Назовите токен (например, "Cowrie Honeypot") и выберите права "Full Access".
- Нажмите "Generate Token" и скопируйте значение токена в надёжное место (вы больше не сможете его увидеть).
2. Создайте пару SSH-ключей на локальной машине и скопируйте путь к публичному ключу.
3. Перейдите в каталог `terraform`, затем скопируйте и отредактируйте файл переменных:
> Примечание: `do_token`, `ssh_public_key_path` и `grafana_admin_password` должны быть настроены как минимум в `terraform.tfvars` перед применением.```bash
cd terraform
cp terraform.tfvars.example terraform.tfvars
Примечание: Terraform должен быть установлен на вашей локальной машине. Инструкции см. в Terraform Installation Guide.```bash terraform init # Initialize Terraform and download providers terraform apply
5. Если тестирование — выполните повторное развёртывание с заменой:```bash
terraform apply -replace="digitalocean_droplet.honeypot"
### Ручное развёртывание (устаревший способ)
1. Создайте droplet в DigitalOcean с указанными выше требованиями к оборудованию и вашим SSH-ключом.
2. Подключитесь к droplet по SSH или воспользуйтесь веб-консолью DigitalOcean и выполните следующие команды:```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
Примечание: По умолчанию Terraform записывает состояние в
terraform/terraform.tfstateна вашей локальной машине. Этот файл содержит конфиденциальные выходные значения (IP-адрес droplet, пароль Grafana, отпечаток SSH-ключа) и никогда не должен попадать в репозиторий..gitignoreохватывает*.tfstateи*.tfstate.*.