
مصيدة SSH/Telnet متوسطة التفاعل مبنية باستخدام Cowrie, Loki, Promtail, Grafana - مزودة على DigitalOcean عبر Terraform مع خط أنابيب تحقق GitLab CI.
مجموعة مصائد SSH/Telnet منشورة على droplet من DigitalOcean باستخدام Terraform. يتم التقاط الهجمات بواسطة Cowrie، وتخزينها في Loki، وتصوّرها في Grafana مع خريطة عالمية حية لأصول الهجمات.
---```
honeypot/
├── cowrie/
│ └── etc/
│ ├── cowrie.cfg # Cowrie honeypot configuration
│ └── userdb.txt # Accepted and rejected fake credentials
├── 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
├── 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
├── 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
├── 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 جيجابايت (+2 جيجابايت مبادلة)
- التخزين: 35 جيجابايت NVMe SSD
- نظام التشغيل: Ubuntu 24.04 LTS
## التثبيت والإعداد
>ملاحظة: بعد التثبيت، يُوصى بفتح محطة طرفية جديدة والتأكد من قدرتك على SSH عبر `ADMIN_SSH_PORT` (الافتراضي: 2022) قبل إغلاق جلستك الأصلية.
### نشر Terraform (موصى به)
1. قم بإنشاء رمز API لـ DigitalOcean بأذونات قراءة/كتابة:
- سجل الدخول إلى 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. اتصل عبر 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.tfstateعلى جهازك المحلي. يحتوي هذا الملف على قيم إخراج حساسة (عنوان IP الخاص بالدروبلت، كلمة مرور Grafana، بصمة مفتاح SSH) ويجب ألا يتم تضمينه أبدًا في الالتزامات (commits). يغطي.gitignoreكلًا من*.tfstateو*.tfstate.*.
مخاطر الحالة المحلية:
apply متزامنين أن يفسدا الملفلأي شيء يتجاوز المختبر الشخصي، قم بالتبديل إلى خلفية (backend) عن بُعد. يحتوي terraform/backend.tf على تكوين DigitalOcean Spaces معلق (متوافق مع S3).
لتفعيل الخلفية البعيدة:
terraform.tfvars): ```bash
export AWS_ACCESS_KEY_ID=
export AWS_SECRET_ACCESS_KEY=
backend "s3" في terraform/backend.tf واملأ اسم الحاوية ونقطة نهاية المنطقة.terraform init -migrate-state لنقل الحالة المحلية الحالية إلى Spaces.يقوم ملف .gitlab-ci.yml بتشغيل ثلاث وظائف في كل دفعة في مرحلة validate واحدة:
| الوظيفة | الأداة | الغرض |
|---|---|---|
terraform:fmt | hashicorp/terraform:1.8 | التنسيق: يفشل إذا كان أي ملف يحتاج إلى terraform fmt |
terraform:validate | hashicorp/terraform:1.8 | التحقق من صحة التكوين دون الاتصال بـ DigitalOcean |
checkov:scan | bridgecrew/checkov:latest | أخطاء تكوين IaC في كود Terraform |