تم إصدار مُرشِّح الحزم nftables 0.9.9. وهو يُوحِّد واجهات ترشيح الحزم لبروتوكولات IPv4 وIPv6 وARP وجسور الشبكة (كبديل لـ iptables وip6table وarptables وebtables). كما تم إصدار مكتبة libnftnl 1.2.0 المُصاحبة، والتي تُوفِّر واجهة برمجة تطبيقات منخفضة المستوى للتفاعل مع النظام الفرعي nf_tables، في الوقت نفسه. وقد تم دمج التغييرات المطلوبة لـ nftables 0.9.9 في نواة النظام. Linux 5.13-rc1.
تحتوي حزمة nftables على مكونات تصفية الحزم التي تعمل في مساحة المستخدم، بينما يتم توفير العمل على مستوى النواة بواسطة النظام الفرعي nf_tables، وهو جزء من النواة. Linux منذ الإصدار 3.13، يتم توفير واجهة عامة مستقلة عن البروتوكول فقط على مستوى النواة، مما يوفر وظائف أساسية لاستخراج البيانات من الحزم، وإجراء عمليات البيانات، والتحكم في التدفق.
يتم تجميع قواعد التصفية نفسها ومعالجات البروتوكولات المحددة في بايت كود في مساحة المستخدم، وبعد ذلك يتم تحميل بايت كود هذا في النواة باستخدام واجهة Netlink وتنفيذه في النواة في بيئة خاصة. آلة افتراضيةوهذا يذكرنا بـ BPF (مرشحات حزم بيركلي). يسمح هذا النهج بتقليل حجم كود التصفية الذي يعمل على مستوى النواة بشكل كبير، وينقل جميع عمليات تحليل القواعد ومنطق البروتوكول إلى مساحة المستخدم.
الابتكارات الرئيسية:
- تم تطبيق إمكانية نقل معالجة جدول التدفق إلى جانب محول الشبكة، مع تفعيلها باستخدام علامة "إلغاء التحميل". جدول التدفق هو آلية لتحسين مسار إعادة توجيه الحزم، حيث يتم تطبيق مرور كامل عبر جميع سلاسل معالجة القواعد على الحزمة الأولى فقط، بينما يتم إعادة توجيه جميع الحزم الأخرى في التدفق مباشرةً. جدول ip عالمي { جدول التدفق f { hook ingress priority filter + 1 devices = { lan3, lan0, wan } flags offload } سلسلة للأمام { type filter hook forward priority filter; policy accept; ip protocol { tcp, udp } flow add @f } سلسلة للنشر { type nat hook postrouting priority filter; policy accept; oifname "wan" masquerade } }
- أُضيف دعمٌ لإضافة علمٍ إلى جدولٍ للربط بالمالك، مما يضمن الاستخدام الحصري للجدول من قِبل عملية. عند انتهاء العملية، يُحذف الجدول المرتبط بها تلقائيًا. تُعرض معلومات العملية في ملف تفريغ القواعد كتعليق: table ip x { # progname nft flags owner chain y { type filter hook input priority filter; policy accept; counter packets 1 bytes 309 } }
- تمت إضافة دعم لمواصفات IEEE 802.1ad (تكديس شبكات VLAN أو QinQ)، التي تُحدد آلية استبدال علامات VLAN متعددة في إطار إيثرنت واحد. على سبيل المثال، للتحقق من نوع إطار إيثرنت الخارجي 8021ad ومعرف شبكة VLAN = 342، يمكنك استخدام البنية ... ether type 802.1ad vlan id 342 للتحقق من نوع إطار إيثرنت الخارجي 8021ad/معرف شبكة VLAN = 1، ومعرف شبكة VLAN المتداخل 802.1q/معرف شبكة VLAN = 2، بالإضافة إلى تغليف حزمة IP: ... ether type 8021ad vlan id 1 vlan type 8021q vlan id 2 vlan type عداد IP
- تمت إضافة دعم لإدارة الموارد باستخدام التسلسل الهرمي الموحد لمجموعات cgroups الإصدار 2. يتمثل الاختلاف الرئيسي بين مجموعات cgroups الإصدار 2 والإصدار 1 في استخدام تسلسل هرمي مشترك لجميع أنواع الموارد، بدلاً من تسلسلات هرمية منفصلة لتخصيص موارد وحدة المعالجة المركزية، وتنظيم استهلاك الذاكرة، وعمليات الإدخال والإخراج. على سبيل المثال، للتحقق من تطابق أصل المقبس في المستوى الأول من cgroupv2 مع القناع "system.slice"، يمكنك استخدام البنية التالية: ... socket cgroupv2 level 1 "system.slice"
- تمت إضافة إمكانية فحص مكونات حزم بروتوكول نقل الملفات البسيط (SCTP) (ستظهر الوظائف المطلوبة للتشغيل في النواة). Linux 5.14). على سبيل المثال، للتحقق مما إذا كانت حزمة بيانات تحتوي على جزء من نوع "data" وحقل "type": … بيانات جزء sctp موجودة … بيانات جزء sctp من النوع 0
- تم تسريع عملية تحميل القواعد باستخدام الخيار "-f" مرتين تقريبًا. كما تم تسريع إخراج قائمة القواعد.
- يتم توفير نموذج مُدمج لاختبار البتات المُعيّنة في الأعلام. على سبيل المثال، لاختبار عدم ضبط بتات حالة snat وdnat، يُمكن تحديد: ... ct status ! snat,dnat لاختبار ضبط بت syn في قناع بت syn,ack: ... tcp flags syn / syn,ack لاختبار عدم ضبط بتي fin وrst في قناع بت syn,ack,fin,rst: ... tcp flags != fin,rst / syn,ack,fin,rst
- يُسمح باستخدام كلمة "verdict" في تعريفات typeof لـ set/map: add map xm { typeof iifname . ip protocol . th dport : verdict ;}
المصدر: opennet.ru
