
مصيدة SSH/Telnet متوسطة التفاعل مبنية باستخدام Cowrie, Loki, Promtail, Grafana - مزودة على DigitalOcean عبر Terraform مع خط أنابيب تحقق GitLab CI.
حزمة مصيدة SSH/Telnet منشورة على خادم DigitalOcean droplet باستخدام Terraform. يتم التقاط الهجمات بواسطة 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
## متطلبات العتاد
> ملاحظة: تستند هذه المتطلبات إلى خطة DigitalOcean Basic Droplet اعتبارًا من مايو 2026 وهي الحد الأدنى من المتطلبات لتشغيل المشروع.
- المزوّد: DigitalOcean
- الخطة: Basic Droplet - 1 Intel vCPU
- الذاكرة العشوائية: 1 GB (+2 GB swap)
- التخزين: 35 GB NVMe SSD
- نظام التشغيل: Ubuntu 24.04 LTS
> **هامش الذاكرة بعد ترقيات إصدارات الحاويات:** يثبّت `docker-compose.yml` إصدارات أحدث من صور Grafana (12.0.0) وLoki وPromtail (3.6.13) مقارنةً بحجم هذا الـ droplet الذي ضُبطت الموارد في الأصل بناءً عليه. لم تتغير قيم `mem_limit`/`memswap_limit` لكل خدمة — راقب `docker stats` بعد أول عملية نشر، وارفع خطة الـ droplet (أو قلّل `retention_period` الخاص بـ Loki / ذاكرة التخزين المؤقت لـ Grafana) إذا كان أي حاوية تقترب باستمرار من حدّها.
## التثبيت والإعداد
>ملاحظة: بعد التثبيت، يُوصى بفتح نافذة طرفية جديدة والتحقق من إمكانية الاتصال عبر SSH على `ADMIN_SSH_PORT` (الافتراضي: 2022) قبل إغلاق جلستك الأصلية.
### النشر عبر Terraform (موصى به)
1. أنشئ رمز DigitalOcean API بصلاحيات القراءة/الكتابة:
- سجّل الدخول إلى DigitalOcean وانتقل إلى Account > API > Tokens > Generate New Token.
- سمِّ الرمز الخاص بك (مثل "Cowrie Honeypot") واختر صلاحيات "Full Access".
- انقر على "Generate Token" وانسخ قيمة الرمز إلى مكان آمن (لن تتمكن من رؤيته مرة أخرى).
2. أنشئ زوج مفاتيح SSH على جهازك المحلي وانسخ مسار المفتاح العام.
3. انتقل إلى دليل `terraform` ثم انسخ ملف المتغيرات وحرّره:
> ملاحظة: يجب تكوين `do_token` و`ssh_public_key_path` و`grafana_admin_password` على الأقل في `terraform.tfvars` قبل التطبيق.```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. أنشئ Droplet على DigitalOcean بالمواصفات المذكورة أعلاه ومفتاح SSH الخاص بك.
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على جهازك المحلي. يحتوي هذا الملف على قيم مخرجات حساسة (عنوان IP الخاص بـ droplet، كلمة مرور Grafana، بصمة مفتاح SSH) ويجب عدم إيداعه أبدًا. يغطي.gitignoreكلاً من*.tfstateو*.tfstate.*.
مخاطر الحالة المحلية:
apply متزامنين إفساد الملفلأي شيء يتجاوز مختبرًا شخصيًا، انتقل إلى خلفية بعيدة (remote backend). يحتوي terraform/backend.tf على إعداد DigitalOcean Spaces معطّل (متوافق مع S3).
لتفعيل الخلفية البعيدة: