ابدأ بالمصفوفة، لا بصيغة الجدار الناري. الجدول الذي تكون فيه الأدوار على جانب والخدمات على الجانب الآخر يمكن أن يراجعه مالك أحد التطبيقات، وأن يجادل فيه مالك الأمن، وأن ينفذه من يحمل البوابة. تلك المراجعة أرخص من تصحيح قواعد لم يتفق عليها أحد.

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

الخطوة 1: سمِّ الأدوار قبل الشبكات

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

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

الخطوة 2: حوّل كل خلية إلى بيان خدمة

الخلية التي تقول «التطبيقات» غير قابلة للاختبار. الخلية التي تقول «HTTPS إلى مضيف ERP على 443، من مجمّع الموظفين» قابلة للاختبار. استبدل كل اسم شبكة بوجهة وبروتوكول ومنفذ، ثم أضف الاعتماد الذي لا تعمل الخدمة بدونه، مثل المفسّر الداخلي أو مزوّد الهوية.

CheckPasses whenStop if
Destination namedHost and port appear in the cellCell names a VLAN or a subnet
Direction statedInitiator and responder are both clearCell implies two-way access
Dependency listedDNS or identity path is explicitWhole infrastructure range is granted
Negative case writtenAt least one denied pair is recordedOnly allow rules exist

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

الخطوة 3: قرّر أين تصبح الهوية سياسة

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

تعيين عنوان يشبه مجرد أنه ينتمي إلى VLAN هو الجواب نفسه غير الجواب في زيّ آخر. إن دليل Netgate لقواعد جدار OpenVPN الناري يوضّح الفصل: السماح للنفق بالارتفاع قرار مختلف عن السماح للمرور بالمرور عبره.

اكتب أي آلية اخترت وأين تُضبط. عندما يتغير دور، يفرق ذلك التدوين بين تعديل واحد وبحث في ثلاث واجهات. كما يخبر المدقق من أين يبدأ النظر.

الخطوة 4: راقب عنوان المصدر الذي تراه الوجهة

على سياسة التمرير أن تطابق المصدر الحقيقي عند الحدود. إذا كانت البوابة تترجم عملاء VPN إلى عنوانها الخاص، فكل جدار ناري أدنى يرى مصدرًا واحدًا ويفقد القدرة على اتخاذ قرارات لكل دور. وإذا حافظت على عنوان العميل، فيجب أن يوجد مسار العودة لذلك المجمّع.

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

الخطوة 5: اختبر كل خلية قبل الإطلاق

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

# allowed: staff role reaches the ERP endpoint
curl -sS -o /dev/null -w '%{http_code}\n' --max-time 5 https://erp.internal.example/health

# denied: the same role must not reach a management host
nc -vz -w 3 10.30.5.11 22

# observed source address at the destination
sudo tcpdump -ni any 'tcp port 443 and host 10.30.20.15'

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

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

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