Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
Cowrie and Grafana Honeypot using Terraform on DigitalOcean — 중간 상호작용 SSH/Telnet 허니팟 - Cowrie, Loki, Promtail, Grafana로 구축, Terraform을 통해 DigitalOcean에 프로비저닝, GitLab CI 검증 파이프라인 포함 | Kitploit
도구/GitLabGitLab/oseguera12/cowrie-honeypot-digitalocean
Cloud Infrastructure SecurityNetwork SecurityDevSecOpsThreat IntelligenceLog Analysis
GitLaboseguera12/cowrie-honeypot-digitalocean

Cowrie and Grafana Honeypot using Terraform on DigitalOcean

중간 상호작용 SSH/Telnet 허니팟 - Cowrie, Loki, Promtail, Grafana로 구축, Terraform을 통해 DigitalOcean에 프로비저닝, GitLab CI 검증 파이프라인 포함

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
저장소 보기
웹사이트
13426일 전아직 검토되지 않음

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
- 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
  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. 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/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.8DigitalOcean에 접속하지 않고 구성 유효성 검사
checkov:scanbridgecrew/checkov:latestTerraform 코드의 IaC 잘못된 구성
validate-metrics-schemapython:3.12-slimmetrics/runtime-metrics.schema.json이 올바른 형식인지 확인하고, 커밋된 metrics/runtime-metrics.json이 있으면 이에 대해 검증
export-metrics (수동)python:3.12-slim아래 런타임 메트릭 참조
도구 다운로드