
Cowrie、Loki、Promtail、Grafanaを使用して構築された中程度の対話型SSH/Telnetハニーポット - GitLab CI検証パイプラインを使用してTerraform経由でDigitalOcean上にプロビジョニング。
Terraform を使用して DigitalOcean のドロップレット上にデプロイされた SSH/Telnet ハニーポットスタック。攻撃は 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
## ハードウェア要件
> 注: これらの要件は2026年5月時点のDigitalOcean Basic Dropletプランに基づいており、プロジェクトを実行するための最小要件です。
- プロバイダー: DigitalOcean
- プラン: Basic Droplet - 1 Intel vCPU
- RAM: 1 GB (+2 GB スワップ)
- ストレージ: 35 GB NVMe SSD
- OS: Ubuntu 24.04 LTS
> **コンテナバージョン更新後のメモリ余裕について:** `docker-compose.yml` は、このドロップレットサイズが当初調整されていたものよりも新しい Grafana (12.0.0)、Loki、Promtail (3.6.13) イメージを固定しています。サービスごとの `mem_limit`/`memswap_limit` の値は変更されていません — 初回デプロイ後に `docker stats` を監視し、いずれかのコンテナが常に制限に近い場合は、ドロップレットプランを引き上げる(または 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
注:Terraform はローカルマシンにインストールされている必要があります。手順については Terraform インストールガイド をご覧ください。```bash terraform init # Initialize Terraform and download providers terraform apply
5. テストする場合 - 置き換えて再デプロイする:```bash
terraform apply -replace="digitalocean_droplet.honeypot"
### 手動デプロイ (レガシー)
1. 上記のハードウェア要件とSSHキーを使用してDigitalOceanドロップレットを作成します。
2. ドロップレットにSSH接続するか、DigitalOceanのWebコンソールを使用して、以下のコマンドを実行します:```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に書き込みます。このファイルには機密性の高い出力値(Droplet 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=
terraform/backend.tf の backend "s3" ブロックをコメント解除し、バケット名とリージョンエンドポイントを入力します。terraform init -migrate-state を実行して、既存のローカル state を Spaces に移行します。.gitlab-ci.yml は、プッシュごとに validate ステージで 4 つのジョブを実行し、さらに metrics ステージで 1 つの手動ジョブを実行します。