nftables حزمة مرشح 1.0.3 الإصدار

تم نشر إصدار مرشح الحزمة nftables 1.0.3 ، الذي يوحّد واجهات تصفية الحزمة لـ IPv4 و IPv6 و ARP وجسور الشبكة (بهدف استبدال iptables و ip6table و arptables و ebtables). تم تضمين التغييرات المطلوبة لإصدار nftables 1.0.3 للعمل في نواة Linux 5.18.

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

يتم تجميع قواعد التصفية نفسها والمعالجات الخاصة بالبروتوكول في رمز بايت مساحة المستخدم ، وبعد ذلك يتم تحميل هذا الرمز الثانوي في النواة باستخدام واجهة Netlink ويتم تنفيذه في النواة في جهاز ظاهري خاص يشبه BPF (مرشحات Berkeley Packet). هذا النهج يجعل من الممكن تقليل حجم كود التصفية الذي يعمل على مستوى النواة بشكل كبير ونقل جميع وظائف قواعد الإعراب ومنطق العمل مع البروتوكولات إلى مساحة المستخدم.

الابتكارات الرئيسية:

  • تدعم قوائم المجموعة الآن مطابقة أسماء واجهات الشبكة بواسطة قناع ، على سبيل المثال ، المحدد باستخدام الحرف "*": table inet testifsets {set simple_wild {type ifname flags الفاصل العناصر = {"abcdef *"، "othername"، "ppp0" }} سلسلة v4icmp {نوع أولوية إدخال خطاف عامل التصفية 0؛ قبول السياسة ؛ حزم العداد iifnamesimple_wild 0 بايت 0 iifname {"abcdef *"، "eth0"} حزم العداد 0 بايت 0}}
  • تم تنفيذ توحيد تلقائي لعناصر قائمة المجموعة المتقاطعة أثناء التشغيل. في السابق ، عند تعيين خيار "الدمج التلقائي" ، تم تنفيذ الدمج في مرحلة إعلان القواعد ، ولكنه يعمل الآن أيضًا عند إضافة عناصر جديدة بشكل متزايد في العملية. على سبيل المثال ، في خطوة الإعلان ، يتم تعيين القائمة على {عناصر الدمج التلقائي للفاصل الزمني للعلامات = {1.2.3.0 ، 1.2.3.255 ، 1.2.3.0/24 ، 3.3.3.3 ، 4.4.4.4 ، 4.4.4.4-4.4.4.8. 3.3.3.4 ، 3.3.3.5 ، 1.2.3.0}} ستصبح عناصر = {24/3.3.3.3 ، 3.3.3.5-4.4.4.4 ، 4.4.4.8-1.2.3.0} ثم إذا أضفنا عناصر جديدة # nft أضف عنصر ip xy {1.2.4.255 -3.3.3.6، 1.2.3.0} يصبح عناصر = {1.2.4.255-3.3.3.3، 3.3.3.6-4.4.4.4، 4.4.4.8-XNUMX}

    عند إزالة العناصر الفردية من القائمة التي تقع ضمن عناصر النطاق الموجودة ، يتم تقليل النطاق أو تقسيمه.

  • تمت إضافة دعم للجمع بين قواعد ترجمة العناوين المتعددة (NAT) في قائمة خريطة في مُحسِّن القواعد الذي يُطلق عليه الخيار "-o / - Optize". على سبيل المثال ، للمجموعة # cat ruleset.nft table ip x {chain y {type nat hook postrouting priority srcnat؛ انخفاض السياسة ip saddr 1.1.1.1 tcp dport 8000 snat to 4.4.4.4:80 ip saddr 2.2.2.2 tcp dport 8001 snat to 5.5.5.5:90}}

    سيؤدي تنفيذ "nft -o -c -f ruleset.nft" إلى تحويل قواعد "ip saddr" المنفصلة إلى قائمة خرائط: snat إلى ip saddr. خريطة tcp dport {1.1.1.1. 8000: 4.4.4.4. 80 ، 2.2.2.2. 8001: 5.5.5.5. 90}

    وبالمثل ، يمكن أيضًا تحويل التعبيرات الأولية إلى قوائم الخرائط: # cat ruleset.nft table ip x {[…] chain nat_dns_acme {udp length 47-63 @ th، 160,128،0 0x373135363130333131303735353203e62 goto nat_dns_dnstc udp length 78-160,128 goto0 nat_dns_this_0 udp length 31393032383939353831343037320-5301 @ th، 62،78 160,128x0e0e goto nat_dns_saturn_31363436323733373931323934300 udp length 5301-62 @ th، 78،160,128 0x0e32393535373539353636383732310 5302e62 gots 78 160,128x0e0e غوتو nat_dns_saturn_38353439353637323038363633390 drop}}

    بعد التحسين ، نحصل على قائمة الخرائط: udp length. @ th، 160,128 vmap {47-63. 0x0e373135363130333131303735353203: goto nat_dns_dnstc، 62-78. 0x0e31393032383939353831343037320e: goto nat_dns_this_5301، 62-78. 0x0e31363436323733373931323934300e: goto nat_dns_saturn_5301، 62-78. 0x0e32393535373539353636383732310e: goto nat_dns_saturn_5302، 62-78. 0x0e38353439353637323038363633390e: goto nat_dns_saturn_5303}

  • يُسمح باستخدام التعبيرات الأولية في عمليات التسلسل. على سبيل المثال: # nft أضف القاعدة xy ip saddr. @ ih، 32,32،1.1.1.1 {0. 14x2.2.2.2 ، 0. 1x32,32e} أو الجدول x {مجموعة y {typeof ip saddr. @ ih ، 1.1.1.1،0 عنصرًا = {14. XNUMXxXNUMX}}}
  • دعم إضافي لتحديد حقول رأس العدد الصحيح في عمليات التسلسل: الجدول inet t {map m1 {typeof udp length. @ ih، 32,32،20: عناصر الفاصل الزمني لإعلام الحكم = {80-0. 14x1: قبول ، 10-0. 0xa: drop}} chain c {نوع أولوية إدخال خطاف عامل التصفية 32,32 ؛ انخفاض السياسة طول udp. @ ih، 1،XNUMX vmap @ mXNUMX}}
  • دعم إضافي لإعادة تعيين خيارات TCP (يعمل فقط مع Linux kernel 5.18+): tcp flags synt reset tcp option sack-perm
  • تنفيذ أسرع لأوامر إخراج السلسلة ("nft list chain xy").

المصدر: opennet.ru

إضافة تعليق