Skip to content

تصميم البنية

يعتمد SirrChat بنية معيارية لتوفير حل خادم بريد إلكتروني مرن وقابل للتوسع.

البنية العامة

┌─────────────────────────────────────────────┐
│           طبقة العميل                       │
│  (Thunderbird، Outlook، تطبيقات الهاتف)     │
└──────────────┬──────────────────────────────┘


┌─────────────────────────────────────────────┐
│           طبقة البروتوكول                   │
│  ┌─────────┐  ┌─────────┐  ┌─────────┐    │
│  │  SMTP   │  │  IMAP   │  │Submission│    │
│  └─────────┘  └─────────┘  └─────────┘    │
└──────────────┬──────────────────────────────┘


┌─────────────────────────────────────────────┐
│           طبقة المصادقة                     │
│  ┌──────────┐  ┌─────┐  ┌─────┐  ┌──────┐ │
│  │بلوكشين  │  │LDAP │  │ PAM │  │مخصص  │ │
│  └──────────┘  └─────┘  └─────┘  └──────┘ │
└──────────────┬──────────────────────────────┘


┌─────────────────────────────────────────────┐
│           طبقة المعالجة                     │
│  ┌─────────┐  ┌──────┐  ┌─────────┐       │
│  │ التصفية │  │تعديل │  │  التحقق │       │
│  │  (Sieve)│  │(DKIM)│  │(SPF/إلخ)│       │
│  └─────────┘  └──────┘  └─────────┘       │
└──────────────┬──────────────────────────────┘


┌─────────────────────────────────────────────┐
│           طبقة التخزين                      │
│  ┌──────────┐  ┌────────────┐             │
│  │قاعدة بيانات│  │  التخزين  │            │
│  │(PG/MySQL)│  │(محلي/S3)   │            │
│  └──────────┘  └────────────┘             │
└─────────────────────────────────────────────┘

المكونات الأساسية

معالجات البروتوكول

خادم SMTP

  • استقبال وإرسال رسائل البريد الإلكتروني
  • دعم تشفير STARTTLS
  • تطبيق تحديد المعدل وإجراءات مكافحة الرسائل غير المرغوب فيها

خادم IMAP

  • تخزين واسترجاع البريد الإلكتروني
  • إدارة المجلدات
  • وظيفة البحث في البريد الإلكتروني
  • دعم إشعارات الدفع IDLE

خادم Submission

  • إرسال البريد الإلكتروني (المنفذ 587)
  • المصادقة الإلزامية
  • توقيع DKIM التلقائي

وحدة المصادقة

مصادقة البلوكشين

go
type BlockchainAuth struct {
    networks map[string]RPCClient
    cache    *AuthCache
}

func (b *BlockchainAuth) Verify(address, signature, message string) bool {
    // 1. استرداد عنوان الموقع
    // 2. التحقق من تطابق العنوان
    // 3. التحقق من صحة الطابع الزمني
    return verified
}

مصادقة LDAP

  • دعم Active Directory
  • تعيين الوحدة التنظيمية (OU)
  • مزامنة السمات

مصادقة PAM

  • تكامل حساب النظام
  • دعم وحدات PAM المختلفة

خط أنابيب معالجة الرسائل

البريد الوارد → فحص مكافحة الرسائل غير المرغوب فيها → فحص الفيروسات → قواعد التصفية

التخزين في DB ← توقيع DKIM ← تعديل المحتوى ← قواعد المستخدم

نظام التخزين

طبقة قاعدة البيانات

  • بيانات المستخدم: معلومات الحساب والحصص والإعدادات
  • بيانات وصفية للبريد الإلكتروني: المرسل والمستلم والموضوع والطابع الزمني
  • الفهارس: بحث واسترجاع سريع

تخزين الملفات

  • تنسيق Maildir: ملف واحد لكل بريد إلكتروني
  • الضغط: ضغط تلقائي لرسائل البريد الإلكتروني القديمة
  • متوافق مع S3: قابل للتوسع إلى التخزين السحابي

تدفق البيانات

تدفق إرسال البريد الإلكتروني

1. يتصل العميل (SMTP/Submission)

2. التحقق من المصادقة

3. استقبال محتوى البريد الإلكتروني

4. التحقق من المستلمين

5. تطبيق قواعد التصفية

6. توقيع DKIM

7. معالجة قائمة الانتظار

8. الإرسال إلى الخادم المستهدف

تدفق استقبال البريد الإلكتروني

1. يتصل الخادم الخارجي

2. فحوصات SPF/DKIM/DMARC

3. فحوصات مكافحة الرسائل غير المرغوب فيها

4. تطبيق قواعد المستخدم (Sieve)

5. التخزين في قاعدة البيانات

6. حفظ ملف البريد الإلكتروني

7. إعلام العملاء (IMAP IDLE)

نظام الوحدات

الوحدات الأساسية

  • auth: موفرو المصادقة
  • storage: خلفيات التخزين
  • filter: تصفية البريد الإلكتروني
  • modify: تعديل المحتوى
  • check: فحوصات التحقق

نقاط التوسع

go
type Module interface {
    Name() string
    Init(config Config) error
    Process(ctx Context, msg *Message) error
}

تحسين الأداء

نموذج التزامن

  • تجميعات Goroutine: معالجة الاتصالات المتزامنة
  • إدخال/إخراج غير متزامن: عمليات الشبكة غير المحظورة
  • المعالجة بالدفعات: عمليات قاعدة البيانات بالدفعات

استراتيجية التخزين المؤقت

  • تخزين المصادقة المؤقت: تقليل استدعاءات RPC للبلوكشين
  • تخزين بيانات المستخدم المؤقت: البيانات المستخدمة بشكل متكرر في ذاكرة التخزين المؤقت
  • تخزين DNS المؤقت: تقليل استعلامات DNS

تجميع الاتصالات

  • تجميع اتصال قاعدة البيانات: إعادة استخدام اتصالات قاعدة البيانات
  • تجميع اتصال RPC: إعادة استخدام اتصال عقدة البلوكشين

تصميم الأمان

الحماية متعددة الطبقات

  1. طبقة الشبكة: تشفير TLS
  2. طبقة المصادقة: دعم المصادقة متعددة العوامل
  3. طبقة التطبيق: التحقق من صحة الإدخال، الحماية من حقن SQL
  4. طبقة البيانات: التشفير في حالة السكون

تحديد المعدل

  • معدل الاتصال: منع إساءة استخدام الاتصال
  • معدل الإرسال: منع الرسائل غير المرغوب فيها
  • محاولات المصادقة: منع هجمات القوة الغاشمة

قابلية التوسع

التوسع الأفقي

           ┌─────────────┐
           │موازن التحميل │
           └──────┬──────┘

        ┌─────────┼─────────┐
        ▼         ▼         ▼
    ┌──────┐  ┌──────┐  ┌──────┐
    │ عقدة │  │ عقدة │  │ عقدة │
    │  1   │  │  2   │  │  3   │
    └───┬──┘  └───┬──┘  └───┬──┘
        │         │         │
        └─────────┼─────────┘

         ┌────────────────┐
         │  تخزين مشترك   │
         │(قاعدة بيانات/S3)│
         └────────────────┘

فصل المكونات

  • النشر المستقل: يمكن توسيع SMTP و IMAP بشكل منفصل
  • التخزين المشترك: تشارك مثيلات متعددة البيانات
  • موازنة التحميل: توزيع ذكي لحركة المرور

المراقبة والتسجيل

جمع المقاييس

  • مقاييس النظام: CPU والذاكرة والقرص
  • مقاييس التطبيق: إنتاجية البريد الإلكتروني والكمون
  • مقاييس الأعمال: نشاط المستخدم واستخدام التخزين

نظام التسجيل

سجلات التطبيق → إخراج منظم → تجميع السجلات → منصة التحليلات
                                        (ELK/Loki)

التوفر العالي

التبديل الاحتياطي

  • النسخ المتماثل الرئيسي-الثانوي: تكوين رئيسي-ثانوي لقاعدة البيانات
  • التبديل التلقائي: فحوصات الصحة والتبديل الاحتياطي التلقائي
  • نسخ احتياطي للبيانات: نسخ احتياطي منتظم واختبار الاسترداد

فحوصات الصحة

go
type HealthCheck struct {
    Database  bool
    SMTP      bool
    IMAP      bool
    Storage   bool
}

للحصول على مزيد من التفاصيل التقنية:

Released under the GPL 3.0 License.