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

IPv1.0.3, IPv4, ARP болон сүлжээний гүүр (iptables, ip6table, arptables болон ebtables солих зорилготой)-д зориулсан пакет шүүлтүүрийн интерфэйсүүдийг нэгтгэсэн пакет шүүлтүүрийн nftables 6 хувилбар хэвлэгдсэн. nftables 1.0.3 хувилбарыг ажиллуулахад шаардлагатай өөрчлөлтүүдийг Linux 5.18 цөмд оруулсан болно.

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

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

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

  • Жагсаалтууд нь сүлжээний интерфэйсийн нэрийг маскаар тохируулахыг дэмждэг болсон, жишээлбэл, “*” тэмдэг ашиглан тодорхойлсон: table inet testifsets { set simple_wild { type ifname flags interval elements = { “abcdef*”, “othername”, “ppp0” } } chain v4icmp {төрлийн шүүлтүүр дэгээ оролтын тэргүүлэх чиглэл 0; бодлогыг хүлээн зөвшөөрөх; iifname @simple_wild тоологч пакетууд 0 байт 0 iifname { “abcdef*”, “eth0” } тоологч пакетууд 0 байт 0 } }
  • Ашиглалтын явцад огтлолцсон багцын жагсаалтын элементүүдийг автоматаар нэгтгэх ажлыг хэрэгжүүлсэн. Өмнө нь "автоматаар нэгтгэх" сонголтыг хийх үед нэгтгэх нь дүрмийг тунхаглах үе шатанд хийгддэг байсан бол одоо үйл ажиллагааны явцад шинэ элементүүд нэмэгдэх үед бас ажилладаг. Жишээлбэл, мэдүүлгийн үе шатанд y { flags interval auto-merge elements = { 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 } } нь = {1.2.3.0/24, 3.3.3.3-3.3.3.5, 4.4.4.4-4.4.4.8 } элементүүд болж хувирах бөгөөд хэрэв та шинэ элемент нэмбэл # nft элемент нэмнэ үү. ip xy {1.2.3.0 -1.2.4.255, 3.3.3.6} нь элементүүд шиг харагдах болно = {1.2.3.0-1.2.4.255, 3.3.3.3-3.3.3.6, 4.4.4.4-4.4.4.8 }

    Жагсаалтаас одоо байгаа мужид багтах зүйлсийг хасах үед хүрээг богиносгох эсвэл хуваах болно.

  • Олон хаягийн орчуулга (NAT) дүрмийг газрын зургийн жагсаалтад нэгтгэх дэмжлэгийг "-o/-optimize" сонголтыг зааж өгсөн үед дуудагдсан дүрмүүдийг оновчтой болгох хэрэгсэлд нэмсэн. Жишээ нь, багцын хувьд # cat ruleset.nft table ip x { chain y { type nat hook postrouting priority srcnat; бодлогын уналт; ip saddr 1.1.1.1 tcp dport 8000 snat-аас 4.4.4.4:80 хүртэл ip saddr 2.2.2.2 tcp dport 8001 snat-аас 5.5.5.5:90 хүртэл } }

    "nft -o -c -f ruleset.nft"-г гүйцэтгэх нь тусдаа "ip saddr" дүрмийг газрын зургийн жагсаалт болгон хувиргах болно: snat to ip saddr . tcp dport газрын зураг {1.1.1.1. 8000: 4.4.4.4. 80, 2.2.2.2. 8001: 5.5.5.5. 90}

    Үүний нэгэн адил, түүхий илэрхийлэлийг газрын зургийн жагсаалт болгон хувиргаж болно: # cat ruleset.nft table ip x { […] chain nat_dns_acme { udp length 47-63 @th,160,128 0x0e373135363130333131303735353203d go_natthn62d ,78 160,128x0e0e goto nat_dns_this_31393032383939353831343037320 udp урт 5301-62 @th,78 160,128x0e0e goto nat_dns_saturn_31363436323733373931323934300 udp урт 5301-62 @th,78 160,128x0 0e goto nat_dns_saturn_32393535373539353636383732310 udp урт 5302-62 @th,78 160,128x0e0e goto nat_dns_saturn_38353439353637323038363633390 дусал }}

    Оновчлолын дараа бид газрын зургийн жагсаалтыг авна: udp урт . @th,160,128 vmap {47-63. 0x0e373135363130333131303735353203 : goto 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 }

  • Холбох үйлдлүүдэд түүхий илэрхийлэл ашиглахыг зөвшөөрнө. Жишээ нь: #nft add rule xy ip saddr. @ih,32,32 {1.1.1.1. 0x14, 2.2.2.2 . 0x1e } эсвэл хүснэгт x { set y { typeof ip saddr . @ih,32,32 элемент = {1.1.1.1. 0x14 } }
  • Холбох үйлдлүүдэд бүхэл тоон толгойн талбаруудыг зааж өгөх дэмжлэг нэмэгдсэн: table inet t { map m1 { typeof udp length . @ih,32,32 : шийдвэрийн тугуудын интервалын элементүүд = {20-80 . 0x14: хүлээн авах, 1-10 . 0xa : дусал } } хэлхээ c {төрлийн шүүлтүүр дэгээ оролтын тэргүүлэх чиглэл 0; бодлогын уналт; udp урт. @ih,32,32 vmap @m1 } }
  • TCP тохируулгуудыг дахин тохируулах дэмжлэг нэмэгдсэн (зөвхөн Linux цөм 5.18+ дээр ажилладаг): tcp flags syn reset tcp option sack-perm
  • Гинжин гаралтын командуудын гүйцэтгэл (“nft list chain xy”) хурдассан.

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

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