nftables pakettfiltri 1.0.3 väljalase

Avaldatud on paketifiltri nftables 1.0.3 väljalase, mis ühendab IPv4, IPv6, ARP ja võrgusildade pakettide filtreerimise liidesed (eesmärk on asendada iptables, ip6table, arptables ja ebtables). Nftables 1.0.3 väljalaske toimimiseks vajalikud muudatused sisalduvad Linuxi 5.18 kernelis.

Pakett nftables sisaldab pakettfiltri komponente, mis töötavad kasutajaruumis, samas kui kerneli tasemel töö tagab alamsüsteem nf_tables, mis on Linuxi kerneli osa olnud alates versioonist 3.13. Kerneli tase pakub ainult üldist protokollist sõltumatut liidest, mis pakub põhifunktsioone pakettidest andmete eraldamiseks, andmetoimingute tegemiseks ja voo juhtimiseks.

Filtreerimisreeglid ja protokollispetsiifilised töötlejad kompileeritakse kasutajaruumis baitkoodiks, misjärel laaditakse see baitkood Netlink liidese abil kernelisse ja käivitatakse kernelis spetsiaalses BPF-i meenutavas virtuaalmasinas (Berkeley Packet Filters). Selline lähenemine võimaldab oluliselt vähendada kerneli tasemel töötava filtreerimiskoodi suurust ning teisaldada kõik sõelumisreeglite ja protokollidega töötamise loogika funktsioonid kasutajaruumi.

Peamised uuendused:

  • Komplektide loendid toetavad nüüd võrguliidese nimede sobitamist maski abil, näiteks määratud sümboliga “*”: table inet testifsets { set simple_wild { type ifname flags interval elements = { “abcdef*”, “othername”, “ppp0” } } chain v4icmp { type filter hook input priority 0; poliitika aktsepteerima; iifname @simple_wild loenduri paketid 0 baiti 0 iifname { “abcdef*”, “eth0” } loenduri paketid 0 baiti 0 } }
  • Rakendatud ristuvate komplektiloendi elementide automaatne ühendamine töö ajal. Kui varem oli seatud suvand "automaatne liitmine", viidi liitmine läbi reeglite deklareerimise etapis, kuid nüüd toimib see ka siis, kui töö käigus lisatakse järk-järgult uusi elemente. Näiteks deklareerimisetapis on loendi komplekt 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 } } muudetakse elementideks = { 1.2.3.0/24, 3.3.3.3-3.3.3.5, 4.4.4.4-4.4.4.8 } ja kui lisate uusi elemente # nft lisa element ip xy { 1.2.3.0 -1.2.4.255, 3.3.3.6 } näeb välja nagu elemendid = { 1.2.3.0-1.2.4.255, 3.3.3.3-3.3.3.6, 4.4.4.4-4.4.4.8 }

    Kui eemaldate loendist üksikud üksused, mis kuuluvad olemasolevate vahemiku üksuste alla, vahemik lühendatakse või jaotatakse.

  • Reeglite optimeerijasse on lisatud tugi mitme aadressi tõlke (NAT) reegli ühendamiseks kaardiloendiks, mida kutsutakse välja, kui on määratud suvand "-o/—optimize". Näiteks komplekti # cat rulett.nft tabeli jaoks ip x { chain y { type nat hook postrouting priority srcnat; poliitika langus; ip saddr 1.1.1.1 tcp dport 8000 snat kuni 4.4.4.4:80 ip saddr 2.2.2.2 tcp dport 8001 snat 5.5.5.5:90 } }

    käsu "nft -o -c -f ruleset.nft" täitmine teisendab eraldi "ip saddr" reeglid kaardiloendiks: snat kuni ip saddr . tcp dport map { 1.1.1.1 . 8000: 4.4.4.4. 80, 2.2.2.2. 8001: 5.5.5.5. 90}

    Samamoodi saab töötlemata avaldisi teisendada kaardiloenditeks: # cat rulett.nft tabel ip x { […] ahel nat_dns_acme { udp pikkus 47-63 @th,160,128 0x0e373135363130333131303735353203 goth 62p_dnths ,78 160,128x0e0e goto nat_dns_this_31393032383939353831343037320 udp pikkus 5301-62 @th,78 160,128x0e0e goto nat_dns_saturn_31363436323733373931323934300 udp pikkus 5301-62 @th,78 160,128 0 0 32393535373539353636383732310 5302 62e goto nat_dns_saturn_78 udp pikkus 160,128-0 @th,0 38353439353637323038363633390x5303eXNUMXe goto nat_dns_saturn} drop_XNUMX_XNUMX

    peale optimeerimist saame kaardiloendi: udp pikkus . @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 }

  • Tooravaldiste kasutamine konkateneerimisoperatsioonides on lubatud. Näiteks: #nft lisa reegel xy ip saddr. @ih,32,32 { 1.1.1.1 . 0x14, 2.2.2.2 . 0x1e } või tabel x { set y { typeof ip saddr . @ih,32,32 elementi = { 1.1.1.1 . 0x14 } } }
  • Lisatud on toetus täisarvu päise väljade määramiseks liitmisoperatsioonides: table inet t { map m1 { typeof udp length . @ih,32,32 : otsus märgib intervalli elemendid = { 20-80 . 0x14 : aktsepteeri, 1-10 . 0xa : drop } } chain c { type filter hook input priority 0; poliitika langus; udp pikkus. @ih,32,32 vmap @m1 } }
  • Lisatud tugi TCP-suvandite lähtestamiseks (töötab ainult Linuxi kerneliga 5.18+): tcp lipud sün lähtestamine tcp valik sack-perm
  • Ahelväljundkäskude („nft list chain xy”) täitmist on kiirendatud.

Allikas: opennet.ru

Lisa kommentaar