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

انتشار فیلتر بسته nftables 1.0.7 منتشر شده است که رابط های فیلتر بسته را برای IPv4، IPv6، ARP و پل های شبکه یکپارچه می کند (با هدف جایگزینی iptables، ip6table، arptables و ebtables). بسته nftables شامل اجزای فیلتر بسته است که در فضای کاربر اجرا می شود، در حالی که کار در سطح هسته توسط زیرسیستم nf_tables ارائه می شود که از زمان انتشار 3.13 بخشی از هسته لینوکس بوده است. سطح هسته تنها یک رابط عمومی مستقل از پروتکل را فراهم می کند که عملکردهای اساسی را برای استخراج داده ها از بسته ها، انجام عملیات داده و کنترل جریان ارائه می دهد.

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

تغییرات اصلی:

  • برای سیستم هایی که هسته لینوکس 6.2+ را اجرا می کنند، پشتیبانی از نگاشت پروتکل های vxlan، geneve، gre و gretap اضافه شده است که به عبارات ساده اجازه می دهد هدرها را در بسته های کپسوله شده بررسی کنند. به عنوان مثال، برای بررسی آدرس IP در هدر یک بسته تو در تو از VxLAN، اکنون می توانید از قوانین (بدون نیاز به کپسوله کردن هدر VxLAN و اتصال فیلتر به رابط vxlan0) استفاده کنید: ... udp dport 4789 vxlan ip protocol udp ... udp dport 4789 vxlan ip saddr 1.2.3.0. 24/4789 ... udp dport 1.2.3.4 vxlan ip saddr . vxlan ip daddr { 4.3.2.1 . XNUMX }
  • پشتیبانی از ادغام خودکار باقیمانده ها پس از حذف جزئی یک عنصر لیست لیست اجرا شده است، که به شما امکان می دهد یک عنصر یا بخشی از یک محدوده را از یک محدوده موجود حذف کنید (قبلاً یک محدوده فقط می توانست به طور کامل حذف شود). به عنوان مثال، پس از حذف عنصر 25 از یک لیست مجموعه با محدوده های 24-30 و 40-50، لیست 24، 26-30 و 40-50 باقی می ماند. اصلاحات مورد نیاز برای ادغام خودکار در نسخه های تعمیر و نگهداری شاخه های پایدار هسته 5.10+ ارائه می شود. # جدول nft قواعد لیست ip x { set y { typeof tcp dport flags interval auto-merge element = { 24-30, 40-50 } } } # nft delete element ip xy { 25 } # nft list rules table table ip x { set y { typeof tcp dport flags interval ادغام خودکار عناصر = { 24, 26-30, 40-50 } }
  • استفاده از مخاطبین و محدوده ها را هنگام ترسیم ترجمه آدرس (NAT) مجاز می کند. جدول ip nat { chain prerouting { type nat hook prerouting priority dstnat; سیاست پذیرش؛ dnat به ip daddr. tcp dport map { 10.1.1.136 . 80: 1.1.2.69. 1024، 10.1.1.10-10.1.1.20. 8888-8889: 1.1.2.69. 2048-2049 } مداوم } }
  • پشتیبانی از عبارت "آخرین" اضافه شده است که به شما امکان می دهد زمان آخرین استفاده از یک عنصر قانون یا لیست مجموعه را پیدا کنید. این ویژگی با شروع با هسته لینوکس 5.14 پشتیبانی می شود. جدول ip x { set y { typeof ip daddr . tcp dport size 65535 flags dynamic, timeout last timeout 1h } chain z { type filter hook output priority filter; سیاست پذیرش؛ به روز رسانی @y { ip daddr . tcp dport } } } # nft list set ip xy table ip x { set y { typeof ip daddr . tcp dport size 65535 flags dynamic, timeout last timeout 1h element = { 172.217.17.14 . 443 آخرین استفاده 1s591ms وقفه زمانی 1h منقضی می شود 59m58s409ms، 172.67.69.19. 443 آخرین استفاده 4s636ms وقفه زمانی 1h منقضی می شود 59m55s364ms، 142.250.201.72 . 443 آخرین استفاده 4s748ms وقفه زمانی 1h منقضی می شود 59m55s252ms، 172.67.70.134. 443 آخرین استفاده 4s688ms وقفه زمانی 1h منقضی می شود 59m55s312ms، 35.241.9.150. 443 آخرین استفاده 5s204ms وقفه زمانی 1h منقضی می شود 59m54s796ms، 138.201.122.174. 443 آخرین استفاده 4s537ms وقفه زمانی 1h منقضی می شود 59m55s463ms، 34.160.144.191. 443 آخرین استفاده 5s205ms وقفه زمانی 1h منقضی می شود 59m54s795ms، 130.211.23.194. 443 آخرین استفاده 4s436ms وقفه زمانی 1h منقضی می شود 59m55s564ms } } }
  • اضافه شدن قابلیت تعریف سهمیه در لیست های مجموعه. به عنوان مثال، برای تعیین سهمیه ترافیک برای هر آدرس IP هدف، می توانید تعیین کنید: جدول netdev x { set y { typeof ip daddr size 65535 quota over 10000 Mbytes } chain y { type filter hook egress device "eth0" priority filter; سیاست پذیرش؛ ip daddr @y drop } } # nft add element inet xy { 8.8.8.8 } # ping -c 2 8.8.8.8 # nft list ruleset table netdev x { set y { type ipv4_addr size 65535 quota over 10000 mbytes element = 8.8.8.8. 10000 سهمیه بیش از 196 مگابایت استفاده شده 0 بایت } } chain y { type filter hook egress device “ethXNUMX” priority filter; سیاست پذیرش؛ ip daddr @y drop } }
  • استفاده از ثابت ها در لیست های مجموعه مجاز است. به عنوان مثال، هنگام استفاده از آدرس مقصد و شناسه VLAN به عنوان کلید لیست، می توانید مستقیماً شماره VLAN را مشخص کنید (daddr . 123): table netdev t { set s { typeof ether saddr . اندازه شناسه vlan 2048 پرچمهای پویا، وقفه زمانی 1 متر } زنجیره c { نوع فیلتر قلاب ورودی دستگاه اولویت eth0 0; سیاست پذیرش؛ ether type != 8021q update @s { ether daddr . 123 } شمارنده } }
  • برای حذف بدون قید و شرط اشیاء، یک فرمان جدید "نابودی" اضافه کرد (برخلاف دستور حذف، هنگام تلاش برای حذف یک شیء از دست رفته، ENOENT ایجاد نمی کند). برای کار به حداقل هسته لینوکس 6.3-rc نیاز دارد. فیلتر ip جدول را از بین ببرید

منبع: opennet.ru

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