
Cowrie, Loki, Promtail, और Grafana के साथ निर्मित मध्यम-अंतःक्रिया SSH/Telnet हनीपॉट - Terraform के माध्यम से DigitalOcean पर स्थापित, GitLab CI सत्यापन पाइपलाइन के साथ।
Terraform का उपयोग करके DigitalOcean droplet पर तैनात एक SSH/Telnet honeypot स्टैक। हमलों को 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 तक की DigitalOcean Basic Droplet योजना पर आधारित हैं और परियोजना को चलाने के लिए न्यूनतम आवश्यकताएँ हैं।
- प्रदाता: DigitalOcean
- योजना: Basic Droplet - 1 Intel vCPU
- RAM: 1 GB (+2 GB swap)
- स्टोरेज: 35 GB NVMe SSD
- OS: Ubuntu 24.04 LTS
> **कंटेनर संस्करण बंप के बाद मेमोरी हेडरूम:** `docker-compose.yml` इस ड्रोplet आकार के लिए मूल रूप से ट्यून किए गए की तुलना में नए Grafana (12.0.0), Loki, और Promtail (3.6.13) इमेज पिन करता है। प्रति सेवा `mem_limit`/`memswap_limit` मान अपरिवर्तित हैं — पहले डिप्लॉय के बाद `docker stats` पर नज़र रखें, और यदि कोई कंटेनर लगातार अपनी सीमा के करीब है तो ड्रोplet योजना बढ़ाएँ (या Loki का `retention_period` / Grafana का कैश कम करें)।
## इंस्टॉलेशन और सेटअप
>नोट: इंस्टॉलेशन के बाद, अपने मूल सत्र को बंद करने से पहले एक नया टर्मिनल खोलने और यह सत्यापित करने की सिफारिश की जाती है कि आप अभी भी `ADMIN_SSH_PORT` (डिफ़ॉल्ट: 2022) पर SSH कर सकते हैं।
### Terraform डिप्लॉयमेंट (अनुशंसित)
1. read/write अनुमतियों के साथ एक 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 Installation Guide देखें।```bash terraform init # Initialize Terraform and download providers terraform apply
5. यदि परीक्षण - प्रतिस्थापन के साथ पुनः तैनात करें:```bash
terraform apply -replace="digitalocean_droplet.honeypot"
### मैनुअल परिनियोजन (लेगेसी)
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.tfstateमें state लिखता है। इस फ़ाइल में संवेदनशील output मान (droplet IP, Grafana पासवर्ड, SSH key fingerprint) होते हैं और इसे कभी भी commit नहीं किया जाना चाहिए।.gitignoreमें*.tfstateऔर*.tfstate.*शामिल हैं।
लोकल state के जोखिम:
apply रन फ़ाइल को खराब कर सकते हैंकिसी व्यक्तिगत लैब से आगे किसी भी चीज़ के लिए, remote backend पर स्विच करें। terraform/backend.tf में एक commented-out DigitalOcean Spaces कॉन्फ़िगरेशन (S3-संगत) शामिल है।
remote backend सक्षम करने के लिए: