Vydanie paketového filtra nftables 1.0.3

Bolo zverejnené vydanie paketového filtra nftables 1.0.3, ktoré unifikuje rozhrania filtrování paketov pre IPv4, IPv6, ARP a sieťové mosty (cielené na nahradenie iptables, ip6tables, arptables a ebtables). Nevyhnutné zmeny pre fungovanie vydania nftables 1.0.3 sú súčasťou jadra Linux 5.18.

Balík nftables zahŕňa komponenty balíkového filtra pracujúce v užívateľskom priestore, zatiaľ čo na úrovni jadra zabezpečuje činnosť subsystém nf_tables, ktorý je súčasťou jadra Linux od verzie 3.13. Na úrovni jadra je poskytované iba všeobecné rozhranie, nezávislé od konkrétneho protokolu a poskytujúce základné funkcie na získavanie údajov z paketov, vykonávanie operácií s údajmi a riadenie toku.

Pravidlá filtrácie a špecifické spracovateľské moduly pre protokoly sú kompilované do bajtkódu v užívateľskom priestore, po čom je tento bajtkód načítaný do jadra pomocou rozhrania Netlink a vykonáva sa v jadre na špeciálnom virtuálnom stroji, pripomínajúcom BPF (Berkeley Packet Filters). Takýto prístup umožňuje významne znížiť veľkosť kódu filtrácie, ktorý funguje na úrovni jadra a preniesť všetky funkcie parsovania pravidiel a logiky práce s protokolmi do užívateľského priestoru.

Hlavné novinky:

  • V set-zoznamoch sa objavila podpora porovnávania názvov sieťových rozhraní pomocou masky, napríklad uvedenej so symbolom „*“: table inet testifsets { set simple_wild { type ifname flags interval elements = { „abcdef*“, „othername“, „ppp0“ } } chain v4icmp { type filter hook input priority 0; policy accept; iifname @simple_wild counter packets 0 bytes 0 iifname { „abcdef*“, „eth0“ } counter packets 0 bytes 0 } }
  • Bola implementovaná automatická fúzia prekrývajúcich sa prvkov set-zoznamu v priebehu činnosti. Predtým, pri uvedení možnosti „auto-merge“, sa fúzia vykonávala v štádiu vyhlásenia pravidiel, teraz sa spúšťa aj pri inkrementálnom pridávaní nových prvkov v procese činnosti. Napríklad, v štádiu vyhlásenia zoznam set 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 } } bude premenený na elements = { 1.2.3.0/24, 3.3.3.3-3.3.3.5, 4.4.4.4-4.4.4.8 } a potom, ak sa pridajú nové prvky # nft add element ip x y { 1.2.3.0-1.2.4.255, 3.3.3.6 } nadobudne podobu elements = { 1.2.3.0-1.2.4.255, 3.3.3.3-3.3.3.6, 4.4.4.4-4.4.4.8 }

    Pri odstraňovaní jednotlivých prvkov z zoznamu, ktoré spadajú do existujúcich prvkov s rozsahmi, sa rozsah skráti alebo rozdelí.

  • Do optimalizátora pravidiel, ktorý sa vyvoláva pri uvedení voľby „-o/—optimize“, bola pridaná podpora na zlúčenie niekoľkých pravidiel pre preklad adries (NAT) do map-zoznamu. Napríklad pre súbor # cat ruleset.nft table ip x { chain y { type nat hook postrouting priority srcnat; policy drop; ip saddr 1.1.1.1 tcp dport 8000 snat to 4.4.4.4:80 ip saddr 2.2.2.2 tcp dport 8001 snat to 5.5.5.5:90 } }

    vykonanie „nft -o -c -f ruleset.nft“ povedie k transformácii samostatných pravidiel „ip saddr“ na map-zoznam: snat to 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 }

    Podobne aj raw výrazy môžu byť prevádzané do map-zoznamov: # cat ruleset.nft table ip x { […] chain nat_dns_acme { udp length 47-63 @th,160,128 0x0e373135363130333131303735353203 goto nat_dns_dnstc udp length 62-78 @th,160,128 0x0e31393032383939353831343037320e goto nat_dns_this_5301 udp length 62-78 @th,160,128 0x0e31363436323733373931323934300e goto nat_dns_saturn_5301 udp length 62-78 @th,160,128 0x0e32393535373539353636383732310e goto nat_dns_saturn_5302 udp length 62-78 @th,160,128 0x0e38353439353637323038363633390e goto nat_dns_saturn_5303 drop } }

    Po optimalizácii dostaneme map-zoznam: udp length . @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 }

  • Povolené je používanie raw výrazov v operáciách konkatinácie. Napríklad: # nft add rule x y ip saddr . @ih,32,32 { 1.1.1.1 . 0x14, 2.2.2.2 . 0x1e } alebo table x { set y { typeof ip saddr . @ih,32,32 elements = { 1.1.1.1 . 0x14 } } }
  • Pridaná podpora uvádzania celočíselných polí hlavičiek v operáciách konkatinácie: table inet t { map m1 { typeof udp length . @ih,32,32 : verdict flags interval elements = { 20-80 . 0x14 : accept, 1-10 . 0xa : drop } } chain c { type filter hook input priority 0; policy drop; udp length . @ih,32,32 vmap @m1 } }
  • Pridaná podpora resetovania TCP možností (funguje iba pri jadre Linux 5.18+): tcp flags syn reset tcp option sack-perm
  • Zrýchlené vykonávanie príkazov na výstup reťazcov ("nft list chain x y").

Zdroj: opennet.ru

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster