Udgivet er version 1.0.3 af pakkefilteret nftables, som forener filtreringsgrænsefladerne for IPv4, IPv6, ARP og netværksbroer (sigter mod at erstatte iptables, ip6table, arptables og ebtables). Nødvendige ændringer for at få nftables 1.0.3 til at fungere er inkluderet i Linux-kernen 5.18.
Nftables-pakken inkluderer komponenter af pakke filtreringssystemet, der kører i brugerområdet, mens nf_tables subsystemet i kernen håndterer operationer i Linux kernen fra version 3.13. I kernen tilbydes kun et generelt interface, der ikke er afhængigt af en specifik protokol og giver grundlæggende funktioner til at hente data fra pakker, udføre dataoperationer og styre strømmen.
Reglerne for filtrering og protokolspecifikke behandlere kompileres til bytekode i brugerområdet, hvorefter denne bytekode indlæses i kernen ved hjælp af Netlink-interfacet og udføres i kernen i en særlig virtuelle maskiner, der minder om BPF (Berkeley Packet Filters). Denne tilgang muliggør en betydelig reduktion i størrelsen af den filtrering, der kører i kernen, og flytter alle funktioner til parsing af regler og logik til håndtering af protokoller til brugerområdet.
Hovednyhederne:
- I set-listerne er der nu støtte til at matche netværksinterface-navne ved hjælp af masker, for eksempel angivet med symbolet '*': 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 } }
- Der er implementeret automatisk sammenlægning af overlappende elementer i set-listen under drift. Tidligere, når indstillingen "auto-merge" blev aktiveret, blev sammenslutningen udført ved regeldefinition, men nu aktiveres den også ved inkrementel tilføjelse af nye elementer under drift. For eksempel på tidspunktet for definitionen vil listen 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 } } blive omdannet til elements = { 1.2.3.0/24, 3.3.3.3-3.3.3.5, 4.4.4.4-4.4.4.8 } og derefter, hvis nye elementer tilføjes # nft add element ip x y { 1.2.3.0-1.2.4.255, 3.3.3.6 } vil det tage form af 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 }
Når individuelle elementer fjernes fra listen, der falder ind under eksisterende elementer med intervaller, forkortes eller deles intervallet.
- I regeloptimeringsværktøjet, der kaldes ved angivelse af indstillingen "-o/—optimize", er der tilføjet støtte til at kombinere flere NAT-regler i en map-liste. For eksempel for sættet # 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 } }
udførelsen af "nft -o -c -f ruleset.nft" vil føre til omdannelsen af separate "ip saddr" regler til en map-liste: snat til 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å samme måde kan map-lister også konvertere raw-udtryk: # 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-listen: 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 }
- Brug af raw-udtryk er tilladt i konkateneringsoperationer. For eksempel: # 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 } } }
- Understøttelse af angivelse af heltalsfelter i headerne er tilføjet til 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 } }
- Understøttelse af nulstilling af TCP-indstillinger (fungerer kun med Linux-kernen 5.18+): tcp flags syn reset tcp option sack-perm
- Udførelsen af kommandoer til at vise kæder ('nft list chain x y') er blevet accelereret.
Kilde: opennet.ru
