Zero-Trust Security Model
منصة ميثاق مبنية على بنية Zero-Trust — لا ثقة ضمنية، تحقق من كل طلب، سجّل كل شيء.
Zero-Trust يعني أن المنصة لا تثق بأي طلب بشكل ضمني — سواء جاء من داخل الشبكة أو خارجها. كل طلب يُصادَق عليه، يُرخَّص له، ويُشفَّر.
كل الاتصالات بين المكونات مؤمّنة باستخدام TLS 1.2 أو TLS 1.3. الوكيل العكسي (Nginx) يفرض HTTPS على جميع الاتصالات العامة.
# TLS — منفذ HTTPS
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
# HSTS — إجبار HTTPS
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";قاعدة البيانات PostgreSQL مشفرة بالكامل باستخدام AES-256. مفاتيح التشفير تُدار بشكل منفصل عن بيانات المستخدم.
| المستوى | التشفير | المفتاح |
|---|---|---|
| قاعدة البيانات | AES-256 | مُدارة عبر Vault |
| التخزين المؤقت (Redis) | TLS + AUTH | مُعرفة في التكوين |
| ملفات التكوين | bcrypt | — |
| كلمات المرور | bcrypt / Argon2 | لا يمكن عكسها |
| رموز JWT | RS256 / ES256 | مُوقعة وليس مشفرة |
# Access Tokens — RS256 (RSA Signature with SHA-256)
{
"alg": "RS256",
"typ": "JWT",
"kid": "key-id-1"
}
# ID Tokens — RS256
# Refresh Tokens — مشفرة (encrypted at rest)
# ميثاق يستخدم RSA 2048-bit keys (minimum)
# الموصى به للإنتاج: RSA 4096-bitكل نطاق (Realm) يمكن أن يحتوي على سياسات مختلفة لكلمات المرور. هذهPolicies تُفرض عند التسجيل وعند تغيير كلمة المرور.
| الإعداد | القيمة الافتراضية | الوصف |
|---|---|---|
| Minimum Length | 8 أحرف | الحد الأدنى لطول كلمة المرور |
| Maximum Length | 255 حرف | الحد الأقصى لطول كلمة المرور |
| Require Digits | ✓ مفعل | يجب أن تحتوي على رقم واحد على الأقل |
| Require Special Characters | ✓ مفعل | يجب أن تحتوي على رمز خاص |
| Require Non-Alphanumeric | ✓ مفعل | أحرف غير أبجدية |
| Check History | 3 كلمات | عدم السماح بإعادة آخر N كلمة مرور |
| Force Expiration | 365 يوم | إجبار تغيير كلمة المرور دورياً |
| Max Login Failures | 5 محاولات | حظر الحساب بعد N محاولات فاشلة |
# Admin Console → Realm Settings → Password Policy
# أو عبر Admin REST API:
PUT /admin/realms/{realm}
Content-Type: application/json
{
"passwordPolicy": "length(12) and specialChars(1) and digits(1) and notUsername() and notEmail() and forceExpire()"
}كل عملية وصول وتغيير تُسجَّل في سجل تدقيق غير قابل للتعديل. هذه السجلات ضرورية للامتثال ولتحليل الحوادث الأمنية.
كل محاولات تسجيل الدخول — ناجحة وفاشلة، مع IP وdevice
كل عمليات تسجيل الخروج الطوعي أو بسبب انتهاء الجلسة
كل عمليات إدارة المستخدمين والأدوار
طلبات مرفوضة بسبب صلاحية غير كافية
تغيير كلمة المرور — لا تُسجَّل كلمة المرور نفسها
تسجيل دخول MFA ناجح أو فاشل
# نموذج سجل التدقيق (Audit Log Entry)
{
"event": "LOGIN",
"realm": "methaq",
"client": "web-app",
"user": "johndoe",
"ipAddress": "203.0.113.42",
"timestamp": "2026-04-24T10:30:00.000Z",
"device": "Chrome 124 / Windows 11",
"result": "SUCCESS",
"sessionId": "session-uuid-here",
"details": {
"authMethod": "password",
"mfaUsed": "TOTP",
"riskScore": 0.1
}
}
# الأحداث الفاشلة
{
"event": "LOGIN_ERROR",
"error": "invalid_user_credentials",
"attemptCount": 3,
"ipAddress": "198.51.100.14",
"result": "FAILURE"
}# تصدير عبر Admin API
GET /admin/realms/{realm}/events?from=2026-01-01&to=2026-04-24&type=LOGIN,LOGIN_ERROR
# تصدير الأحداث من فترة محددة
GET /admin/realms/{realm}/events?from=2026-04-01T00:00:00Z&max=1000
#Events يمكن تصديرها بـ JSON أو CSV
# التكامل مع SIEM (Splunk, ELK, ArcSight) عبر webhookطبقة WAF مخصصة تعمل على حافة الشبكة قبل وصول أي طلب إلى خادم التطبيق. مصممة لـ:
# Nginx — حدود المعدل
limit_req_zone $binary_remote_addr zone=general:10m rate=10r/s;
limit_req_zone $binary_remote_addr zone=api:10m rate=30r/s;
limit_req_zone $binary_remote_addr zone=auth:10m rate=5r/m;
# تطبيق الحدود
location / {
limit_req zone=general burst=20 nodelay;
}
location /api/ {
limit_req zone=api burst=50 nodelay;
}
location /auth/ {
limit_req zone=auth burst=5 nodelay;
}ModSecurity مع OWASP Core Rule Set (CRS) يوفر حماية من:
| الفئة | أمثلة |
|---|---|
| SQL Injection | ' OR 1=1--, UNION SELECT, DROP TABLE |
| XSS | <script>, javascript:, onerror= |
| Command Injection | ; cat /etc/passwd, | ls, $() |
| Path Traversal | ../../../etc/passwd, %2e%2e%2f |
| Scanner Detection | sqlmap, nikto, nmap signatures |
| Remote File Inclusion | http://evil.com/shell.txt |
محرك الذكاء الاصطناعي يقيّم كل طلب في الوقت الفعلي ويعين درجة مخاطر (Risk Score). بناءً على النتيجة، يمكن للمنصة:
IP, device fingerprint, browser, geolocation, وقت الطلب, معدل الطلبات, تاريخ المستخدم
المحرك يقارن الإشارات بالنماذج المدربة لاكتشاف الأنماط المشبوهة
النتيجة تحدد الإجراء — allow, challenge (MFA), or deny
كل قرار يُسجَّل، وإذا كانت النتيجة عالية يُرسل تنبيه فوري
| النتيجة | المستوى | الإجراء |
|---|---|---|
| 0.0 - 0.3 | 🟢 طبيعي | سماح فوري |
| 0.3 - 0.6 | 🟡 مشبوه | تسجيل ومراقبة |
| 0.6 - 0.8 | 🟠 مرتفع | طلب MFA إضافي |
| 0.8 - 1.0 | 🔴 حرج | رفض الطلب + إشعار |