Udgivelsen af den batch-filter nftables 1.1.0 er offentliggjort, som ensretter filtreringsgrænsefladerne for IPv4, IPv6, ARP og netværksbroer (med henblik på at erstatte iptables, ip6table, arptables og ebtables). Den betydelige ændring i versionsnummeret er ikke relateret til nogen fundamentale ændringer, men er blot et resultat af en fortsættelse af nummereringen i decimalform (den tidligere udgivelse var 1.0.9). Samtidig blev udgivelsen af det tilknyttede bibliotek libnftnl 1.2.7 offentliggjort, som tilbyder et lavniveau API til interaktion med nf_tables subsystemet.
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.
Vigtige ændringer:
- Der er tilføjet understøttelse af variabler i map-udtryk: 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 } }
- VLAN-understøttelse er blevet tilføjet: 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
- For "log" udtryk er der blevet aktiveret en ny streng preprocesser med understøttelse af variabler: define message=»test» log prefix «my $message»
- Ved beregning af værdien for udtrykket "meta hour" er der implementeret behandling af negativ offset i den tidszone, der er angivet gennem miljøvariablen TZ: TZ=UTC-4 nft add rule x y meta hour «22:00»
- Der er sikret konvertering af byte rækkefølge ved brug af udtryk ct og meta, samt ved brug af fusion operationer og angivelse af intervaller i set-sæt. map mapv6 { typeof ip6 dscp : meta mark; } meta mark set ip6 dscp map @map1 vil producere bytekode: [ 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 ]
- Understøttelsen af kommandoen "replace rule" er genoptaget. 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 }’
- Muligheden for at tilføje netværksenheder til eksisterende flowtable er blevet genoptaget: create flowtable inet filter f1 { hook ingress priority 0; counter } add flowtable inet filter f1 { devices = { dummy1 } ; }
- Problemer ved brug af kommandoen "create set" er blevet løst: 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 }
- Problemer ved brug af den numeriske repræsentation af tcp-optioner er blevet løst: tcp option 254
- Problemer ved brug af udtryk meta og ct med map-sæt er blevet løst: meta mark set vlan id map { 1 : 0x00000001, 4095 : 0x00004095 }
- I udtryk må payload og concat ikke angive data, der overstiger 512 bytes.
- Når du udfører kommandoen «nft describe», er der implementeret hensyntagen til værdier fra filerne group, rt_mark og rt_realms, der findes i mapperne /etc/iproute2/ og /use/share/iproute2/. # nft describe meta rtclassid meta expression, datatype realm (routing realm) (basetype integer), 32 bits foruddefinerede symbolske konstanter fra /etc/iproute2/rt_realms (i decimal): cosmos 0 Afvise erklæring med interval meta mark set 0-100
- Operationen til at vise listen over tabeller er blevet accelereret. Der er implementeret støtte til optionerne -t/—terse for at fremskynde kommandoerne «list table» og «list set».
- Der er sikret konvertering af måleudtryk til dynamiske sæt: add rule t c tcp dport 80 meter m size 128 { ip saddr timeout 2s limit rate 10/second } vil blive konverteret til 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 er der tilføjet støtte til objekter synproxy og map-sæt med sammenlagte data.
- I de sæt, der er angivet i JSON-format, er der implementeret støtte for flaget auto-merge.
- Ved brug af JSON-formatet er det tilladt at angive flere enheder i blokken «chain».
- Ved brug af optionerne -f/—filename behandles stier nu i forhold til kataloget for den aktuelle fil.
- Ved brug af optionerne -I/—include udføres iteration af stier som standard nu fra slutningen af listen.
- Funktionen for optionerne -o/—optimize er blevet forbedret i udtryk, der indeholder værdizælere: # nft -c -o -f ruleset.nft Sammenlægning: ruleset.nft:5:17-45: ct state invalid counter drop ruleset.nft:6:17-59: ct state established,related counter accept til: ct state vmap { invalid counter : drop, established counter : accept, related counter : accept } Sammenlægning: ruleset.nft:7:17-43: tcp dport 80 counter accept ruleset.nft:8:17-44: tcp dport 123 counter accept til: tcp dport { 80, 123 } counter accept Sammenlægning: 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 til: 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 dumps af sæt-elementer oprettet i nftables før version 0.9.8 er blevet gendannet.
Kilde: opennet.ru
