Skip to content

تصميم البنية

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

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

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


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


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


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


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

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

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

خادم 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 المختلفة

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

استقبال البريد → فحص مكافحة البريد المزعج → فحص الفيروسات → قواعد التصفية

التخزين في قاعدة البيانات ← توقيع 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 بشكل منفصل
  • التخزين المشترك: مثيلات متعددة تشارك البيانات
  • موازنة الحمل: توزيع ذكي لحركة المرور

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

جمع المقاييس

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

نظام السجلات

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

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

تجاوز الفشل

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

فحوصات الصحة

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

لمزيد من التفاصيل التقنية:

Released under the GPL 3.0 License.