Lëshimi i filtrit të paketave nftables 1.0.0

Është publikuar lëshimi i filtrit të paketave nftables 1.0.0, duke unifikuar ndërfaqet e filtrimit të paketave për IPv4, IPv6, ARP dhe urat e rrjetit (që synojnë zëvendësimin e iptables, ip6table, arptables dhe ebtables). Ndryshimet e kërkuara për funksionimin e lëshimit të nftables 1.0.0 përfshihen në kernelin Linux 5.13. Një ndryshim i rëndësishëm në numrin e versionit nuk shoqërohet me ndonjë ndryshim thelbësor, por është vetëm pasojë e vazhdimit të vazhdueshëm të numërimit në shënimet dhjetore (lëshimi i mëparshëm ishte 0.9.9).

Paketa nftables përfshin komponentët e filtrit të paketave që funksionojnë në hapësirën e përdoruesit, ndërsa puna në nivel kernel ofrohet nga nënsistemi nf_tables, i cili ka qenë pjesë e kernelit Linux që nga lëshimi 3.13. Niveli i kernelit siguron vetëm një ndërfaqe gjenerike të pavarur nga protokolli që ofron funksione bazë për nxjerrjen e të dhënave nga paketat, kryerjen e operacioneve të të dhënave dhe kontrollin e rrjedhës.

Rregullat e filtrimit dhe mbajtësit specifikë të protokollit përpilohen në bytecode në hapësirën e përdoruesit, pas së cilës ky bajtkod ngarkohet në kernel duke përdorur ndërfaqen Netlink dhe ekzekutohet në kernel në një makinë virtuale speciale që të kujton BPF (Berkeley Packet Filters). Kjo qasje ju lejon të zvogëloni ndjeshëm madhësinë e kodit të filtrimit që funksionon në nivelin e kernelit dhe të zhvendosni të gjitha funksionet e rregullave të analizimit dhe logjikës për të punuar me protokollet në hapësirën e përdoruesit.

Risitë kryesore:

  • Mbështetja për elementin maskë "*" është shtuar në listat e grupeve, e cila aktivizohet për çdo paketë që nuk bie nën elementët e tjerë të përcaktuar në grup. tabela x {lista e bllokimit të hartës { type ipv4_addr : verdict flags elementet interval = { 192.168.0.0/16 : pranoj, 10.0.0.0/8 : pranoj, * : drop } } zinxhir y { type filtri hook priority prerouting priority 0; pranimi i politikës; ip saddr vmap @blocklist } }
  • Është e mundur të përcaktohen variablat nga linja e komandës duke përdorur opsionin "--define". # cat test.nft tabela netdev x { zinxhir y { lloji i pajisjeve hyrëse të fiksimit të filtrit = prioriteti $dev 0; rënie e politikës; } } # nft —define dev="{ eth0, eth1 }" -f test.nft
  • Në listat e hartave, lejohet përdorimi i shprehjeve konstante (stateful): tabela inet filter { map portmap { type inet_service : verdict counter elements = { 22 counter packets 0 bytes 0 : jump ssh_input, * counter packets 0 bytes 0 : drop } } chain ssh_input { } chain wan_input { tcp dport vmap @portmap } chain prerouting { type filter hook prerouting priority raw; pranimi i politikës; iif vmap { "lo" : kërce wan_input } }
  • U shtua komanda "lista hooks" për të shfaqur një listë të mbajtësve për një familje të caktuar paketash: # nft list hooks ip pajisjen eth0 ip të familjes { hook ingress { +0000000010 zinxhir netdev xy [nf_tabela] +0000000300 inet zinxhir mw [nf_t hyrje] {-0000000100 Zinxhiri IP AB [nf_tables] +0000000300 Zinxhiri inet mz [nf_tables]} goditje përpara {-0000000225 SELINUX_IPV4_FORWARD 0000000000 Zinxhiri IP AC [NF_TABLES]} OUTPUTI I HOOD {-0000000225 postroute}}
  • Blloqet e radhës lejojnë që shprehjet jhash, symhash dhe numgen të kombinohen për të shpërndarë paketat në radhë në hapësirën e përdoruesit. … radhë në symhash mod 65536 … rradhë flamuj anashkalojnë në numgen inc mod 65536 … radhë për jhash oif . meta mark mod 32 "radha" gjithashtu mund të kombinohet me listat e hartave për të zgjedhur një radhë në hapësirën e përdoruesit bazuar në çelësat arbitrarë. ... radha shënon anashkalimin e hartës oifname { "eth0" : 0, "ppp0" : 2, "eth1" : 2 }
  • Është e mundur të zgjerohen variablat që përfshijnë një listë grupesh në disa harta. define ndërfaqet = { eth0, eth1 } tabela ip x { zinxhir y { tipi prioritet i hyrjes së fiksimit të filtrit 0; pranimi i politikës; iifname vmap { lo : pranoj, $interfaces : drop } } } # nft -f x.nft # nft lista e rregullave tabela ip x { zinxhiri y { type prioriteti i hyrjes së fiksimit të filtrit 0; pranimi i politikës; iifname vmap { "lo" : pranoj, "eth0" : drop, "eth1" : drop } }
  • Kombinimi i vmaps (harta e verdikteve) në intervale lejohet: # nft shtoni rregullin xy tcp dport . ip saddr vmap {1025-65535. 192.168.10.2 : prano }
  • Sintaksë e thjeshtuar për hartëzimin NAT. Lejohet të specifikojë vargjet e adresave: ... snat në ip saddr map { 10.141.11.4 : 192.168.2.2-192.168.2.4 } ose adresa IP të qarta dhe portet: ... dnat në ip saddr map { 10.141.11.4:192.168.2.3. . 80 } ose kombinime të intervaleve IP dhe porteve: ... dnat në ip saddr . tcp dport map { 192.168.1.2 . 80: 10.141.10.2-10.141.10.5. 8888-8999 }

Burimi: opennet.ru

Shto një koment