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

IPv1.0.0, IPv4, ARP болон сүлжээний гүүр (iptables, ip6table, arptables болон ebtables солих зорилготой)-д зориулсан пакет шүүлтүүрийн интерфэйсүүдийг нэгтгэсэн пакет шүүлтүүрийн nftables 6 хувилбар хэвлэгдсэн. Nftables 1.0.0 хувилбарыг ажиллуулахад шаардлагатай өөрчлөлтүүдийг Linux 5.13 цөмд оруулсан болно. Хувилбарын дугаарт гарсан мэдэгдэхүйц өөрчлөлт нь ямар ч үндсэн өөрчлөлттэй холбоогүй бөгөөд зөвхөн аравтын бутархайн тэмдэглэгээнд дугаарлахыг тууштай үргэлжлүүлсний үр дагавар юм (өмнөх хувилбар нь 0.9.9).

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

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

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

  • "*" маск элементийн дэмжлэгийг багц жагсаалтад нэмсэн бөгөөд энэ нь багцад тодорхойлсон бусад элементүүдэд хамаарахгүй аливаа багцад идэвхждэг. хүснэгт x {газрын блокийн жагсаалт {төрөл ipv4_addr: шийдвэрийн тугуудын интервалын элементүүд = {192.168.0.0/16: хүлээн зөвшөөрөх, 10.0.0.0/8: хүлээн авах, *: дусал} } гинж y {төрлийн шүүлтүүр дэгээ урьдчилан чиглүүлэх тэргүүлэх чиглэл 0; бодлогыг хүлээн зөвшөөрөх; ip saddr vmap @blocklist } }
  • Командын мөрөөс "--define" сонголтыг ашиглан хувьсагчдыг тодорхойлох боломжтой. # cat test.nft хүснэгт netdev x {гинж y {төрлийн шүүлтүүр дэгээ оролт төхөөрөмжүүд = $dev тэргүүлэх чиглэл 0; бодлогын уналт; } } # nft —define dev="{ eth0, eth1 }" -f test.nft
  • Газрын зургийн жагсаалтад тогтмол (төлөв) илэрхийллийг ашиглахыг зөвшөөрнө: хүснэгт inet шүүлтүүр { газрын зургийн портмап { төрөл inet_service : шийдвэрийн эсрэг элементүүд = { 22 тоологч пакет 0 байт 0 : jump ssh_input, * тоологч пакет 0 байт 0 : дусал } } chain ssh_input { } chain wan_input {tcp dport vmap @portmap } гинжин чиглүүлэлт {төрлийн шүүлтүүр дэгээ урьдчилан чиглүүлэх тэргүүлэх ач холбогдол түүхий; бодлогыг хүлээн зөвшөөрөх; iif vmap {"lo": үсрэх wan_input} }}
  • Өгөгдсөн багцын гэр бүлийн зохицуулагчийн жагсаалтыг харуулах "жагсаалтын дэгээ" командыг нэмсэн: # nft жагсаалтын дэгээ IP төхөөрөмж eth0 гэр бүлийн ip { hook ingress { +0000000010 chain netdev xy [nf_tables] +0000000300 chain inet mw [nf_tables] } hook input { -0000000100 гинжин ip ab [nf_tables] +0000000300 гинж inet mz [nf_tables] } дэгээ урагшлах { -0000000225 selinux_ipv4_forward 0000000000 хэлхээ ip ac [nf_tables] -0000000225 гинжин хэлхээ [nf_tables4] 0000000225_гаралт } дэгээ байршуулах {+4 XNUMX selinux_ipvXNUMX_postroute } }
  • Queue блокууд нь jhash, symhash, numgen илэрхийллүүдийг нэгтгэж хэрэглэгчийн орон зайд дараалалд пакетуудыг түгээх боломжийг олгодог. … symhash mod 65536-ийн дараалал … дарааллын тугуудыг numgen inc mod 65536 руу тойрч гарах … jhash oif-ийн дараалал. meta mark mod 32 "дараалал"-ыг газрын зургийн жагсаалттай нэгтгэж, дурын товчлуур дээр үндэслэн хэрэглэгчийн орон зайд дарааллыг сонгох боломжтой. ... дарааллын тугуудыг oifname газрын зураг руу алгасах { "eth0" : 0, "ppp0" : 2, "eth1" : 2 }
  • Багц жагсаалтыг агуулсан хувьсагчдыг хэд хэдэн газрын зураг болгон өргөжүүлэх боломжтой. интерфэйсүүдийг тодорхойлох = { eth0, eth1 } хүснэгт ip x { гинжин y { төрөл шүүлтүүр дэгээ оролтын тэргүүлэх чиглэл 0; бодлогыг хүлээн зөвшөөрөх; iifname vmap {lo : хүлээн авах, $interfaces : drop} } } # nft -f x.nft # nft жагсаалтын дүрмийн багц хүснэгт ip x { гинж y {төрлийн шүүлтүүр дэгээ оролтын тэргүүлэх чиглэл 0; бодлогыг хүлээн зөвшөөрөх; iifname vmap { "lo" : хүлээн авах, "eth0" : унах, "eth1" : дусал } } }
  • Vmaps (шийдлийн газрын зураг)-ийг интервалтайгаар нэгтгэхийг зөвшөөрнө: # nft add rule xy tcp dport . ip saddr vmap {1025-65535. 192.168.10.2: хүлээн авах }
  • NAT зураглалд зориулсан хялбаршуулсан синтакс. Хаягийн мужийг зааж өгөхийг зөвшөөрнө: ... snat to ip saddr map { 10.141.11.4 : 192.168.2.2-192.168.2.4 } эсвэл тодорхой IP хаягууд болон портууд: ... dnat to ip saddr map { 10.141.11.4 : 192.168.2.3. . 80 } буюу IP муж болон портуудын хослолууд: ... dnat to ip saddr . tcp dport газрын зураг {192.168.1.2. 80: 10.141.10.2-10.141.10.5. 8888-8999 }

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

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