انتشار فیلتر بسته nftables 1.0.3

انتشار فیلتر بسته nftables 1.0.3 منتشر شده است که رابط های فیلتر بسته را برای IPv4، IPv6، ARP و پل های شبکه یکپارچه می کند (با هدف جایگزینی iptables، ip6table، arptables و ebtables). تغییرات مورد نیاز برای اجرای nftables 1.0.3 در هسته لینوکس 5.18 گنجانده شده است.

بسته nftables شامل اجزای فیلتر بسته است که در فضای کاربر اجرا می شود، در حالی که کار در سطح هسته توسط زیرسیستم nf_tables ارائه می شود که از زمان انتشار 3.13 بخشی از هسته لینوکس بوده است. سطح هسته تنها یک رابط عمومی مستقل از پروتکل ارائه می دهد که عملکردهای اساسی را برای استخراج داده ها از بسته ها، انجام عملیات داده و کنترل جریان ارائه می دهد.

قوانین فیلتر و کنترل کننده های خاص پروتکل در بایت کد در فضای کاربر کامپایل می شوند، پس از آن این بایت کد با استفاده از رابط Netlink در هسته بارگذاری می شود و در هسته در یک ماشین مجازی ویژه که یادآور BPF (فیلترهای بسته برکلی) است، اجرا می شود. این رویکرد به شما این امکان را می دهد که اندازه کدهای فیلترینگ در حال اجرا در سطح هسته را به میزان قابل توجهی کاهش دهید و تمام عملکردهای تجزیه قوانین و منطق کار با پروتکل ها را به فضای کاربر منتقل کنید.

نوآوری های اصلی:

  • لیست‌های مجموعه اکنون از نام‌های رابط شبکه مطابق با یک ماسک پشتیبانی می‌کنند، برای مثال، با استفاده از نماد "*" مشخص شده است: جدول inet testifsets { set simple_wild { type ifname flags interval element = { "abcdef*", "thername", "ppp0" } } chain v4icmp { type filter hook input priority 0; پذیرش سیاست بسته های شمارنده iifname @simple_wild 0 بایت 0 iifname { "abcdef*", "eth0" } بسته های شمارنده 0 بایت 0 } }
  • ادغام خودکار عناصر متقاطع فهرست مجموعه در طول عملیات اجرا شد. پیش از این، زمانی که گزینه "ادغام خودکار" تنظیم شده بود، ادغام در مرحله اعلام قوانین انجام می شد، اما اکنون زمانی که عناصر جدید به صورت تدریجی در حین کار اضافه می شوند نیز کار می کند. به عنوان مثال، در مرحله اعلان، لیست مجموعه y { پرچم‌گذاری عناصر ادغام خودکار فاصله زمانی = { 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 } و سپس اگر عناصر جدید اضافه کنید # nft عنصر را اضافه کنید ip xy { 1.2.3.0 -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 خواهد بود.

    وقتی آیتم های فردی را از لیست حذف می کنید که در محدوده آیتم های موجود قرار دارند، محدوده کوتاه شده یا تقسیم می شود.

  • پشتیبانی از ترکیب قوانین ترجمه آدرس چندگانه (NAT) در یک لیست نقشه به بهینه ساز قوانین اضافه شده است، که زمانی که گزینه "-o/-optimize" مشخص شده باشد، فراخوانی می شود. به عنوان مثال، برای مجموعه # cat ruleset.nft جدول ip x { chain y { type nat hook postrouting priority srcnat; کاهش سیاست؛ ip sadr 1.1.1.1 tcp dport 8000 snat به 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 map { 1.1.1.1 . 8000: 4.4.4.4. 80، 2.2.2.2. 8001: 5.5.5.5. 90}

    به طور مشابه، عبارت‌های خام را می‌توان به فهرست‌های نقشه تبدیل کرد: # cat ruleset.nft جدول ip x { […] chain nat_dns_acme { udp length 47-63 @th,160,128 0x0e373135363130333131303735353203@62. ,78 160,128x0e0e goto nat_dns_this_31393032383939353831343037320 طول udp 5301-62 @th,78 160,128x0e0e goto nat_dns_saturn_31363436323733373931323934300 طول udp 5301-62 @th,78 160,128x0 0e goto nat_dns_saturn_32393535373539353636383732310 udp طول 5302-62 @th,78 160,128x0e0e goto 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. 0x14، 2.2.2.2. 0x1e } یا جدول x { set y { typeof ip saddr . @ih,32,32 عناصر = { 1.1.1.1. 0x14 } }
  • پشتیبانی اضافه شده برای تعیین فیلدهای هدر اعداد صحیح در عملیات الحاق: جدول inet t { map m1 { typeof udp length . @ih,32,32 : عناصر فاصله پرچم‌های حکم = {20-80. 0x14 : قبول، 1-10. 0xa : drop } } chain c { type filter hook input priority 0; کاهش سیاست؛ طول udp @ih,32,32 vmap @m1 } }
  • پشتیبانی اضافه شده برای تنظیم مجدد گزینه های TCP (فقط با هسته لینوکس 5.18+ کار می کند): tcp flags syn reset tcp option sack-perm
  • اجرای دستورات خروجی زنجیره ("nft list chain xy") تسریع شده است.

منبع: opennet.ru

اضافه کردن نظر