Vydání paketového filtru nftables 1.0.3

Bylo zveřejněno vydání paketového filtru nftables 1.0.3 sjednocující rozhraní pro filtrování paketů pro IPv4, IPv6, ARP a síťové mosty (zaměřené na nahrazení iptables, ip6table, arptables a ebtables). Změny požadované pro fungování vydání nftables 1.0.3 jsou zahrnuty v jádře Linuxu 5.18.

Balíček nftables obsahuje komponenty paketového filtru, které běží v uživatelském prostoru, zatímco práci na úrovni jádra zajišťuje subsystém nf_tables, který je součástí linuxového jádra od vydání 3.13. Úroveň jádra poskytuje pouze generické rozhraní nezávislé na protokolu, které poskytuje základní funkce pro extrakci dat z paketů, provádění operací s daty a řízení toku.

Filtrovací pravidla a obslužné rutiny specifické pro protokol jsou zkompilovány do bajtového kódu v uživatelském prostoru, poté je tento bajtový kód načten do jádra pomocí rozhraní Netlink a spuštěn v jádře ve speciálním virtuálním stroji připomínajícím BPF (Berkeley Packet Filters). Tento přístup umožňuje výrazně zmenšit velikost filtrovacího kódu běžícího na úrovni jádra a přesunout všechny funkce parsovacích pravidel a logiky pro práci s protokoly do uživatelského prostoru.

Hlavní inovace:

  • Seznamy sad nyní podporují shodu názvů síťových rozhraní pomocí masky, například zadané pomocí symbolu „*“: tabulka inet testifsets { set simple_wild { typ ifname flags interval elements = { „abcdef*“, „othername“, „ppp0“ } } chain v4icmp { type filter hook input priority 0; přijmout politiku; iifname @simple_wild čítačové pakety 0 bajtů 0 iifname { “abcdef*”, “eth0” } čítačové pakety 0 bajtů 0 } }
  • Implementováno automatické slučování protínajících se prvků set-listu za provozu. Dříve, když byla nastavena možnost „automatické sloučení“, se sloučení provádělo ve fázi deklarace pravidel, ale nyní funguje i při postupném přidávání nových prvků během provozu. Například ve fázi deklarace sada seznamu y { příznaky automatického sloučení prvků = { 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 } } se změní na prvky = { 1.2.3.0/24, 3.3.3.3-3.3.3.5, 4.4.4.4-4.4.4.8 } a poté, pokud přidáte nové prvky, # nft přidejte prvek ip x y { 1.2.3.0 -1.2.4.255, 3.3.3.6 } bude vypadat jako prvky = { 1.2.3.0-1.2.4.255, 3.3.3.3-3.3.3.6, 4.4.4.4-4.4.4.8 }

    Když ze seznamu odeberete jednotlivé položky, které spadají do existujících položek rozsahu, rozsah se zkrátí nebo rozdělí.

  • Do optimalizátoru pravidel, který se volá, když je zadána volba „-o/—optimize“, byla přidána podpora pro kombinování pravidel překladu více adres (NAT) do seznamu map. Například pro sadu # cat ruleset.nft table ip x { chain y { type nat hook postrouting priority srcnat; pokles politiky; ip saddr 1.1.1.1 tcp dport 8000 snat na 4.4.4.4:80 ip saddr 2.2.2.2 tcp dport 8001 snat na 5.5.5.5:90 } }

    spuštění „nft -o -c -f ruleset.nft“ převede samostatná pravidla „ip saddr“ na seznam map: snat na 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}

    Podobně lze nezpracované výrazy převést na seznamy map: # cat ruleset.nft table ip x { […] chain nat_dns_acme { délka udp 47-63 @th,160,128 0x0e373135363130333131303735353203 ns_62 goto nst_78th,160,128udp nst_0th,0udp nst_31393032383939353831343037320th 5301x62e78e goto nat_dns_this_160,128 délka udp 0-0 @th,31363436323733373931323934300 5301x62e78e goto nat_dns_saturn_160,128 délka udp 0 0 32393535373539353636383732310e goto nat_dns_saturn_5302 délka udp 62-78 @th,160,128 0x0e38353439353637323038363633390e goto nat_5303}s

    po optimalizaci získáme seznam map: délka 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 }

  • Použití nezpracovaných výrazů v operacích zřetězení je povoleno. Například: # nft add rule x y ip saddr . @ih,32,32 { 1.1.1.1 . 0x14, 2.2.2.2. 0x1e } nebo tabulka x { set y { typeof ip saddr . @ih,32,32 prvků = { 1.1.1.1 . 0x14 } } }
  • Přidána podpora pro specifikaci celočíselných polí záhlaví v operacích zřetězení: tabulka inet t { mapa m1 { typ délky udp . @ih,32,32 : verdikt označuje intervalové prvky = { 20-80 . 0x14: přijmout, 1-10. 0xa : drop } } chain c { type filter hook input priority 0; pokles politiky; délka udp. @ih,32,32 vmap @m1 } }
  • Přidána podpora pro resetování TCP voleb (funguje pouze s linuxovým jádrem 5.18+): tcp flags syn reset tcp option sack-perm
  • Provádění řetězových výstupních příkazů („nft list chain x y“) bylo zrychleno.

Zdroj: opennet.ru

Přidat komentář