Utgivningen av paketfiltreringssystemet nftables 1.0.3 Àr offentliggjord, som standardiserar paketfiltreringsgrÀnssnitt för IPv4, IPv6, ARP och nÀtverksbroar (inriktad pÄ att ersÀtta iptables, ip6table, arptables och ebtables). NödvÀndiga Àndringar för att anvÀnda nftables 1.0.3 ingÄr i Linux-kÀrnan 5.18.
Paketet nftables innehÄller komponenter för paketfilter som arbetar i anvÀndarrummet, medan nf_tables-systemet pÄ kÀrnnivÄ tillhandahÄller funktionen, vilket har varit en del av Linux-kÀrnan sedan version 3.13. PÄ kÀrnnivÄ tillhandahÄlls endast ett allmÀnt grÀnssnitt, oberoende av protokoll, som ger grundlÀggande funktioner för att extrahera data frÄn paket, utföra operationer med data och styra flödet.
SjÀlva filtreringsreglerna och protokollspecifika hanterare kompileras till bytekod i anvÀndarrummet, som sedan laddas in i kÀrnan via Netlink-grÀnssnittet och utförs i kÀrnan i en speciell en virtuell maskin, liknande BPF (Berkeley Packet Filters). Denna metod gör det möjligt att avsevÀrt minska storleken pÄ den filterkod som körs pÄ kÀrnnivÄ och flytta alla funktioner för tolkning av regler och logik som rör protokoll till anvÀndarrummet.
Huvudsakliga nyheter:
- Det har lagts till stöd för att matcha namn pÄ nÀtverksgrÀnssnitt baserat pÄ mask i set-listor, till exempel angivet med symbolen '*': 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 } }
- Automatisk sammanslagning av överlappande element i set-listor har realiserats under drift. Tidigare gjordes sammanslagningen nÀr alternativet "auto-merge" angavs under regelframtagningen, men nu aktiveras den Àven vid inkrementell tillÀgg av nya element under drift. Till exempel, vid deklaration görs listan 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 } } om till elements = { 1.2.3.0/24, 3.3.3.3-3.3.3.5, 4.4.4.4-4.4.4.8 } och om nya element sedan lÀggs till # nft add element ip x y { 1.2.3.0-1.2.4.255, 3.3.3.6 } ser den ut som 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 }
Vid borttagning av individuella element frÄn listan, som hamnar inom befintliga element med intervall, kommer intervallet att förkortas eller delas upp.
- I regelförbÀttraren, som aktiveras med alternativet "-o/--optimize", har stöd lagts till för att slÄ samman flera regler för adressöversÀttning (NAT) i map-listor. Till exempel, för uppsÀttningen # 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 } }
att utföra "nft -o -c -f ruleset.nft" kommer att omvandla separata regler för "ip saddr" till en map-lista: 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 }
PĂ„ liknande sĂ€tt kan raw-uttryck konverteras till map-listor: # 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 } }
Efter optimeringen fÄr vi map-lista: 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 }
- AnvÀndning av raw-uttryck i konkateneringsoperationer Àr tillÄten. Till exempel: # nft add rule x y ip saddr . @ih,32,32 { 1.1.1.1 . 0x14, 2.2.2.2 . 0x1e } eller table x { set y { typeof ip saddr . @ih,32,32 elements = { 1.1.1.1 . 0x14 } } }
- Stöd har lagts till för att ange heltalsfÀlt i huvudena i konkateneringsoperationer: 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 } }
- Stöd för att ÄterstÀlla TCP-alternativ (fungerar endast med Linux-kÀrna 5.18+) har lagts till: tcp flags syn reset tcp option sack-perm
- Utförandet av kommandon för att lista kedjor («nft list chain x y») har snabbats upp.
KĂ€lla: opennet.ru
