En utgÄva av paketfilter nftables 1.1.0 har publicerats, som standardiserar grÀnssnitten för paketfiltrering för IPv4, IPv6, ARP och nÀtverksbroar (syftar till att ersÀtta iptables, ip6tables, arptables och ebtables). Den betydande versionsÀndringen Äterspeglar ingen djupgÄende förÀndring utan Àr bara en följd av den fortsatta nummerserien i decimalform (den föregÄende versionen var 1.0.9). Samtidigt publicerades en utgÄva av den tillhörande biblioteket libnftnl 1.2.7, som tillhandahÄller ett lÄgnivÄ-API för interaktion med nf_tables subsystemet.
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 förÀndringar:
- Stöd för variabler har lagts till i map-uttryck: define dst_map = { ::1234 : 5678 } table ip6 nat { map dst_map { typeof ip6 daddr : tcp dport; elements = $dst_map } chain prerouting { ip6 nexthdr tcp redirect to ip6 daddr map @dst_map } }
- Stöd för VLAN har lagts till: ip saddr 10.1.1.1 icmp type echo-request vlan id set 321 # payload ether type 8021ad vlan id 10 vlan type 8021q vlan id 100 vlan type ip accept
- Ett nytt strÀng-förbehandlingsverktyg med stöd för variabler har anvÀnts för uttryck "log": define message=»test» log prefix «my $message»
- Vid berÀkning av vÀrdet av uttrycket "meta hour" har hantering av negativ förskjutning i tidszon angiven via miljövariabeln TZ implementerats: TZ=UTC-4 nft add rule x y meta hour «22:00»
- Byteordningen har konverterats vid anvÀndning av uttryck ct och meta, samt vid anvÀndning av sammanslagningsoperationer och specificering av intervall i set-samlingar. map mapv6 { typeof ip6 dscp : meta mark; } meta mark set ip6 dscp map @map1 följande bytekod kommer att erhÄllas: [ payload load 2b @ network header + 0 => reg 1 ] [ bitwise reg 1 = ( reg 1 & 0x0000c00f ) ^ 0x00000000 ] [ byteorder reg 1 = ntoh(reg 1, 2, 2) ] [ bitwise reg 1 = ( reg 1 > 0x00000006 ) ] [ lookup reg 1 set mapv6 dreg 1 ] [ meta set mark with reg 1 ]
- Stödet för kommandot "replace rule" har Ă„terupptagits. replace rule ip t1 c1 handle 3 âjhash ip protocol . ip saddr mod 170 vmap { 0-94 : goto wan1, 95-169 : goto wan2, 170-269 }â
- Möjligheten att lÀgga till nÀtverksenheter i befintliga flowtable har Äterupptagits: create flowtable inet filter f1 { hook ingress priority 0; counter } add flowtable inet filter f1 { devices = { dummy1 } ; }
- Problem vid anvÀndning av kommandot "create set" har ÄtgÀrdats: define ip-block-4 = { 1.1.1.1 } create set netdev filter ip-block-4-test { type ipv4_addr flags interval auto-merge elements = $ip-block-4 }
- Problem vid anvÀndning av numerisk representation av TCP-alternativ har ÄtgÀrdats: tcp option 254
- Problem vid anvÀndning av uttrycken meta och ct med map-samlingar har ÄtgÀrdats: meta mark set vlan id map { 1 : 0x00000001, 4095 : 0x00004095 }
- I uttrycken payload och concat Àr det förbjudet att ange data större Àn 512 byte.
- Vid exekvering av kommandot «nft describe» har hantering av vÀrden frÄn filerna group, rt_mark och rt_realms implementerats, som ligger i katalogerna /etc/iproute2/ och /use/share/iproute2/. # nft describe meta rtclassid meta uttryck, datatyp realm (routing realm) (basistyp integer), 32 bitar fördefinierade symboliska konstanter frÄn /etc/iproute2/rt_realms (i decimal): cosmos 0 Avvisa uttalande med intervall meta mark set 0-100
- Operationen för att lista tabeller har accelererats. Stöd för alternativet -t/âterse har implementerats för att snabba upp kommandona «list table» och «list set».
- Det har möjliggjorts att konvertera meteruttryck till dynamiska set-strukturer: add rule t c tcp dport 80 meter m size 128 { ip saddr timeout 2s limit rate 10/second } kommer att konverteras till set m { type ipv4_addr size 128 flags dynamic,timeout } tcp dport 80 update @m { ip saddr timeout 2s limit rate 10/second burst 5 packets }
- I JSON-formatet har stödet för synproxy-objekt och map-strukturer med sammanfogade data lagts till.
- I set-strukturer som anges i JSON-formatet har stöd för flaggan auto-merge implementerats.
- Vid anvÀndning av JSON-formatet Àr det tillÄtet att ange flera enheter i blocket «chain».
- Vid anvĂ€ndning av alternativen -f/âfilename sĂ€kerstĂ€lls hanteringen av sökvĂ€gar relativt den aktuella filens katalog.
- Vid anvĂ€ndning av alternativen -I/âinclude sker iterationen av sökvĂ€gar nu frĂ„n slutet av listan.
- Arbetet med alternativen -o/âoptimize har förbĂ€ttrats med uttryck som innehĂ„ller rĂ€kneverk: # nft -c -o -f ruleset.nft SammanstĂ€llning: ruleset.nft:5:17-45: ct state invalid counter drop ruleset.nft :6:17-59: ct state established,related counter accept till: ct state vmap { invalid counter : drop, established counter : accept, related counter : accept } SammanstĂ€llning: ruleset.nft:7:17-43: tcp dport 80 counter accept ruleset.nft:8:17-44: tcp dport 123 counter accept till: tcp dport { 80, 123 } counter accept SammanstĂ€llning: ruleset.nft:9:17-64: ip saddr 1.1.1.1 ip daddr 2.2.2.2 counter accept ruleset.nft:10:17-62: ip saddr 1.1.1.2 ip daddr 3.3.3.3 counter drop till: ip saddr . ip daddr vmap { 1.1.1.1 . 2.2.2.2 counter : accept, 1.1.1.2 . 3.3.3.3 counter : drop }
- Kompatibiliteten med set-elementdumpningar som skapats i nftables innan version 0.9.8 har ÄterstÀllts.
KĂ€lla: opennet.ru
