Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
Cowrie and Grafana Honeypot using Terraform on DigitalOcean — 基于Cowrie、Loki、Promtail和Grafana构建的中等交互SSH/Telnet蜜罐——通过Terraform部署于DigitalOcean,并配有GitLab CI验证流水线。 | Kitploit
工具/GitLabGitLab/oseguera12/cowrie-honeypot-digitalocean
云基础设施安全网络安全DevSecOps威胁情报日志分析
GitLaboseguera12/cowrie-honeypot-digitalocean

Cowrie and Grafana Honeypot using Terraform on DigitalOcean

基于Cowrie、Loki、Promtail和Grafana构建的中等交互SSH/Telnet蜜罐——通过Terraform部署于DigitalOcean,并配有GitLab CI验证流水线。

查看仓库

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
网站
1246天前尚未审核

使用 Terraform 在 DigitalOcean 上部署 Cowrie 与 Grafana 蜜罐

演示视频

目录

  • 系统概述
  • 技术栈
  • 项目目录结构
  • 硬件要求
  • 安装与设置
  • Terraform 状态管理
  • CI/CD 流水线
  • 系统架构
  • 观察结果
  • 运行时指标
  • 使用方法
  • 项目文档
    • 架构设计与权衡
    • 系统执行流程
    • 遇到的问题与限制
    • 未来改进
  • 安全考虑
  • 贡献者
  • 许可证

系统概述

一个使用 Terraform 部署在 DigitalOcean droplet 上的 SSH/Telnet 蜜罐栈。攻击由 Cowrie 捕获,存储在 Loki 中,并在 Grafana 中可视化,附带攻击来源的实时世界地图。

技术栈

  • DigitalOcean
  • Terraform
  • Docker
  • Cowrie
  • Loki
  • Grafana
  • Promtail
  • DB-IP(City Lite 下载)

项目目录结构```

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

## 硬件要求

> 注意:这些要求基于截至 2026 年 5 月的 DigitalOcean Basic Droplet 方案,是运行该项目的最低要求。

- 提供商:DigitalOcean
- 方案:Basic Droplet - 1 Intel vCPU
- 内存:1 GB(+2 GB swap)
- 存储:35 GB NVMe SSD
- 操作系统:Ubuntu 24.04 LTS

> **容器版本升级后的内存余量:** `docker-compose.yml` 固定了比该 droplet 规格最初调优时更新的 Grafana(12.0.0)、Loki 和 Promtail(3.6.13)镜像。每个服务的 `mem_limit`/`memswap_limit` 值保持不变——首次部署后请留意 `docker stats`,如果任何容器持续接近其限制,请升级 droplet 方案(或缩减 Loki 的 `retention_period` / Grafana 的缓存)。

## 安装与设置

>注意:安装完成后,建议打开一个新终端,在关闭原始会话之前,验证你仍然可以通过 `ADMIN_SSH_PORT`(默认:2022)进行 SSH 连接。

### Terraform 部署(推荐)

1. 创建一个具有读写权限的 DigitalOcean API 令牌:

- 登录 DigitalOcean 并导航至 Account > API > Tokens > Generate New Token。
- 为你的令牌命名(例如 "Cowrie Honeypot")并选择 "Full Access" 权限。
- 点击 "Generate Token" 并将令牌值复制到安全位置(你将无法再次看到它)。

2. 在本地机器上创建 SSH 密钥对并复制公钥路径。

3. 进入 `terraform` 目录,然后复制并编辑变量文件:

> 注意:在应用之前,至少必须在 `terraform.tfvars` 中配置 `do_token`、`ssh_public_key_path` 和 `grafana_admin_password`。```bash
cd terraform
cp terraform.tfvars.example terraform.tfvars
  1. 应用配置并开始部署:

注意:您的本地机器上必须安装 Terraform。请访问 Terraform 安装指南 获取说明。```bash terraform init # Initialize Terraform and download providers terraform apply

5. 如果测试通过 - 使用替换方式重新部署:```bash
terraform apply -replace="digitalocean_droplet.honeypot" 
  1. 清理 - 完成后销毁基础设施:```bash terraform destroy
### 手动部署(旧版)

1. 使用上述硬件要求及您的 SSH 密钥创建一个 DigitalOcean  droplet。

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/terraform.tfstate。该文件包含敏感的输出值(droplet IP、Grafana 密码、SSH 密钥指纹),绝不能提交到版本库。.gitignore 已覆盖 *.tfstate 和 *.tfstate.*。

本地状态的风险:

  • 如果机器丢失或文件被删除,状态将丢失
  • 无法在团队成员之间共享
  • 没有锁定机制——两个并发的 apply 运行可能会损坏该文件

对于个人实验环境之外的任何场景,请切换到远程后端。terraform/backend.tf 包含一个已注释掉的 DigitalOcean Spaces 配置(兼容 S3)。

要启用远程后端:

  1. 在你的 DigitalOcean 账户中创建一个 Spaces 存储桶
  2. 在 API > Spaces Keys 下生成一个 Spaces 访问密钥
  3. 将密钥导出为环境变量(不要将它们放入 terraform.tfvars): ```bash export AWS_ACCESS_KEY_ID= export AWS_SECRET_ACCESS_KEY=
  4. 在 terraform/backend.tf 中取消注释 backend "s3" 块,并填入你的存储桶名称和区域端点。
  5. 运行 terraform init -migrate-state 将现有的本地状态迁移到 Spaces。

CI/CD 流水线

.gitlab-ci.yml 在每次推送时于 validate 阶段运行四个作业,并在 metrics 阶段运行一个手动作业:

作业工具用途
terraform:fmthashicorp/terraform:1.8格式检查:如果有任何文件需要 terraform fmt,则失败
terraform:validatehashicorp/terraform:1.8在不连接 DigitalOcean 的情况下验证配置有效性
checkov:scanbridgecrew/checkov:latest检查 Terraform 代码中的 IaC 错误配置
validate-metrics-schemapython:3.12-slim验证 metrics/runtime-metrics.schema.json 格式正确;如果存在已提交的 metrics/runtime-metrics.json,则根据该 schema 对其进行验证
export-metrics(手动)python:3.12-slim参见下方的运行时指标

注意:terraform:fmt 和 terraform:validate 在失败时会阻塞流水线。checkov:scan 被设置为 allow_failure: true,因为某些发现是有意做出的权衡。请使用内联 # checkov:skip=CKXXX 注释来抑制特定的可接受发现,而不是完全禁用该作业。

已知可接受的风险

CKV_DIO_4(“确保防火墙入站规则未完全开放”)会针对整个 digitalocean_firewall 资源触发一次。它通过在 terraform/main.tf 中资源块内放置的单条 # checkov:skip=CKV_DIO_4: 注释被抑制。下表记录了每个开放端口为何是有意为之。

下载工具