add the main file structure requirements
هذا الالتزام موجود في:
357
q5-ransomware-response/backup-recovery-strategy.md
Normal file
357
q5-ransomware-response/backup-recovery-strategy.md
Normal file
@@ -0,0 +1,357 @@
|
||||
# استراتيجية النسخ الاحتياطي والاستعادة - Ghaymah Backup & Recovery
|
||||
## مع RPO/RTO وقاعدة 3-2-1
|
||||
|
||||
---
|
||||
|
||||
## 1. فهم RPO و RTO
|
||||
|
||||
### تعريفات أساسية
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────┐
|
||||
│ │
|
||||
│ آخر نسخة الحادثة استعادة الخدمة │
|
||||
│ احتياطية ↓ ↓ │
|
||||
│ ↓ ↓ ↓ │
|
||||
│ ─────●───────────────●────────────────────●─────────────→ الوقت │
|
||||
│ │ │ │ │
|
||||
│ │←──── RPO ────→│←────── RTO ───────→│ │
|
||||
│ │ │ │ │
|
||||
│ البيانات التي وقت وقت العودة │
|
||||
│ قد تُفقد الحادثة للعمل │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
| المصطلح | التعريف | مثال |
|
||||
|---------|---------|------|
|
||||
| **RPO** (Recovery Point Objective) | أقصى كمية بيانات يمكن خسارتها | RPO = 1 ساعة → نسخ احتياطي كل ساعة |
|
||||
| **RTO** (Recovery Time Objective) | أقصى وقت للعودة للعمل | RTO = 4 ساعات → يجب استعادة الخدمة خلال 4 ساعات |
|
||||
|
||||
---
|
||||
|
||||
## 2. قاعدة 3-2-1 للنسخ الاحتياطي
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────┐
|
||||
│ قاعدة 3-2-1 │
|
||||
├─────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ 3️⃣ ثلاث نسخ من البيانات │
|
||||
│ ├── النسخة الأصلية (Production) │
|
||||
│ ├── النسخة الاحتياطية الأولى (Local Backup) │
|
||||
│ └── النسخة الاحتياطية الثانية (Remote Backup) │
|
||||
│ │
|
||||
│ 2️⃣ نوعان مختلفان من وسائط التخزين │
|
||||
│ ├── Block Storage (SSD) │
|
||||
│ └── Object Storage (S3-compatible) │
|
||||
│ │
|
||||
│ 1️⃣ نسخة واحدة على الأقل خارج الموقع (Offsite) │
|
||||
│ └── منطقة جغرافية مختلفة أو مزود سحابي آخر │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. تطبيق الاستراتيجية على غيمة
|
||||
|
||||
### البنية المقترحة
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────┐
|
||||
│ غيمة Cloud │
|
||||
├─────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ ┌─────────────────┐ │
|
||||
│ │ Production │ ← النسخة الأصلية (1) │
|
||||
│ │ Block Storage │ │
|
||||
│ │ (me-riyadh-1) │ │
|
||||
│ └────────┬────────┘ │
|
||||
│ │ │
|
||||
│ │ نسخ كل ساعة │
|
||||
│ ▼ │
|
||||
│ ┌─────────────────┐ │
|
||||
│ │ Local Backup │ ← النسخة الاحتياطية (2) - وسيط مختلف │
|
||||
│ │ Object Storage │ │
|
||||
│ │ (me-riyadh-1) │ │
|
||||
│ └────────┬────────┘ │
|
||||
│ │ │
|
||||
│ │ نسخ يومي │
|
||||
│ ▼ │
|
||||
│ ┌─────────────────┐ │
|
||||
│ │ Offsite Backup │ ← النسخة الخارجية (3) - موقع مختلف │
|
||||
│ │ Object Storage │ │
|
||||
│ │ (me-jeddah-1) │ │
|
||||
│ └─────────────────┘ │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### تكوين النسخ الاحتياطي
|
||||
|
||||
```yaml
|
||||
# backup-config.yaml
|
||||
backup_strategy:
|
||||
name: "3-2-1 Backup Strategy"
|
||||
|
||||
# النسخة الأصلية
|
||||
production:
|
||||
type: block-storage
|
||||
location: me-riyadh-1
|
||||
volume: prod-data
|
||||
|
||||
# النسخة الاحتياطية المحلية
|
||||
local_backup:
|
||||
type: object-storage
|
||||
location: me-riyadh-1
|
||||
bucket: backups-local
|
||||
schedule:
|
||||
frequency: hourly
|
||||
retention: 72 # 72 ساعة = 3 أيام
|
||||
encryption: AES-256
|
||||
|
||||
# النسخة الخارجية
|
||||
offsite_backup:
|
||||
type: object-storage
|
||||
location: me-jeddah-1 # منطقة مختلفة
|
||||
bucket: backups-offsite
|
||||
schedule:
|
||||
frequency: daily
|
||||
time: "02:00"
|
||||
retention: 30 # 30 يوم
|
||||
encryption: AES-256
|
||||
|
||||
# أهداف الاستعادة
|
||||
objectives:
|
||||
rpo: 1h # أقصى خسارة = ساعة واحدة
|
||||
rto: 4h # أقصى وقت استعادة = 4 ساعات
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. تنفيذ النسخ الاحتياطي على غيمة
|
||||
|
||||
### أ. إنشاء Buckets للنسخ الاحتياطي
|
||||
|
||||
```bash
|
||||
# إنشاء bucket محلي
|
||||
ghaymah storage bucket create backups-local \
|
||||
--region me-riyadh-1 \
|
||||
--encryption AES-256 \
|
||||
--versioning enabled
|
||||
|
||||
# إنشاء bucket خارجي
|
||||
ghaymah storage bucket create backups-offsite \
|
||||
--region me-jeddah-1 \
|
||||
--encryption AES-256 \
|
||||
--versioning enabled
|
||||
```
|
||||
|
||||
### ب. إعداد جدول النسخ الاحتياطي
|
||||
|
||||
```bash
|
||||
# نسخ احتياطي كل ساعة (محلي)
|
||||
ghaymah backup schedule create \
|
||||
--name hourly-local \
|
||||
--source prod-data \
|
||||
--destination backups-local \
|
||||
--frequency hourly \
|
||||
--retention 72h
|
||||
|
||||
# نسخ احتياطي يومي (خارجي)
|
||||
ghaymah backup schedule create \
|
||||
--name daily-offsite \
|
||||
--source prod-data \
|
||||
--destination backups-offsite \
|
||||
--frequency daily \
|
||||
--time "02:00" \
|
||||
--retention 30d
|
||||
```
|
||||
|
||||
### ج. سكربت النسخ الاحتياطي
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# backup-script.sh - سكربت النسخ الاحتياطي التلقائي
|
||||
|
||||
set -e
|
||||
|
||||
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
|
||||
SOURCE_VOLUME="prod-data"
|
||||
LOCAL_BUCKET="backups-local"
|
||||
OFFSITE_BUCKET="backups-offsite"
|
||||
|
||||
echo "[$TIMESTAMP] بدء النسخ الاحتياطي..."
|
||||
|
||||
# 1. إنشاء snapshot من Block Storage
|
||||
echo "إنشاء snapshot..."
|
||||
SNAPSHOT_ID=$(ghaymah storage snapshot create \
|
||||
--volume $SOURCE_VOLUME \
|
||||
--name "backup-$TIMESTAMP" \
|
||||
--output json | jq -r '.id')
|
||||
|
||||
echo "تم إنشاء snapshot: $SNAPSHOT_ID"
|
||||
|
||||
# 2. نسخ إلى Object Storage المحلي
|
||||
echo "نسخ إلى التخزين المحلي..."
|
||||
ghaymah storage copy \
|
||||
--source "snapshot:$SNAPSHOT_ID" \
|
||||
--destination "s3://$LOCAL_BUCKET/backup-$TIMESTAMP.tar.gz" \
|
||||
--compress \
|
||||
--encrypt
|
||||
|
||||
# 3. نسخ إلى Object Storage الخارجي (يومياً فقط)
|
||||
HOUR=$(date +%H)
|
||||
if [ "$HOUR" == "02" ]; then
|
||||
echo "نسخ إلى التخزين الخارجي..."
|
||||
ghaymah storage copy \
|
||||
--source "s3://$LOCAL_BUCKET/backup-$TIMESTAMP.tar.gz" \
|
||||
--destination "s3://$OFFSITE_BUCKET/backup-$TIMESTAMP.tar.gz"
|
||||
fi
|
||||
|
||||
# 4. تنظيف النسخ القديمة
|
||||
echo "تنظيف النسخ القديمة..."
|
||||
ghaymah backup cleanup \
|
||||
--bucket $LOCAL_BUCKET \
|
||||
--older-than 72h
|
||||
|
||||
ghaymah backup cleanup \
|
||||
--bucket $OFFSITE_BUCKET \
|
||||
--older-than 30d
|
||||
|
||||
# 5. التحقق من النسخة
|
||||
echo "التحقق من سلامة النسخة..."
|
||||
ghaymah backup verify \
|
||||
--backup "s3://$LOCAL_BUCKET/backup-$TIMESTAMP.tar.gz"
|
||||
|
||||
echo "[$TIMESTAMP] اكتمل النسخ الاحتياطي بنجاح ✓"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. إجراءات الاستعادة
|
||||
|
||||
### سيناريو: استعادة بعد Ransomware
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# restore-script.sh - سكربت الاستعادة
|
||||
|
||||
echo "🔄 بدء عملية الاستعادة..."
|
||||
|
||||
# 1. تحديد آخر نسخة سليمة
|
||||
echo "البحث عن آخر نسخة سليمة..."
|
||||
LATEST_BACKUP=$(ghaymah backup list \
|
||||
--bucket backups-local \
|
||||
--status verified \
|
||||
--limit 1 \
|
||||
--output json | jq -r '.[0].name')
|
||||
|
||||
echo "آخر نسخة سليمة: $LATEST_BACKUP"
|
||||
|
||||
# 2. إنشاء volume جديد للاستعادة
|
||||
echo "إنشاء volume جديد..."
|
||||
ghaymah storage volume create \
|
||||
--name restored-data \
|
||||
--size 100GB \
|
||||
--type ssd
|
||||
|
||||
# 3. استعادة البيانات
|
||||
echo "استعادة البيانات..."
|
||||
ghaymah backup restore \
|
||||
--source "s3://backups-local/$LATEST_BACKUP" \
|
||||
--destination restored-data \
|
||||
--verify
|
||||
|
||||
# 4. التحقق من البيانات
|
||||
echo "التحقق من البيانات المستعادة..."
|
||||
ghaymah storage verify --volume restored-data
|
||||
|
||||
# 5. تبديل الـ volumes
|
||||
echo "تبديل إلى البيانات المستعادة..."
|
||||
ghaymah storage swap \
|
||||
--old prod-data \
|
||||
--new restored-data
|
||||
|
||||
echo "✅ اكتملت الاستعادة بنجاح!"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. جدول RPO/RTO حسب نوع البيانات
|
||||
|
||||
| نوع البيانات | RPO | RTO | تكرار النسخ | الاحتفاظ |
|
||||
|--------------|-----|-----|-------------|----------|
|
||||
| **قواعد البيانات** | 15 دقيقة | 1 ساعة | كل 15 دقيقة | 7 أيام |
|
||||
| **ملفات التطبيق** | 1 ساعة | 2 ساعة | كل ساعة | 30 يوم |
|
||||
| **سجلات النظام** | 4 ساعات | 8 ساعات | كل 4 ساعات | 90 يوم |
|
||||
| **الأرشيف** | 24 ساعة | 24 ساعة | يومي | سنة |
|
||||
|
||||
---
|
||||
|
||||
## 7. اختبار الاستعادة الدوري
|
||||
|
||||
### جدول الاختبار
|
||||
|
||||
| الاختبار | التكرار | المسؤول |
|
||||
|----------|---------|---------|
|
||||
| استعادة ملف واحد | أسبوعي | DevOps |
|
||||
| استعادة قاعدة بيانات | شهري | DBA |
|
||||
| استعادة كاملة (DR) | ربع سنوي | فريق الأمن |
|
||||
|
||||
### سكربت اختبار الاستعادة
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# test-restore.sh - اختبار الاستعادة
|
||||
|
||||
echo "🧪 بدء اختبار الاستعادة..."
|
||||
|
||||
# إنشاء بيئة اختبار
|
||||
ghaymah project create restore-test --temporary
|
||||
|
||||
# استعادة من آخر نسخة
|
||||
ghaymah backup restore \
|
||||
--source backups-local/latest \
|
||||
--destination restore-test \
|
||||
--verify
|
||||
|
||||
# اختبار البيانات
|
||||
ghaymah test run \
|
||||
--project restore-test \
|
||||
--suite data-integrity
|
||||
|
||||
# تنظيف
|
||||
ghaymah project delete restore-test --force
|
||||
|
||||
echo "✅ اختبار الاستعادة ناجح!"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 8. ملخص الاستراتيجية
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────┐
|
||||
│ ملخص استراتيجية 3-2-1 │
|
||||
├─────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ 📦 3 نسخ: │
|
||||
│ • Production (Block Storage - Riyadh) │
|
||||
│ • Local Backup (Object Storage - Riyadh) │
|
||||
│ • Offsite Backup (Object Storage - Jeddah) │
|
||||
│ │
|
||||
│ 💾 2 وسيط: │
|
||||
│ • Block Storage (SSD) │
|
||||
│ • Object Storage (S3) │
|
||||
│ │
|
||||
│ 🌍 1 خارج الموقع: │
|
||||
│ • منطقة جدة (me-jeddah-1) │
|
||||
│ │
|
||||
│ ⏱️ الأهداف: │
|
||||
│ • RPO: 1 ساعة (أقصى خسارة بيانات) │
|
||||
│ • RTO: 4 ساعات (أقصى وقت توقف) │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
المرجع في مشكلة جديدة
حظر مستخدم