
Honeypot de interação média SSH/Telnet construído com Cowrie, Loki, Promtail e Grafana - provisionado na DigitalOcean via Terraform com um pipeline de validação GitLab CI.
Uma pilha de honeypot SSH/Telnet implantada em um droplet da DigitalOcean usando Terraform. Os ataques são capturados pelo Cowrie, armazenados no Loki e visualizados no Grafana com um mapa-múndi ao vivo das origens dos ataques.
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
## Requisitos de Hardware
> Nota: Estes requisitos são baseados no plano Basic Droplet da DigitalOcean a partir de maio de 2026 e são os requisitos mínimos para executar o projeto.
- Provedor: DigitalOcean
- Plano: Basic Droplet - 1 vCPU Intel
- RAM: 1 GB (+2 GB de swap)
- Armazenamento: 35 GB SSD NVMe
- SO: Ubuntu 24.04 LTS
## Instalação e Configuração
>Nota: Após a instalação, é recomendado abrir um novo terminal e verificar se ainda é possível fazer SSH na porta `ADMIN_SSH_PORT` (Padrão: 2022) antes de fechar sua sessão original.
### Implantação com Terraform (Recomendado)
1. Crie um token da API do DigitalOcean com permissões de leitura/escrita:
- Faça login no DigitalOcean e navegue até Account > API > Tokens > Generate New Token.
- Nomeie seu token (exemplo: "Cowrie Honeypot") e selecione permissões "Full Access".
- Clique em "Generate Token" e copie o valor do token para um local seguro (não será possível vê-lo novamente).
2. Crie um par de chaves SSH em sua máquina local e copie o caminho da chave pública.
3. Vá para o diretório `terraform` e copie e edite o arquivo de variáveis:
> Nota: `do_token`, `ssh_public_key_path` e `grafana_admin_password` devem ser configurados no mínimo em `terraform.tfvars` antes de aplicar.```bash
cd terraform
cp terraform.tfvars.example terraform.tfvars
Nota: O Terraform deve estar instalado na sua máquina local. Visite Guia de Instalação do Terraform para obter instruções.```bash terraform init # Initialize Terraform and download providers terraform apply
5. Se Teste - Reimplantar com substituição:```bash
terraform apply -replace="digitalocean_droplet.honeypot"
### Implantação Manual (Legado)
1. Crie um droplet na DigitalOcean com os requisitos de hardware acima e sua chave SSH.
2. Faça SSH no droplet ou use o console web da DigitalOcean e execute os seguintes comandos:```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: Por padrão, o Terraform escreve o estado em
terraform/terraform.tfstatena sua máquina local. Este arquivo contém valores de saída sensíveis (IP do droplet, senha do Grafana, impressão digital da chave SSH) e nunca deve ser commitado. O.gitignorecobre*.tfstatee*.tfstate.*.
Riscos do estado local:
apply concorrentes podem corromper o arquivoPara qualquer coisa além de um laboratório pessoal, mude para um backend remoto. O terraform/backend.tf contém uma configuração comentada do DigitalOcean Spaces (compatível com S3).
Para ativar o backend remoto:
terraform.tfvars): ```bash
export AWS_ACCESS_KEY_ID=
export AWS_SECRET_ACCESS_KEY=
backend "s3" em terraform/backend.tf e preencha o nome do seu bucket e o endpoint da região.terraform init -migrate-state para mover o estado local existente para o Spaces.O arquivo .gitlab-ci.yml executa três jobs a cada push em um único estágio validate: