سطح هسته تنها یک رابط عمومی مستقل از پروتکل را فراهم می کند که عملکردهای اساسی را برای استخراج داده ها از بسته ها، انجام عملیات داده و کنترل جریان ارائه می دهد. قوانین فیلتر و کنترل کننده های خاص پروتکل در بایت کد در فضای کاربر کامپایل می شوند، پس از آن این بایت کد با استفاده از رابط Netlink در هسته بارگذاری می شود و در هسته در یک ماشین مجازی ویژه که یادآور BPF (فیلترهای بسته برکلی) است، اجرا می شود. این رویکرد به شما این امکان را می دهد که اندازه کدهای فیلترینگ در حال اجرا در سطح هسته را به میزان قابل توجهی کاهش دهید و تمام عملکردهای تجزیه قوانین و منطق کار با پروتکل ها را به فضای کاربر منتقل کنید.
نوآوری های اصلی:
- پشتیبانی از محدوده در اتصالات (الحاق، بسته های مشخصی از آدرس ها و پورت هایی که مقایسه را ساده می کند). به عنوان مثال، برای یک مجموعه "لیست سفید" که عناصر آن یک پیوست هستند، مشخص کردن پرچم "فاصله" نشان می دهد که مجموعه می تواند محدوده هایی را در پیوست داشته باشد (برای پیوست "ipv4_addr. ipv4_addr. inet_service" قبلاً امکان فهرست دقیق وجود داشت. مطابق با فرم "192.168.10.35. 192.68.11.123"، و اکنون می توانید گروه هایی از آدرس ها را مشخص کنید: "80-192.168.10.35-192.168.10.40"):
میز آی پی فو {
تنظیم لیست سفید {
ipv4_addr را تایپ کنید. ipv4_addr. inet_service
فاصله پرچم ها
عناصر = { 192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125. 80}
}نوار زنجیر {
نوع فیلتر hook prerouting priority filter; کاهش سیاست؛
ip sadr. آی پی بابا tcp dport @whitelist قبول کنید
}
} - در مجموعهها و فهرستهای نقشه، میتوان از دستورالعمل «typeof» استفاده کرد که فرمت عنصر را هنگام تطبیق تعیین میکند.
به عنوان مثال:میز آی پی فو {
تنظیم لیست سفید {
نوع ip sadr
عناصر = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
}نوار زنجیر {
نوع فیلتر hook prerouting priority filter; کاهش سیاست؛
ip daddr @whitelist قبول
}
}میز آی پی فو {
نقشه adr2mark {
نوع ip sadr: متا مارک
عناصر = { 192.168.10.35 : 0x00000001, 192.168.10.135 : 0x00000002 }
}
} - قابلیت استفاده از اتصالات در اتصالات NAT اضافه شده است که به شما امکان می دهد آدرس و پورت را هنگام تعریف تبدیل NAT بر اساس لیست های نقشه یا مجموعه های نامگذاری شده مشخص کنید:
nft add rule ip nat pre dnat ip addr . پورت به ip sadr map { 1.1.1.1 : 2.2.2.2 . سی }
nft اضافه کردن نقشه ip nat مقصدها { نوع ipv4_addr . inet_service: ipv4_addr. inet_service \\; }
nft add rule ip nat pre dnat ip addr . پورت به ip sadr. tcp dport map @destinations - پشتیبانی از شتاب سخت افزاری با برخی از عملیات فیلترینگ انجام شده توسط کارت شبکه. شتاب از طریق ابزار ethtool ("ethtool -K eth0 hw-tc-offload on") فعال می شود، پس از آن در nftables برای زنجیره اصلی با استفاده از پرچم "offload" فعال می شود. هنگام استفاده از هسته لینوکس 5.6، شتاب سختافزاری برای تطبیق فیلد هدر و بازرسی رابط ورودی در ترکیب با بستههای دریافت، دور انداختن، تکرار (dup) و ارسال (fwd) پشتیبانی میشود. در مثال زیر، عملیات رها کردن بستههایی که از آدرس 192.168.30.20 میآیند، در سطح کارت شبکه بدون ارسال بستهها به هسته انجام میشوند:
# cat file.nft
جدول netdev x {
زنجیره y {
نوع فیلتر قلاب ورودی دستگاه eth0 اولویت 10; پرچم تخلیه;
ip sadr 192.168.30.20 افت کنید
}
}
# nft -f file.nft - اطلاعات بهبود یافته در مورد محل خطا در قوانین.
# nft delete rule ip yz handle 7
خطا: قانون پردازش نشد: چنین فایل یا فهرستی وجود ندارد
حذف قانون آی پی yz handle 7
^# nft delete rule ip xx handle 7
خطا: قانون پردازش نشد: چنین فایل یا فهرستی وجود ندارد
حذف قانون ip xx handle 7
^# nft حذف جدول twst
خطا: چنین فایل یا فهرستی وجود ندارد. منظورت تست جدول در آی پی خانواده بود؟
حذف جدول twst
^^^^مثال اول نشان می دهد که جدول "y" در سیستم نیست، دومی که کنترل کننده "7" وجود ندارد و سومی که هنگام تایپ نام جدول، یک دستور تایپی نمایش داده می شود.
- پشتیبانی اضافه شده برای بررسی رابط برده با مشخص کردن "meta sdif" یا "meta sdifname":
... متا sdifname vrf1 ...
- پشتیبانی از عملیات شیفت راست یا چپ اضافه شده است. به عنوان مثال، برای جابجایی یک برچسب بسته موجود به سمت چپ 1 بیت و تنظیم بیت کوچک روی 1:
… مجموعه متا مارک متا مارک lshift 1 یا 0x1 …
- گزینه "-V" برای نمایش اطلاعات نسخه توسعه یافته پیاده سازی شده است.
# nft -V
nftables نسخه 0.9.4 (Jive at Five)
cli: readline
json: بله
minigmp: نه
libxtables: بله - گزینه های خط فرمان اکنون باید قبل از دستورات مشخص شوند. به عنوان مثال، شما باید "nft -a list ruleset" را مشخص کنید، اما اجرای "nft list ruleset -a" منجر به خطا می شود.
منبع: opennet.ru