Nftables تعليمي

Nftables T Lymy



يشرح هذا البرنامج التعليمي كيفية العمل مع جدار حماية Nftables Linux. تم تحسين هذا المحتوى لكل من مستخدمي Linux ذوي الخبرة والجدد.

Nftables هو أحد مكونات نواة Linux التي توفر وظائف جدار الحماية. إنه استبدال Iptables.







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



تحتوي جميع الأمثلة في هذا البرنامج التعليمي على لقطات شاشة ، مما يسهل على جميع مستخدمي Linux ، بغض النظر عن مستوى معرفتهم ، فهمها وتنفيذها.



الشروع في العمل مع Nftables

قبل البدء ، أنشئ ملفًا وافتحه باستخدام محرر نصوص مثل nano أو vi لبدء كتابة قواعد Nftables الأولى بناءً على المثال التالي. لا تنسخ ولصق ؛ اكتب كل شيء.





نانو جدار الحماية

المثال في هذا البرنامج التعليمي بسيط جدًا ويظهر جدار حماية مقيدًا يتم فيه إسقاط كل حركة مرور IPv4 باستثناء الاسترجاع والمنافذ المحددة.



في لقطة الشاشة السابقة ، استخدمت السطر الأول لتعريف شبكتي المحلية (192.168.0.0/16) على أنها LinuxHintNet.

حدد LinuxHintNet = 192.168.0.0 / 16

في السطر الثاني ، أحدد مجموعة من المنافذ (80 ، 443 ، و 22). أسمي هذه المجموعة AllowPorts لأنني أخطط للسماح بحركة المرور من خلالها. AllowPorts هو اسم عشوائي.

حدد AllowPorts = { 80 و 443 و 53 و 22 }

ثم أقوم بإضافة جدول ، وهو عبارة عن حاوية أو مجموعة من السلاسل والقواعد ؛ كلاهما موضح أدناه. تساعد الجداول في تنظيم القواعد والسلاسل. سميت الجدول في المثال 'مقيّد' لأنه يحتوي على سياسة تقييدية ، واسمه تعسفي.

يشير عنوان IP قبل اسم الجدول إلى أنه سيتم تطبيق قواعد جدول قائمة الانتظار فقط على حركة مرور IPv4. يمكنك استخدام inet بدلاً من IP لتطبيق القواعد على بروتوكولات IPv4 و IPv6. أو يمكنك استبدال IP بـ IP6 لـ IPv6 فقط.

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

في حالتي ، أقوم بتطبيق القواعد على IPv4 فقط ، كما هو موضح أدناه.

أضف الجدول IP تقييدي

لكلا البروتوكولين ، استخدم ما يلي:

إضافة جدول inet تقييد

ثم نضيف السلسلة الأساسية الأولى ، والتي أسميها بشكل تعسفي Incoming لأنها مرتبطة بحركة المرور الواردة. ومع ذلك ، يمكنك تسميته كما تريد.

تُسقط السلسلة الأساسية التالية كل حركة المرور الواردة افتراضيًا:

  • add chain ip Restrictive Incoming: يضيف هذا القسم السلسلة المقيدة الواردة ليتم تطبيقها على IPv4
  • نوع عامل التصفية: يحدد هذا نوع السلسلة كمرشح لأنه سيقوم بتصفية حركة المرور. أنواع السلاسل المحتملة الأخرى هي المسار أو NAT
  • إدخال الخطاف: يشير إلى الحزم الواردة
  • الأولوية 0: تحدد أولوية السلسلة الأساسية ترتيب السلاسل الأساسية
  • إسقاط السياسة: تتجاهل سياسة الإسقاط جميع الحزم افتراضيًا
أضف سلسلة IP واردة مقيدة { يكتب أولوية إدخال خطاف التصفية 0 ؛ انخفاض السياسة }

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

بعد السلاسل الأساسية الثلاثة ، يمكننا متابعة قواعد Nftables للسماح بحركة مرور الاسترجاع.

أقوم بإضافة الأسطر التالية لحركة المرور الواردة والصادرة على واجهة الاسترجاع.

أضف القاعدة IP قبول العداد المقيد iifname lo الوارد

أضف القاعدة IP قبول العداد المقيد لـ oifname lo الوارد

الآن ، أضفت أربع قواعد لقبول حركة مرور TCP و UDP الصادرة والواردة عبر جميع المنافذ المضمنة في المتغير AllowPorts $ المحدد في بداية الملف.

أضف القاعدة IP تقييد الرياضة الواردة tcp $ AllowPorts قبول العداد

أضف القاعدة IP تقييد الإرسال tcp dport $ AllowPorts قبول العداد

أضف القاعدة IP تقييد الرياضة الواردة من udp $ AllowPorts قبول العداد

أضف القاعدة IP تقييد udp dport الصادر $ AllowPorts قبول العداد

يمكنك رؤية النص الكامل أدناه.

بمجرد الانتهاء من كتابة الجداول والسلاسل والقواعد ، أغلق المستند واحفظ التغييرات.

# في أول سطرين ، أحدد شبكتي المحلية (LinuxHintNet) ومجموعة من المنافذ (80 ،
# 443،22) لتمكين حركة المرور من خلالها في القواعد أدناه.
حدد LinuxHintNet = 192.168.0.0 / 16
حدد AllowPorts = { 80 و 443 و 53 و 22 }
# أعلن عن جدول جديد يحتوي على سلاسل وقواعد. أسمي هذا الجدول 'مقيّد'.
# يطبق 'ip' القواعد على IPv4 فقط. بالنسبة إلى IPv6 ، استخدم 'ip6' فقط واستخدم 'inet' لكلا البروتوكولين.
أضف الجدول IP تقييدي
# بعد إنشاء الجدول ، أقوم بإنشاء ثلاث سلاسل ، الواردة ، وإعادة التوجيه والصادرة ،
# اسمائهم عشوائية. كلهم يقومون بإسقاط حركة المرور الواردة والصادرة وإعادة التوجيه بشكل افتراضي.
إضافة سلسلة IP واردة مقيدة { يكتب أولوية إدخال خطاف التصفية 0 ؛ انخفاض السياسة }
إضافة سلسلة IP إعادة التوجيه التقييدية { يكتب مرشح الأولوية إلى الأمام 0 ؛ انخفاض السياسة }
إضافة سلسلة IP تقييد الصادرة { يكتب مرشح أولوية إخراج هوك 0 ؛ انخفاض السياسة }
# أنا أنفذ قاعدتين للسماح بمرور الاسترجاع.
أضف القاعدة IP قبول العداد المقيد iifname lo الوارد
أضف القاعدة IP قبول العداد المقيد لـ oifname lo الوارد
# أقوم بتطبيق قواعد للسماح بالمرور عبر المنافذ المحددة في متغير AllowPorts.
أضف القاعدة IP تقييد الرياضة الواردة tcp $ AllowPorts قبول العداد
أضف القاعدة IP تقييد الإرسال tcp dport $ AllowPorts قبول العداد
أضف القاعدة IP تقييد الرياضة الواردة من udp $ AllowPorts قبول العداد

أضف القاعدة IP تقييد udp dport الصادر $ AllowPorts قبول العداد

لتنشيط جدار الحماية ، قم بتشغيل الأمر التالي:

سودو نفت -F جدار الحماية

يمكنك التحقق من القواعد الخاصة بك عن طريق تشغيل الأمر التالي:

سودو مجموعة قواعد قائمة nft

هذا جدار ناري مقيد أساسي.

استنتاج:

كما ترى ، Nftables أكثر ودية من Iptables ، ويمكن للمستخدمين تعلم Nftables بشكل أسرع من Iptables. منذ توقف Iptables ، والعديد من التوزيعات تستخدم Nftables كجدار ناري افتراضي ، بما في ذلك دبيان. قد يرغب المستخدمون المتمرسون في Iptables في إلقاء نظرة على أداة Iptables-nftables-Compatible ، والتي تترجم Iptables إلى Nftables. هذا قد يساعدهم على فهم الاختلافات.

يميل المستخدمون المحترفون مثل مسؤولي النظام إلى الاستمرار في العمل مع Iptables ؛ تجنب تجاهل Nftables لتوفير الوقت أثناء تحسين التصفية. آمل أن يكون هذا المقال بسيطًا بما يكفي لإقناعك بتجربة Nftables.