الأمن والثقة
يعمل ServerGuard وفق المبادئ التي تكسب ثقة مدراء الأنظمة: الإنسان في الحلقة لأيّ إجراء مدمّر، سجلّ تدقيق لا يقبل التعديل، مفاتيح SSH مُشفَّرة، ووصول بأقلّ صلاحية محدَّد لكل خادم. وما يلي هو التفصيل التقني وراء كلٍّ منها.
يعمل SGuard على معالجة الحوادث فقط. لا يصل إلى محتوى موقع العميل أو قواعد بياناته خارج سياق الحادثة النشطة.
المبدأ: الإنسان في الحلقة لكل ما هو خطر
كل إجراء يستطيع ServerGuard تشغيله على خادمك مُصنَّفٌ بالمخاطر قبل أن يُسمَح بتنفيذه. التصنيف ثابت؛ لا يُقرّر ServerGuard صلاحياتِه بنفسه.
| مستوى المخاطرة | أمثلة | السلوك |
|---|---|---|
| آمن | تشخيصات قراءةٍ فقط: `journalctl`، `systemctl status`، `ps`، `df`، جلب السجلّات، فحص mailq. | تُنفَّذ ذاتيًا. تُسجَّل بمخرجاتها كاملة. |
| متوسّط | إعادة تشغيل خدمات، تفريغ كاش، تصريف طوابير، تدوير سجلّات. | تُنفَّذ ذاتيًا وفق السياسة التي تُحدّدها لكل خادم. تُسجَّل بمخرجاتها كاملة. |
| خطر | الحذف، إعادة تثبيت الحزم، تدوير بيانات الاعتماد، تغييرات قواعد جدار الحماية التي تحجب حركة المرور. | لا تُنفَّذ ذاتيًا أبدًا. تُحال إلى Telegram أو لوحة الويب لأخذ موافقة صريحة. صلاحية الرمز تنتهي خلال 30 دقيقة. |
استشارة الأمان عند إضافة الخادم
قبل أن يُنفّذ ServerGuard أي معالجة، يقترح مسار الإضافة الصلاحياتِ التي سيحملها الوكيل على خادمك بالضبط، وأنت تُقرّر إن كنت ستمنحه إياها.
- نتّصل بصلاحية قراءة فقط، نفحص الخادم، ونقترح مجموعة الإجراءات القابلة للأتمتة الموصى بها. لكل حالة استخدام مفتاح تبديل تستطيع به إيقاف ما لا تريده ذاتيًا، حتى للإجراءات الآمنة.
- نُولّد قواعد sudoers / wheel المطلوبة بالضبط لمنح المستخدم `sguard` تلك الإجراءات فقط، لا أكثر. تُعرَض القواعد المقترحة كاملةً قبل أن توافق.
- نُولّد القيود على مستوى root التي تُقيّد المستخدم `sguard`: لا صدفة تفاعلية خارج قائمة الأوامر المعتمدة، SCP محدود النطاق، إعدادات sshd_config مشدّدة لمستخدم الوكيل، وعدم قابلية تعديل سجل التدقيق.
- تُراجع، وتُعدّل، وتقبل. ثم تُصدر اللوحة سكربت bash موقَّعًا واحدًا. أنت، بوصفك root لدى العميل، تُمرّره إلى root وتُطبّقه. نحن لا نُجري تصعيد صلاحيات أبدًا بأنفسنا.
- بعد تطبيقك للسكربت، يُعيد ServerGuard تشغيل التشخيص للتحقّق من النطاق: الوكيل يستطيع أن يفعل ما وافقت عليه بالضبط، لا أكثر. تُكتَب نتيجة التحقّق في سجل التدقيق.
كيف نتعامل مع مفاتيح SSH
نُولّد زوج مفاتيح SSH واحدًا لكل خادم تُسجّله. المفتاح الخاص لا يُغادر بُنيتنا التحتية بنصٍّ صريح، ولا يظهر في استجابات الـ API، ولا في السجلّات، ولا في رسائل الأخطاء.
- مُشفَّر في حالة السكون بـ AES-256-GCM. مفتاح التشفير مُشتقّ لكل منظّمة على حدة، فلا يُفضي اختراقُ قاعدة البيانات إلى نصٍّ صريح موحَّد.
- مُستبعَد من استجابات الـ API ببنية المخطّط. مخطّط `ServerRead` لا يحتوي حقل المفتاح المُشفَّر أصلًا، وليس أنه يُفرَّغ بعد التكوين.
- يُفكّ تشفيره في ذاكرة العملية فقط، وفقط طوال جلسة SSH واحدة، ثم يُسقَط حين تُغلَق الاتصال.
- إخفاء الأسرار يُطبَّق على مستوى المصدر لكل أمر ولكل مخرجات قبل كتابتها في السجلّات أو في جدول التدقيق. ويُجري خطُّ structlog تمريرةَ إخفاءٍ ثانية بوصفها شبكة أمان.
- بصمة مفتاح المضيف بنمط TOFU (الثقة عند أول اتصال) عند الاتصال الأول. تُثبَّت البصمة؛ والاتصالات اللاحقة تفشل بإحكام (fail closed) إذا تغيّر مفتاح المضيف.
- التدوير: تستطيع استبدال زوج مفاتيح أي خادم من اللوحة في أي وقت.
ما الذي نُسجّله
كل إجراء ذي معنى في النظام يُدوَّن في جدول `audit_log` الذي يقبل الإلحاق فقط. يوجد مسارُ كتابةٍ واحد، ويُطبَّق إخفاءُ الأسرار داخله قبل تثبيت الصف.
- كل أمر SSH نُفِّذ، مع نص الأمر بعد إخفاء الأسرار، وحالة الخروج، والمدّة، وعَلَم `truncated` للمخرجات الطويلة.
- كل تشخيص من ServerGuard: النموذج، معرّف الطلب، عدد رموز الإدخال والإخراج، التكلفة، المدّة.
- كل موافقة وكل رفض، مع الفاعل، والقناة (Telegram أو ويب)، والطابع الزمني.
- كل تغيير حالة لخادم، أو حادثة، أو عضوية في منظّمة.
- الصفوف للإلحاق فقط. لا يُتيح المخطّط UPDATE ولا DELETE على هذا الجدول؛ أي أسرار تتسرّب في صفّ تدقيق تظل دائمة، ولهذا أيضًا تجري خطوة الإخفاء قبل الكتابة.
مدّة الاحتفاظ تتبع طبقة باقتك (Starter 30 يومًا، Pro 90 يومًا، Agency سنة واحدة). قد تتغيّر نوافذ الاحتفاظ مع نضوج المنتج، وستعكس الصفحة ما هو صحيح حينها.
ضوابط مسار الموافقة
- القنوات: Telegram ولوحة الويب في Pro، ويُضاف WhatsApp في Agency. توفّر القنوات بالضبط لكل طبقة يتبع صفحة الأسعار.
- الموافقة تتطلّب ردًا إيجابيًا صريحًا. لا يوجد وضع «وافِق افتراضيًا» ولا «وافِق إن لم يردّ أحد خلال N دقيقة».
- صلاحية رموز الموافقة تنتهي بعد 30 دقيقة من إصدارها. لا يمكن إعادة استخدام رمزٍ منتهٍ، ويجب طلب الإجراء من جديد.
- قائمة سماحٍ بعناوين IP الإدارية: العناوين التي تُعلّمها كإدارية لن يحجبها ServerGuard ذاتيًا مهما كانت أنماط الهجوم المرصودة. هذا هو مفتاح الإيقاف ضد أن يُقفلك المنتج خارج خادمك.
- نقاط استقبال الـ webhooks (Telegram، WhatsApp، استدعاءات الويب الخلفية) محدودةُ المعدّل، وتدعم قائمة سماحٍ اختيارية بعناوين المصدر.
عزل المستأجرين
ServerGuard متعدّد المستأجرين بالتصميم. منظّمات متعدّدة تتشارك بنيةً تحتيةً واحدة، والفصل بين البيانات مفروضٌ على طبقة الاستعلام، لا على طبقة التطبيق فقط.
- كل استعلام يُلامس بيانات مستأجر يُرشَّح بـ `organisation_id`. لا استثناءات، بما في ذلك نقاط النهاية الإدارية.
- طبقة الـ repositories هي المسار الوحيد إلى قاعدة البيانات، ولا تُصدر مُعالِجات المسارات استعلامات SQL خام.
- نقاط النهاية التي قد تُسرِّب مفاتيح لها اختبارات صريحة تفحص جسم الاستجابة بحثًا عن محتوى يُشبه المفاتيح. اختبار فاشل يحجب الدمج.
كيف نعمل
الإنسان في الحلقة لأيّ إجراء مدمّر. سجلّ تدقيق لا يقبل التعديل. مفاتيح SSH مُشفَّرة باشتقاق مفتاحٍ لكل منظّمة. وصول بأقلّ صلاحية محدَّد لكل خادم. لا نُدرّب نماذج الذكاء الاصطناعي على بيانات حوادث العملاء، ولا نبيع بيانات السجلّات أو نُشاركها مع أطرافٍ ثالثة.
المعالجون الفرعيون
نستخدم عددًا محدودًا من مزوّدي البنية التحتية والذكاء الاصطناعي المعتمدين. القائمة الكاملة متاحة عند الطلب.