
SSH/Telnet honeypot среднего уровня взаимодействия, созданный с помощью Cowrie, Loki, Promtail и Grafana - развернутый на DigitalOcean через Terraform с конвейером валидации GitLab CI.
Стек хонейпота SSH/Telnet, развернутый на DigitalOcean droplet с помощью Terraform. Атаки фиксируются Cowrie, сохраняются в Loki и визуализируются в Grafana с живой картой мира источников атак.
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
## Аппаратные требования
> Примечание: Эти требования основаны на тарифе Basic Droplet от DigitalOcean по состоянию на май 2026 года и являются минимальными для работы проекта.
- Провайдер: DigitalOcean
- Тариф: Basic Droplet — 1 Intel vCPU
- ОЗУ: 1 ГБ (+2 ГБ swap)
- Хранилище: 35 ГБ NVMe SSD
- ОС: Ubuntu 24.04 LTS
## Установка и настройка
>Примечание: После установки рекомендуется открыть новый терминал и проверить, что вы всё ещё можете подключиться по 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.```bash terraform init # Initialize Terraform and download providers terraform apply
5. Если тестирование - переразвернуть с заменой:```bash
terraform apply -replace="digitalocean_droplet.honeypot"
### Ручное развёртывание (устаревшее)
1. Создайте droplet DigitalOcean с указанными выше требованиями к оборудованию и вашим SSH-ключом.
2. Подключитесь по SSH к droplet или используйте веб-консоль 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 капли, пароль Grafana, отпечаток SSH-ключа) и никогда не должен быть закоммичен..gitignoreпокрывает*.tfstateи*.tfstate.*.
Риски локального состояния:
apply могут повредить файлДля всего, что выходит за рамки личной лаборатории, переключитесь на удаленный бэкенд. terraform/backend.tf содержит закомментированную конфигурацию DigitalOcean Spaces (совместимую с S3).
Чтобы включить удаленный бэкенд:
terraform.tfvars): ```bash
export AWS_ACCESS_KEY_ID=
export AWS_SECRET_ACCESS_KEY=
backend "s3" в terraform/backend.tf и укажите имя вашего бакета и endpoint региона.terraform init -migrate-state, чтобы перенести существующее локальное состояние в Spaces..gitlab-ci.yml запускает три задания при каждом пуше в одной стадии validate: