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

متطلبان مخفيان داخل جملة واحدة

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

ApproachSteers trafficRefuses direct egressKnows the app identity
Per-app VPN profileYes, for the apps it namesOnly if a filter or firewall also blocksYes, within its own rules
Application proxy settingPartly, for requests that honour itNoNo
Content filterNoYesYes, if the filter is written that way
Local PF rulesetNoYes, by address and portNot reliably

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

التوجيه وحده يترك مخرجًا

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

ملف تعريف VPN لكل تطبيق يوجّه أفضل من الوكيل، لأن المنصة تقرر أي التطبيقات تدخل النفق بدلًا من أن يقرر كل تطبيق بنفسه. ومع ذلك لا يرفض شيئًا: فملف التعريف يوفر مسارًا، والحركة التي لا تطابقه تسلك المسار العادي. وتلك الفجوة هي بالضبط الموضع الذي يستحق فيه مكوّن ثانٍ مكانه، وهي سبب أن المنتجات التي تبدو كمفتاح واحد تكون عادةً اثنين.

الرفض وحده يعطّل التطبيق

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

مجموعة قواعد PF المُدارة محليًا تقع في الطرف الآخر من ذلك الطيف. إنها قرار دعم مشروع على جهاز يملكه مسؤول، وهي ليست تلقائيًا أساس منتج قابل للتوزيع، لأن من يملك مجموعة القواعد يملك أيضًا تفاعلاتها مع مستخدمي الجدار الناري الآخرين، ومسار ترقيتها، واستعادتها عندما تكون قاعدة ما خاطئة. وإضافة PF إلى منتج لا تزيل سؤال الملكية ذلك؛ بل تعرّفه.

النشر يقرر ما إذا كانت القاعدة ستظل موجودة غدًا

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

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

حالة قبول تسمّي التطبيق

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

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

اختم بكتابة أربعة بنود: ما المكوّنات التي يتكوّن منها التطبيق، ومن يملك التوجيه، ومن يملك الرفض، والحالات التي يجب أن تظل القاعدة سارية فيها. ويمكن أن يكون المستودع العام أحد معايير الاختيار، لكنه ليس أحد الأربعة، وتلك البنود هي التي تحسم ما إذا كانت أداة معينة تلبي متطلب الشبكة.

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