إذا كان حاسوب محمول توقّفت تواقيع مضاد الفيروسات فيه عن التحديث قبل أسابيع ما زال يستطيع فتح تطبيقك الداخلي، فقلّما تكون وثيقة السياسة هي الشيء الخاطئ. ثلاثة أنظمة منفصلة يجب أن تتفق قبل رفض الوصول: شيء يقيس الجهاز الطرفي، وشيء يحوّل ذلك القياس إلى حكم بالسماح أو المنع، وشيء يُسقط حركة المرور فعليًا. وعندما يدخل جهاز غير مطابق رغم ذلك، تكون إحدى تلك الحلقات غائبة بالتحديد أو تثق بأدلة لا ينبغي أن تثق بها. تنفَّذ الفحوص أدناه بهذا الترتيب، ولكل منها نقطة توقف.

الحجب هو الخطوة الأخيرة، لا الأولى

المصادقة وحالة الجهاز تجيبان عن سؤالين مختلفين. تسجيل الدخول الناجح يثبت أن وثيقة اعتماد قُدِّمت؛ ولا يقول شيئًا عن البرمجيات العاملة على الجهاز الذي قدّمها. هذه الفجوة هي سبب قدرة ملف تعريف عميل منسوخ على حمل جلسة تبدو سليمة إلى مضيف غير سليم.

عمل مطابقة الأجهزة الطرفية يملك بالفعل مفردات لهذه السلسلة. يقدّم نموذج مرجع NEA الوارد في RFC 5209 تقسيمًا للمهمة إلى جامع وخطوة تقييم ونقطة إنفاذ، ويقول صراحة إن العميل الذي يكذب بشأن حالته يقع خارج النموذج. هذا التحفظ أهم من الرسم: وحدة منصة موثوقة لا تحوّل قياسًا يبلّغ به الجهاز عن نفسه إلى حقيقة.

أبقِ الجامع صادقًا بشأن النطاق. ينبغي أن يبلّغ عن السمات التي تسمّيها سياستك، على الجهاز الذي يطلب الوصول، ولا يكاد يبلّغ عن غيرها. وكيل الجرد الذي يسرد كل حزمة مثبَّتة أداة مختلفة عن جامع حالة الجهاز، والفرق مشكلة احتفاظ ومشكلة دقة معًا. وإذا تعذّر ربط التقرير بهوية جهاز واحدة، فإن المُقيِّم يخمّن أي جهاز وافق عليه للتو.

لوحة تعرض حالة حمراء ليست ضابطًا. اسأل عمّا يزال بإمكان مستخدم ممنوع الوصول إليه: الويكي، ومشاركة الملفات، ومنفذ قاعدة البيانات؟ يحتاج الإصلاح إلى سطح ضيق واحد، وكل شيء آخر يقع خلف الحجب.

اقرأ التقرير قبل أن تقرأ القاعدة

ابدأ من المصدر بدلًا من علامة الصح الخضراء في العميل. على Windows يأتي القياس المحلي من Defender أو من أي منتج سجّل نفسه لدى Security Center، وكلاهما قابل للقراءة دون وحدة تحكم من المورّد:

Get-MpComputerStatus | Select-Object AMServiceEnabled, RealTimeProtectionEnabled, AntivirusSignatureLastUpdated
Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntiVirusProduct | Select-Object displayName, productState

يعيد الأمر الثاني عددًا صحيحًا اسمه productState. بِتاته موثّقة توثيقًا فضفاضًا، ويحزم المورّدون رايتَي التمكين والحداثة بطرق مختلفة، فتحقّق منه بدلًا من تحليله. كما تترك الحزم الخارجية إدخال Security Center بعد إلغاء التثبيت، فيبلّغ عن برمجيات لم تعد على القرص.

العمر هو الحقل الذي يتخطاه الناس. طابع زمني للتوقيع لا يعني شيئًا إلا مقابل ساعة الجهاز الذي يجري التقييم، لذا حوّله إلى فاصل زمني بدلًا من تقديره بالنظر:

$sig = (Get-MpComputerStatus).AntivirusSignatureLastUpdated
[int](New-TimeSpan -Start $sig -End (Get-Date)).TotalHours

الآن أصبح للسياسة رقم واحد تقرأه. إذا كانت قاعدتك تقول 72 ساعة، فهذا هو الرقم الذي تستخدمه، وحاسوب نائم أسبوعًا يفشل دون أن يفسّر أحد تسمية. سجّل العتبة بجانب الأمر، لأن الاثنين ينحرفان عند استبدال أداة الجهاز الطرفي.

حوّل كل حالة جهاز إلى حكم مكتوب

معظم الخلافات حول حالة الجهاز هي في الحقيقة خلافات حول الصف المجهول. احسمه قبل الحادثة الأولى، في جدول يسمّي الدليل والحكم والمالك، حتى لا يرتجل أحد عند وحدة تحكم البوابة.

Evidence the assessor hasVerdictWhat it protects against
Timestamp inside the policy window, protective service runningAdmit to normal applicationsNothing yet; the other checks still apply
Timestamp older than the windowDeny, admit remediation page onlySignature rollback and dormant laptops
Service disabled or reporting offDeny, escalate to the endpoint ownerAn agent reporting stale success
No report at all for this sessionTreat as deny, never as healthyAgents that fail open under load

الصف الأخير هو حيث تختلف المنتجات. بعض البوابات ترفض الاتصال وتشرح السبب؛ وأخرى تسمح بنشوء النفق وتطبّق سياسة مقيَّدة؛ وقليل منها يعود إلى آخر تقرير سليم معروف. الأولان فقط هما القابلان للدفاع، ويستحق الأمر اختبار أيّهما يفعل نظامك.

أبقِ الهوية والإذن في مسارات منفصلة أيضًا. الحاسوب الذي ينجح في كل اختبار حالة جهاز لا يزال يحتاج إلى تفويض بشري صحيح للتطبيق، وشهادة الجهاز تثبت حيازة مفتاح لا حالة نظام الملفات. ودمج الثلاثة في قيمة منطقية واحدة هو كيف يحصل حساب مكتب المساعدة على وصول دائم إلى بيئة الإنتاج.

افحص مسار الإنفاذ بطلب، لا بلوحة

الإنفاذ خاصية للطلب، لذا قِسه بطلب واحد. ضع جهازًا غير مطابق على النفق واجعل الاستدعاء كما يفعله مستخدم حقيقي:

curl -sS -o /dev/null -w '%{http_code}
' --max-time 5 https://app.internal.example/health

استجابة 200 من جهاز يجب حجبه تعني أن القرار لم يصل إلى مسار البيانات قط. سببان معتادان: السياسة مرتبطة بمجموعة لم ينضم إليها حساب الاختبار، أو التطبيق قابل للوصول عبر مسار لا يملكه VPN.

افحص افتراض التوجيه أولًا. إذا كان الاسم الداخلي يُترجم إلى عنوان يصل إليه العميل أصلًا عبر الشبكة المحلية، فالنفق غير ذي صلة ولن تُطبَّق أي سياسة. قارن ذلك العنوان بالمسار الذي تدفعه البوابة. على OpenVPN، تعيش سياسة كل عميل في ملفات مفتاحة بالاسم الشائع، لذا يكون فحصها سهلًا:

ls /etc/openvpn/ccd/
cat /etc/openvpn/ccd/laptop-17

الملف الذي يحتوي على disable يقطع ذلك العميل نهائيًا، بينما يضيّق سطر push "route ..." ما يمكنه الوصول إليه. كلاهما إنفاذ، وكلاهما مرئي لمن يصلح التقرير.

اختبر الحالات الأربع على حساب تجريبي واحد

الفحص الأخير مصفوفة صغيرة، لا مسار سعيد. قُد حساب اختبار واحد عبر أربع حالات: حديث، وتوقيع منتهٍ، وحماية معطَّلة، ووكيل غير مثبَّت. ولكل حالة، سجّل الحكم في سجل التقييم، وحالة HTTP التي يعيدها التطبيق، وما إذا كانت صفحة الإصلاح قد حُمّلت.

foreach ($case in 'current', 'stale', 'disabled', 'absent') {
  Get-MpComputerStatus | Select-Object AMServiceEnabled, AntivirusSignatureLastUpdated
  curl.exe -sS -o NUL -w "%{http_code}
" --max-time 5 https://app.internal.example/health
}

هناك تفصيلان يسهل تفويتهما. أولًا الإعادة: تقرير أُخذ بينما كان الجهاز سليمًا يجب ألا يُقبل لجلسة لاحقة على الجهاز نفسه، فابحث عن طابع زمني مرتبط بالاتصال الحالي. ثم الإزالة: يجب أن يؤدي إلغاء تثبيت الوكيل إلى المنع نفسه الذي ينتج عن تقرير قديم، لا إلى نجاح نظيف، وهذه هي الحالة التي لا تُختبر غالبًا.

عندما تطابق المصفوفة الجدول، سلّم ثلاثة عناصر إلى من يدير البوابة بعدك: الأوامر، والعتبة، والنتائج الأربع المتوقعة. هذا التسليم هو المُخرَج الحقيقي، لأن تصميم حالة الجهاز الذي يعيش في وثيقة سياسة فقط ينحرف أول مرة تغيّر فيها أداة الجهاز الطرفي حقل تقاريرها.

مقالات ذات صلة