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

مهمتان، تُبقيان منفصلتين

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

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

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

امنح كل قرين عنوانه وحده

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

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

اكتب سياسة التوجيه التي تفصل المجموعات

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

iifname "wg0" oifname "wg0" ip saddr 10.66.10.0/24 ip daddr 10.66.10.0/24 accept
iifname "wg0" oifname "wg0" ip saddr 10.66.20.0/24 ip daddr 10.66.20.0/24 accept
iifname "wg0" oifname "wg0" drop

تسمح القاعدتان الأوليان بالمرور داخل كل مجموعة. أما الأخيرة فتحجب كل ما عدا ذلك مما يعبر تلك الواجهة، وهذا ما ينتج العزل بين المجموعات. أضف قواعد صريحة لعائلة العناوين الأخرى إن كنت تحتاجها، لأن قاعدة الحجب المكتوبة لـ IPv4 لا تجيز سلوك IPv6 ولا تصفه.

الترتيب يقرر ما إذا كانت السياسة تُطبَّق

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

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

اختبر المصفوفة، لا عدد الملفات

ابنِ مصفوفة صغيرة من النتائج المتوقعة وافحص كل خلية. المجموعة A إلى المجموعة A يجب أن تعمل، والمجموعة B إلى المجموعة B يجب أن تعمل، وA إلى B يجب ألا تعمل، في الاتجاهين ولكلتا عائلتي العناوين إن كنت تدعمهما.

nft list ruleset
wg show wg0 allowed-ips
ping -c 2 10.66.10.5
conntrack -L -s 10.66.20.7 2>/dev/null | head

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

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

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