nftables paket filtri 1.0.3 versiyasi

IPv1.0.3, IPv4, ARP va tarmoq ko'priklari (iptables, ip6table, arptables va ebtables almashtirishga qaratilgan) uchun paketli filtrlash interfeyslarini birlashtiruvchi nftables 6 paketli filtri nashr etildi. Nftables 1.0.3 versiyasi ishlashi uchun zarur bo'lgan o'zgarishlar Linux 5.18 yadrosiga kiritilgan.

nftables to'plami foydalanuvchi bo'shlig'i paket filtri komponentlarini o'z ichiga oladi, yadro darajasidagi ish esa 3.13 versiyasidan beri Linux yadrosining bir qismi bo'lgan nf_tables quyi tizimi tomonidan ta'minlanadi. Yadro darajasi paketlardan ma'lumotlarni olish, ma'lumotlar operatsiyalarini bajarish va oqimlarni boshqarish uchun asosiy funktsiyalarni ta'minlaydigan faqat umumiy protokoldan mustaqil interfeysni ta'minlaydi.

Filtrlash qoidalari va protokolga xos ishlov beruvchilar foydalanuvchi maydonida bayt-kodga kompilyatsiya qilinadi, shundan so'ng bu bayt kod Netlink interfeysi yordamida yadroga yuklanadi va yadroda BPF (Berkeley Packet Filters) ni eslatuvchi maxsus virtual mashinada bajariladi. Ushbu yondashuv yadro darajasida ishlaydigan filtrlash kodining hajmini sezilarli darajada kamaytirish va protokollar bilan ishlash uchun tahlil qilish qoidalari va mantiqining barcha funktsiyalarini foydalanuvchi maydoniga ko'chirish imkonini beradi.

Asosiy innovatsiyalar:

  • Endi roʻyxatlar mos keladigan tarmoq interfeysi nomlarini niqob yordamida qoʻllab-quvvatlaydi, masalan, “*” belgisi yordamida koʻrsatilgan: table inet testifsets { set simple_wild { type ifname flags interval elements = { “abcdef*”, “othername”, “ppp0” } } zanjir v4icmp { turi filtr kancasi kiritish ustuvorligi 0; siyosatni qabul qilish; iifname @simple_wild hisoblagich paketlari 0 bayt 0 iifname { “abcdef*”, “eth0” } hisoblagich paketlari 0 bayt 0 } }
  • Ish paytida kesishgan to'plamlar ro'yxati elementlarini avtomatik ravishda birlashtirish amalga oshirildi. Ilgari, "avtomatik birlashtirish" opsiyasi o'rnatilganda, birlashish qoidalarni e'lon qilish bosqichida amalga oshirilgan, ammo endi u ish paytida yangi elementlar asta-sekin qo'shilganda ham ishlaydi. Misol uchun, deklaratsiya bosqichida ro'yxat y { bayroqlar oralig'i avtomatik birlashtirish elementlari = { 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 }} elementlarga aylantiriladi = {1.2.3.0/24, 3.3.3.3-3.3.3.5, 4.4.4.4-4.4.4.8 } va agar siz yangi elementlar qo'shsangiz # nft element qo'shing ip xy {1.2.3.0 -1.2.4.255, 3.3.3.6 } elementlarga o'xshaydi = {1.2.3.0-1.2.4.255, 3.3.3.3-3.3.3.6, 4.4.4.4-4.4.4.8 }

    Mavjud diapazon elementlariga kiradigan alohida elementlarni ro'yxatdan olib tashlasangiz, diapazon qisqartiriladi yoki bo'linadi.

  • Bir nechta manzillarni tarjima qilish (NAT) qoidalarini xaritalar roʻyxatiga birlashtirishni qoʻllab-quvvatlash “-o/—optimallashtirish” opsiyasi belgilanganda chaqiriladigan qoidalar optimallashtiruvchisiga qoʻshildi. Misol uchun, to'plam uchun # cat ruleset.nft table ip x { chain y { type nat hook postrouting priority srcnat; siyosatning pasayishi; ip saddr 1.1.1.1 tcp dport 8000 snat dan 4.4.4.4:80 gacha ip saddr 2.2.2.2 tcp dport 8001 snat dan 5.5.5.5:90 gacha } }

    “nft -o -c -f ruleset.nft” bajarilsa, alohida “ip saddr” qoidalari xaritalar ro‘yxatiga o‘zgartiriladi: snat to ip saddr . tcp dport xaritasi {1.1.1.1. 8000: 4.4.4.4. 80, 2.2.2.2. 8001: 5.5.5.5. 90}

    Xuddi shunday, raw iboralar xaritalar roʻyxatiga aylantirilishi mumkin: # cat ruleset.nft table ip x { […] chain nat_dns_acme { udp length 47-63 @th,160,128 0x0e373135363130333131303735353203d @62d ,78 160,128x0e0e goto nat_dns_this_31393032383939353831343037320 udp uzunligi 5301-62 @th,78 160,128x0e0e goto nat_dns_saturn_31363436323733373931323934300 udp uzunligi 5301-62 @th,78 160,128x0 0e goto nat_dns_saturn_32393535373539353636383732310 udp uzunligi 5302-62 @th,78 160,128x0e0e goto nat_dns_saturn_38353439353637323038363633390 tomchi }}

    optimallashtirishdan so'ng biz xaritalar ro'yxatini olamiz: udp length . @th,160,128 vmap {47-63. 0x0e373135363130333131303735353203 : o'tish 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 }

  • Birlashtirish amallarida xom iboralardan foydalanishga ruxsat beriladi. Masalan: #nft qo'shish qoidasi xy ip saddr. @ih,32,32 {1.1.1.1. 0x14, 2.2.2.2. 0x1e } yoki jadval x { set y { typeof ip saddr . @ih,32,32 elementlar = {1.1.1.1. 0x14 } }
  • Birlashtirish operatsiyalarida butun son sarlavhalari maydonlarini ko'rsatish uchun qo'shimcha yordam: jadval inet t { map m1 { typeof udp length . @ih,32,32 : hukm bayroqlari interval elementlari = {20-80 . 0x14: qabul qilish, 1-10 . 0xa: tomchi }} zanjir c {turi filtri kanca kiritish ustuvorligi 0; siyosatning pasayishi; udp uzunligi. @ih,32,32 vmap @m1 } }
  • TCP opsiyalarini tiklash uchun qoʻshimcha yordam (faqat Linux yadrosi 5.18+ bilan ishlaydi): tcp flags syn reset tcp option sack-perm
  • Zanjirli chiqish buyruqlarining (“nft list chain xy”) bajarilishi tezlashtirildi.

Manba: opennet.ru

a Izoh qo'shish