الفصل 16 العملاء والعمل الجماعي وCLI لوحة الإدارة: #pIdentity

مصادر الهوية: Active Directory وLDAP وEntra ID وKeycloak وSCIM

ضمن الإدارة > مصادر الهوية تربطون مستأجرًا أو نطاقات منفردة بـ Active Directory أو LDAP (تسجيل الدخول عبر Bind، ومزامنة المستخدمين والمجموعات المتداخلة وجهات الاتصال) أو بـ Microsoft Entra ID وKeycloak وغيرهما من مزودي OpenID Connect (تسجيل الدخول عبر SSO، والتزويد عبر SCIM 2.0). وتبقى الحسابات المحلية قابلة للاستخدام بالكامل إلى جانبها (تشغيل مختلط). ولكل حساب مصدر واحد بالضبط؛ ويعتمد الربط على ExternalId (AD objectGUID، وEntra objectId، وLDAP entryUUID)، وليس على عنوان البريد وحده أبدًا. والحقول التي يديرها المصدر للقراءة فقط في لوحة الإدارة وفي "حسابي".

نصيحة تشغيلية وملاحظة حول البنية

احتفظوا بمسؤول خادم محلي واحد على الأقل دون مصدر هوية كوصول طوارئ (Break-Glass). فهو لا يُستورد أبدًا من AD، ولا يسجّل الدخول أبدًا عبر مطابقة البريد في SSO، ويعمل حتى عند تعذّر الوصول إلى AD أو Entra. واضبطوا عتبة القفل في nextxch (الافتراضي 5 محاولات فاشلة) دون عتبة قفل حسابات AD: وبذلك لا يتمكن المهاجمون أبدًا من قفل حساب AD، لأن nextxch يتوقف قبل عملية الربط (Bind).

Entra ID: تسجيل التطبيق لتسجيل الدخول وSCIM

تسجيل الدخول: تسجيل تطبيق خاص (منصة الويب) مع عنوان URI لإعادة التوجيه من الإدارة > مصادر الهوية. التوفير (Provisioning): تطبيق مؤسسي من خارج المعرض مع وضع التوفير "Automatic"، وعنوان URL للمستأجر ورمز سري من nextxch.

المرجع / الإعداد
1. Entra admin center > App registrations > New registration
   Name:            nextxch Webmail
   Account types:   Accounts in this organizational directory only (single tenant)
   Redirect URI:    Web  https://mail.example.com/api/auth/sso/callback
2. Certificates & secrets > New client secret  -> enter it in nextxch as client secret
3. Token configuration > Add optional claim: ID token "email" (otherwise preferred_username = UPN is used)
4. App roles (optional): e.g. create "Nextxch.TenantAdmins", assign users,
   in nextxch: claim "roles", value "Nextxch.TenantAdmins" -> role TenantAdmin
5. nextxch Admin > Identity sources > Add Entra ID / OIDC
   Authority:  https://login.microsoftonline.com/<directory id>/v2.0
   Client id:  <application id>
6. SCIM: Enterprise applications > New application > Create your own (non-gallery)
   Provisioning > Automatic
   Tenant URL:    https://mail.example.com/scim/v2
   Secret token:  nxscim_...   (Admin > Identity sources > Create SCIM token)
   Mappings: userName <- userPrincipalName, emails[type eq "work"].value <- mail,
             externalId <- objectId (recommended) or mailNickname

الإعدادات والقيم الافتراضية وأفضل الممارسات

الإعداد / الموقع الوصف القيمة الافتراضية أفضل ممارسة للإنتاج
Active Directory: Dienstkonto مستخدم نطاق عادي دون صلاحيات إدارية، للقراءة فقط (يكفي حق القراءة الافتراضي لـ "Authenticated Users"). كلمة المرور لا تنتهي صلاحيتها. تُخزَّن مشفرة ولا تُعرض أبدًا. CN=svc-nextxch,OU=Service,... لا حاجة إلى مسؤول نطاق. القراءة تكفي للصور وproxyAddresses. ويمكن اختياريًا تقييد "Log on to" بوحدات التحكم بالمجال (DCs).
LDAPS 636 / StartTLS 389 اتصال مشفر بوحدات تحكم المجال. تُجرّب عدة وحدات تحكم بالترتيب (تجاوز الفشل)، ومهلة كل وحدة تحكم قابلة للضبط. LDAPS, 10 s اجعلوا خادم nextxch يثق بشهادة وحدة التحكم بالمجال (DC) (أو بالمرجع المصدّق الداخلي). ولا تستخدموا "Do not check the certificate" إلا لفترة قصيرة أثناء الإعداد.
Anmeldung (alle Protokolle) تتحقق Webmail والإدارة وIMAP وSMTP وPOP3 وActiveSync وEWS وMAPI وDAV من كلمة مرور AD عبر bind. أسماء تسجيل الدخول: عنوان البريد أو userPrincipalName أو sAMAccountName أو DOMAIN\user. Cache 15 min (Hash) لا تخزّن ذاكرة التخزين المؤقت القصيرة لتسجيل الدخول سوى HMAC، ولا تخزّن كلمة المرور أبدًا، وتُبقي تسجيل الدخول عاملًا أثناء انقطاع قصير لوحدة التحكم بالمجال (DC). وتعطّلها القيمة 0.
Abgleich: Benutzer, Gruppen, Kontakte mail وproxyAddresses (SMTP: = أساسي، smtp: = اسم مستعار)، displayName، givenName، sn، telephoneNumber، mobile، title، department، company، physicalDeliveryOfficeName، manager، thumbnailPhoto؛ ويعطّل userAccountControl وaccountExpires صندوق البريد. وتصبح المجموعات المفعّل لها البريد قوائم توزيع (متداخلة عبر LDAP_MATCHING_RULE_IN_CHAIN)، وتظهر جهات الاتصال في دفتر العناوين. Delta 15 min, voll 02:00 استخدموا "المعاينة" قبل التشغيل الأول: تعرض الحسابات التي ستُنشأ أو تُتولّى أو تُعطّل دون تغيير أي شيء. صفّوا على مجموعة "Mail users".
Gelöschte Objekte عندما يختفي كائن من AD (أو يرسل Entra طلب SCIM DELETE)، يُعطَّل صندوق البريد فورًا. وبعد فترة السماح يقرر المسؤول: الحذف، أو الإبقاء عليه كصندوق بريد مشترك، أو إبقاؤه معطّلًا. 30 Tage إعادة التسمية ليست حذفًا: يبقى العنوان الأساسي القديم كاسم مستعار.
Vorlagen ربط السمات لـ Microsoft AD وSamba AD وOpenLDAP وUnivention Corporate Server وFreeIPA؛ ويمكن تجاوز كل حقل أو إيقافه باستخدام "-". Active Directory يحتاج OpenLDAP إلى طبقة memberOf لعامل تصفية المجموعات؛ ويحل nextxch المجموعات المتداخلة هناك بنفسه.
OIDC (Entra ID, Keycloak) تدفق رمز التفويض (Authorization Code) مع PKCE على الخادم، والاكتشاف وJWKS مع تبديل تلقائي للمفاتيح، وRS256/ES256، والتحقق من iss وaud وexp وnonce ومعرّف مستأجر Entra tid. وتُربط مطالبات المجموعات أو أدوار التطبيق بـ User وTenantAdmin وServerAdmin. Knopf auf der Anmeldeseite Keycloak: الجهة المرجعية (authority) https://kc.example.com/realms/<realm>، وعميل سرّي مع standard flow، وعنوان URI لإعادة التوجيه كما ورد أعلاه؛ والأدوار عبر المطالبة realm_access.roles.
Lokale Passwörter pro Domain يمكن تعطيله بشكل منفصل لـ Webmail/الإدارة وللبروتوكولات. لا تصل كلمات مرور Entra أبدًا إلى nextxch: تستخدم تطبيقات البريد (Outlook وiPhone وThunderbird) كلمات مرور التطبيقات؛ ويرشد Webmail خلال الإعداد بمساعد. An يمكنكم لكل بروتوكول أيضًا فرض "OAuth / Kerberos فقط" (راجعوا الفصلين 16a و16b). ويمكن لمستخدمي AD تغيير كلمة مرورهم في Webmail عندما يسمح المصدر بذلك.
Kennwort ändern (AD / LDAP) مع "Users may change their password" يعرض Webmail نموذجًا ضمن الإعدادات > الأمان (كلمة المرور الحالية والجديدة). ‏AD: ‏unicodePwd عبر LDAPS مع كلمة المرور القديمة، لذا تنطبق قواعد تعقيد AD وسجل كلمات المرور والحد الأدنى للعمر؛ والأدلة الأخرى: RFC 3062. ويعيد المسؤولون تعيين كلمات المرور في مربع حوار الحساب (اختياريًا "change at next logon"). Aus لإعادة التعيين من قبل المسؤول، فوّضوا لحساب الخدمة فقط "Reset password" على الوحدة التنظيمية (OU) للمستخدمين. ولا تُسجَّل كلمات المرور أبدًا.