nftables багц шүүлтүүрийн хувилбар 0.9.9

IPv0.9.9, IPv4, ARP болон сүлжээний гүүр (iptables, ip6table, arptables болон ebtables солих зорилготой)-д зориулсан пакет шүүлтүүрийн интерфэйсүүдийг нэгтгэсэн пакет шүүлтүүрийн nftables 6 хувилбарыг хэвлэв. Үүний зэрэгцээ libnftnl 1.2.0 номын сангийн хувилбар хэвлэгдсэн бөгөөд nf_tables дэд системтэй харилцах доод түвшний API-г хангасан. nftables 0.9.9 хувилбарыг ажиллуулахад шаардлагатай өөрчлөлтүүдийг Linux цөм 5.13-rc1-д оруулсан болно.

Nftables багц нь хэрэглэгчийн орон зайд ажилладаг пакет шүүлтүүрийн бүрэлдэхүүн хэсгүүдийг агуулдаг бол цөмийн түвшний ажлыг 3.13 хувилбараас хойш Линуксийн цөмийн нэг хэсэг болсон nf_tables дэд системээр хангадаг. Цөмийн түвшин нь пакетуудаас өгөгдөл гаргаж авах, өгөгдлийн үйлдлүүдийг гүйцэтгэх, урсгалыг хянах үндсэн функцуудыг хангадаг ерөнхий протоколоос хамааралгүй интерфэйсийг л хангадаг.

Шүүлтүүрийн дүрмүүд болон протоколын тусгай зохицуулагч нар нь хэрэглэгчийн орон зайн байт код руу хөрвүүлэгдэж, дараа нь энэ байт кодыг Netlink интерфейсийг ашиглан цөмд ачаалж, BPF (Беркли Пакет шүүлтүүр) -тэй төстэй тусгай виртуал машинд цөмд ажиллуулдаг. Энэхүү арга нь цөмийн түвшинд ажиллаж байгаа шүүлтүүрийн кодын хэмжээг эрс багасгаж, задлан шинжлэх дүрмийн бүх функцууд болон протоколуудтай ажиллах логикийг хэрэглэгчийн орон зайд шилжүүлэх боломжийг олгодог.

Гол инноваци:

  • Урсгалын хүснэгтийн боловсруулалтыг сүлжээний адаптерийн тал руу шилжүүлэх боломжийг 'offload' дарцаг ашиглан идэвхжүүлсэн. Flowtable нь багцын дахин чиглүүлэлтийн замыг оновчтой болгох механизм бөгөөд бүх дүрэм боловсруулах гинжний бүрэн дамжилтыг зөвхөн эхний багцад хэрэглэж, урсгалын бусад бүх пакетуудыг шууд дамжуулдаг. хүснэгт ip global { flowtable f { дэгээ орох тэргүүлэх шүүлтүүр + 1 төхөөрөмж = { lan3, lan0, wan } туг буулгах } гинж урагш {төрлийн шүүлтүүр дэгээ урагш тэргүүлэх шүүлтүүр; бодлогыг хүлээн зөвшөөрөх; ip протокол {tcp, udp} flow add @f } гинжин бичлэг { type nat hook postrouting priority filter; бодлогыг хүлээн зөвшөөрөх; oifname "wan" маскарад } }
  • Хүснэгтийг зөвхөн үйл явцаар ашиглахын тулд эзэмшигчийн тугийг хүснэгтэд хавсаргах дэмжлэгийг нэмсэн. Процесс дуусахад түүнтэй холбоотой хүснэгт автоматаар устгагдана. Процессын талаарх мэдээлэл дүрмийн дамп дээр тайлбар хэлбэрээр харагдана: хүснэгт ip x { # progname nft flags owner chain y { type filter hook input priority filter; бодлогыг хүлээн зөвшөөрөх; эсрэг пакетууд 1 байт 309 } }
  • IEEE 802.1ad техникийн үзүүлэлтэд (VLAN stacking эсвэл QinQ) дэмжлэг нэмсэн бөгөөд энэ нь олон VLAN хаягуудыг нэг Ethernet фрейм болгон орлуулах хэрэгслийг тодорхойлдог. Жишээлбэл, гадаад Ethernet фрэймийн 8021ad ба vlan id=342-ийн төрлийг шалгахын тулд та констракшныг ашиглаж болно ... ether төрөл 802.1ad vlan id 342 Ethernet хүрээний гадаад төрлийг шалгахын тулд 8021ad/vlan id=1, 802.1 үүрлэсэн. q/vlan id=2 ба цаашдын IP пакетийн капсулжуулалт: ... эфирийн төрөл 8021ad vlan id 1 vlan төрөл 8021q vlan id 2 vlan төрлийн ip тоолуур
  • Нэгдсэн шатлалын бүлгүүдийг v2 ашиглан нөөцийг удирдах дэмжлэг нэмсэн. cgroups v2 ба v1-ийн гол ялгаа нь CPU-ийн нөөцийг хуваарилах, санах ойн хэрэглээг зохицуулах, оролт гаралтын хувьд тусдаа шатлалын оронд бүх төрлийн нөөцийн хувьд нийтлэг бүлгүүдийн шатлалыг ашиглах явдал юм. Жишээлбэл, cgroupv2 эхний түвшний залгуурын өвөг дээдэс нь “system.slice” масктай таарч байгаа эсэхийг шалгахын тулд та дараах бүтцийг ашиглаж болно: ... socket cgroupv2 level 1 “system.slice”
  • SCTP пакетуудын бүрэлдэхүүн хэсгүүдийг шалгах чадварыг нэмсэн (үүнд шаардлагатай функц нь Linux 5.14 цөмд гарч ирнэ). Жишээлбэл, багцад 'өгөгдөл' төрөл ба 'төрөл' талбар бүхий бөөгнөрөл байгаа эсэхийг шалгахын тулд: ... sctp chunk өгөгдөл байна ... sctp chunk өгөгдлийн төрөл 0
  • Дүрмийг ачаалах ажиллагааг "-f" тугийг ашиглан ойролцоогоор хоёр дахин хурдасгасан. Мөн дүрмийн жагсаалтыг гаргах ажлыг хурдасгасан.
  • Тугны бит тохируулагдсан эсэхийг шалгах авсаархан маягтыг өгсөн болно. Жишээлбэл, snat болон dnat төлөвийн битүүдийг тохируулаагүй эсэхийг шалгахын тулд та дараахийг зааж өгч болно: ... ct status ! snat,dnat бит маск дээр syn бит тохируулагдсан эсэхийг шалгахын тулд syn,ack: ... tcp flags syn / syn,ack нь fin болон rst битүүдийг бит маск дээр тохируулаагүй эсэхийг шалгахын тулд syn,ack,fin,rst: ... tcp тугууд != fin,rst / syn,ack,fin,rst
  • Set/map төрлийн тодорхойлолтод "шийдэл" гэсэн түлхүүр үгийг зөвшөөрнө үү: map xm { typeof iifname нэмнэ үү. ip протокол th dport: шийдвэр ;}

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх