وصول حساب الخدمة إلى VPN: الشهادة مقابل تسجيل الدخول المشترك
قارن شهادة جهاز بكلمة مرور مخزَّنة للوصول غير المراقَب إلى VPN، وضع حد الصلاحيات الحقيقي في السياسة التي تُنفَّذ بعد تسجيل الدخول.
يغطي تصميمان تقريبًا كل إعداد VPN غير مراقَب: تسجيل دخول بشري مشترك يُحفظ في نص برمجي، أو شهادة جهاز مرتبطة بالمضيف. وهما يفشلان في مواضع مختلفة، وهذا أهم من سرعة الإعداد. تنكسر كلمة المرور المخزَّنة عندما يغيّرها صاحبها أو يرحل؛ وتنكسر الشهادة عندما تنتهي صلاحيتها أو عندما يُعاد بناء المضيف دون المفتاح. ثلاثة شروط تحدد أي كلفة تستطيع تحمّلها، ولا يحدّ أي من التصميمين من أي شيء حتى تفعل سياسة التفويض ذلك.
ابدأ من المهمة، لا من الحساب
المهمة تحدد الحدود: أي وجهات، وأي خدمات، وأي ساعات، وكم يجوز أن تدوم الجلسة. مسار النفق نصف تلك الحدود فقط. البوابة تقرر هل يُسمح بالجلسة؛ والمورد خلفها يقرر ما يمكن للجلسة فعله. اكتب القائمة أولًا، مع مالك مسمّى، لأن تصميمي الهوية كليهما عليهما الوفاء بها.
أبقِ المصادقة والتفويض منفصلين أثناء كتابة ذلك. المصادقة تجيب من يتصل؛ والتفويض يجيب ما الذي قد تصل إليه الجلسة بعد ذلك. يحمل RADIUS الجزء الثاني كسمات مثل Filter-Id وFramed-IP-Address وSession-Timeout وClass، وتُرفقها البوابة فور نجاح تسجيل الدخول. التصميم الذي يستبدل تسجيل الدخول ويترك التفويض كما هو لم يحدّ من أي شيء.
تسجيل الدخول البشري المشترك: كلمة المرور تصبح الحدود
إعادة استخدام حساب بشري هي المسار الأسرع والمسار الذي يشيخ أسوأ. بيانات الاعتماد هي كلمة مرور، لذا تنتهي في نص برمجي وملف بيئة وإعداد مجدول، وكل نسخة تحتاج تدويرًا. عندما يغيّرها المالك يوم جمعة، تفشل المهمة عند التشغيل التالي ولا أحد يراقب.
MFA هو الموضع الذي ينهار فيه هذا التصميم عادةً. لا يستطيع النص البرمجي الإجابة عن مطالبة دفع، لذا يُستبعد الحساب من السياسة، وهو بالضبط الحساب الذي يختاره مهاجم. تتكاثر الاستثناءات وتجاوزات المواقع الموثوقة والإعفاءات لكل حساب، ولا يظهر أي منها للشخص التالي الذي يقرأ إعدادات المستأجر.
الإسناد هو الكلفة الأخرى. كل جلسة في سجل البوابة تحمل اسم المستخدم نفسه، لذا لا يمكن تمييز المزامنة الليلية عن عمل الشخص الذي كتبها، و إلغاء المهمة يعني إلغاء ذلك الشخص.
شهادة الجهاز: هوية مرتبطة بالمضيف
تغيّر الشهادة السؤال من ماهية ما يعرفه الحساب إلى ماهية ما هو عليه المضيف. مع EAP-TLS يقدّم العميل شهادة ويثبت حيازة المفتاح الخاص المطابق؛ ويقوم خادم السياسات بتعيين الموضوع أو حساب الكمبيوتر إلى مجموعة ويطبّق السياسة على تلك المجموعة. لا مطالبة، ولا سرّ مشترك موضوع في ملف نصي.
الحدود التي تنشئها أضيق مما يتوقع الناس. الشهادة تصادق على المضيف لا على المهمة، وأي شخص لديه صلاحيات الجذر أو مسؤول محلي يستطيع استخدام ذلك المفتاح على ذلك المضيف. أبقِ المفتاح حيث تحميه المنصة: غير قابل للتصدير في مخزن شهادات Windows، ومدعوم بـ TPM حيث يسمح الملف الشخصي، أو ملف 0600 مملوك للجذر على Linux. اختراق المضيف هو اختراق لبيانات الاعتماد.
انتهاء الصلاحية هو الفشل المتكرر. الشهادة التي تنتهي صلاحيتها يوم أحد توقف المهمة يوم الأحد، وعادةً ما تبلّغ البوابة عن فشل مصادقة عام بدلًا من تسمية التاريخ. تحقق من التواريخ من مضيف المهمة كجزء من دليل التشغيل:
openssl x509 -in client.pem -noout -subject -issuer -dates
ipsec listcerts
الإلغاء يحتاج مسارًا تتحقق منه البوابة. OpenVPN يقرأ قائمة CRL عبر خيار crl-verify، ويعتمد strongSwan على CRL أو OCSP وفق طريقة بناء ملف الاتصال. إذا لم يكن أي منهما موصولًا، فإن إزالة مضيف تعني انتظار انتهاء صلاحية الشهادة.
ثلاثة شروط تحسم بينهما
شغّل المقارنة على المنصة التي لديك، لا على تصميم مرجعي.
الشرط الأول: هل تستطيع البوابة تفويض هوية جهاز؟ إذا كانت تكتفي بتعيين اسم مستخدم RADIUS إلى مستخدم في الدليل، فالشهادة تصادق على المضيف ثم تتوقف عند التفويض. الشرط الثاني: هل تحتاج المهمة إلى وصول إلى موارد لا يحملها إلا حساب مستخدم، مثل مشاركة معيّنة أو ترخيص لكل مقعد؟ إذن لا يمكن لهوية جهاز أن تحل محله، والجواب الصادق هو حساب مستخدم مخصص بسياسة محدودة النطاق. الشرط الثالث: من يستطيع تدوير بيانات الاعتماد دون شخص في الحلقة؟ التسجيل الآلي يجعل الشهادات رخيصة الحفظ؛ أما كلمة المرور التي يعرفها شخص واحد فلا.
| Constraint | Machine certificate | Dedicated user account with stored secret |
|---|---|---|
| Unattended login | Private key proof, no prompt | Only if the account is exempted from MFA |
| Resource expects a user identity | Works only when the resource accepts computer accounts | Matches the access a person would have |
| Rotation | Re-enrollment, often automated | Secret change plus redeploy of every copy |
| Revocation speed | Tied to CRL or OCSP refresh | Disable the account, immediate |
اقرأ الجدول كقائمة كلفة، لا كتصنيف. عمود السرّ المخزَّن يتفوق في سرعة الإلغاء وفي التوافق مع الموارد التي لا تفهم إلا حسابات المستخدمين؛ وعمود الشهادة يتفوق في التدوير وفي عدم إضعاف MFA لجعل نص برمجي يعمل.
ضع الحد في السياسة، بعد المصادقة
أي هوية تختار، فإن حد الصلاحيات ينتمي إلى السياسة التي تُنفَّذ بعد المصادقة. في NPS تُقيَّم سياسات الشبكة بالترتيب، وتُطبّق أول سياسة تطابق كل شرط إعداداتها، لذا سياسة واسعة موضوعة فوق سياسة ضيقة تحدد النتيجة مهما قدّم العميل. توثّق Microsoft نموذج الشروط والإعدادات في نظرة عامة على سياسات NPS.
أعطِ المهمة مجموعتها أو شرط سياستها الخاص، استنادًا إلى شيء تحمله هوية الجهاز: قالب شهادة، أو معرّف محطة اتصال، أو عنوان من مجموعة مخصصة. ثم قيّد الجلسة بسمات: Filter-Id للدور الذي تعيّنه بوابتك إليه، وSession-Timeout قصير حتى تعيد المهمة المتعثرة المصادقة بدلًا من إبقاء جلسة لأيام، وFramed-IP-Address من مجموعة تُطبّق عليها جدار حماية في الطرف الآخر. يبقى تفويض التطبيق منفصلًا: نفق إلى خادم قاعدة بيانات ليس إذنًا بقراءة جدول داخله.
تحقق من الرفض، ثم خطط للإزالة
الوصول الذي يعمل لا يثبت شيئًا عن أقل امتياز. اختبر الرفض بدلًا من ذلك: اتصل بهوية المهمة وحاول الوصول إلى وجهة خارج القائمة، وافتح جلسة ثانية متزامنة إذا كانت البوابة مخصصة للسماح بواحدة فقط، وأعد تسجيل الدخول بعد إلغاء بيانات الاعتماد.
ثم أكّد الجلسة نفسها في موضعين. يُظهر سجل البوابة الهوية التي صادقت؛ ويُظهر سجل خادم السياسات أي سياسة طابقت وأي سمات أعادت. في OpenVPN يسجل الخادم الاسم الشائع للشهادة، ويطبع ipsec statusall في strongSwan النفق القائم مع الهوية المستخدمة. إذا اختلف السجلان بشأن الهوية، فالسياسة تطابق شيئًا غير ما تفترضه.
الإزالة جزء من التصميم، لا سباق تنظيف. اكتب كل ما يجب حذفه (شهادة أو حساب، عضوية مجموعة، سياسة شبكة، مدخل مجموعة، قاعدة جدار حماية على الهدف) ونفّذه مرة واحدة بينما يكون إعادة بناء المهمة سهلًا.
إذا كنت تبدأ اليوم، فاعمل بهذا الترتيب: اكتب قائمة الموارد، واختر الهوية بالشروط الثلاثة، وضع الحد في السياسة، ومارس رفضًا واحدًا قبل أن تدخل المهمة حيز التشغيل.