Udgaven af pakkefilter nftables 1.0.6 er offentliggjort, hvilket standardiserer filtreringsgrænseflader for IPv4, IPv6, ARP og netværksbroer (målet er at erstatte iptables, ip6tables, arptables og ebtables). Pakket nftables indeholder komponenter til pakkefiltre, der fungerer i brugerrummet, mens nf_tables subsystemet i kernen varetager driften, som er en del af Linux-kernen siden version 3.13. I kernen gives kun en generel grænseflade, der ikke er afhængig af et specifikt protokol og tilbyder grundlæggende funktioner til udtræk af data fra pakker, udførelse af operationer med data og flowkontrol.
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:
- I regeloptimereren, der kaldes ved at angive optionen "-o/—optimize", er der etableret automatisk pakning af regler gennem deres sammenlægning og omdannelse til map- og set-lister. For eksempel vil reglerne # cat ruleset.nft table ip x { chain y { type filter hook input priority filter; policy drop; meta iifname eth1 ip saddr 1.1.1.1 ip daddr 2.2.2.3 accept meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.2.4 accept meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.3.0/24 accept meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.4.0-2.2.4.10 accept meta iifname eth2 ip saddr 1.1.1.3 ip daddr 2.2.2.5 accept } } efter udførelsen af "nft -o -c -f ruleset.nft" blive omdannet til følgende: ruleset.nft:4:17-74: meta iifname eth1 ip saddr 1.1.1.1 ip daddr 2.2.2.3 accept ruleset.nft:5:17-74: meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.2.4 accept ruleset.nft:6:17-77: meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.3.0/24 accept ruleset.nft:7:17-83: meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.4.0-2.2.4.10 accept ruleset.nft:8:17-74: meta iifname eth2 ip saddr 1.1.1.3 ip daddr 2.2.2.5 accept ind iifname . ip saddr . ip daddr { eth1 . 1.1.1.1 . 2.2.2.3, eth1 . 1.1.1.2 . 2.2.2.4, eth1 . 1.1.1.2 . 2.2.3.0/24, eth1 . 1.1.1.2 . 2.2.4.0-2.2.4.10, eth2 . 1.1.1.3 . 2.2.2.5 } accept
- Optimeringsværktøjet kan også omdanne regler, der allerede bruger enkle set-lister, til en mere kompakt form, for eksempel reglerne: # cat ruleset.nft table ip filter { chain input { type filter hook input priority filter; policy drop; iifname «lo» accept ct state established,related accept comment «I trafikken har vi tillid til, at vi stammer fra» iifname «enp0s31f6» ip saddr { 209.115.181.102, 216.197.228.230 } ip daddr 10.0.0.149 udp sport 123 udp dport 32768-65535 accept iifname «enp0s31f6» ip saddr { 64.59.144.17, 64.59.150.133 } ip daddr 10.0.0.149 udp sport 53 udp dport 32768-65535 accept } } Efter at have kørt «nft -o -c -f ruleset.nft» vil det blive pakket på følgende måde: ruleset.nft:6:22-149: iifname «enp0s31f6» ip saddr { 209.115.181.102, 216.197.228.230 } ip daddr 10.0.0.149 udp sport 123 udp dport 32768-65535 accept ruleset.nft:7:22-143: iifname «enp0s31f6» ip saddr { 64.59.144.17, 64.59.150.133 } ip daddr 10.0.0.149 udp sport 53 udp dport 32768-65535 accept til: iifname . ip saddr . ip daddr . udp sport . udp dport { enp0s31f6 . 209.115.181.102 . 10.0.0.149 . 123 . 32768-65535, enp0s31f6 . 216.197.228.230 . 10.0.0.149 . 123 . 32768-65535, enp0s31f6 . 64.59.144.17 . 10.0.0.149 . 53 . 32768-65535, enp0s31f6 . 64.59.150.133 . 10.0.0.149 . 53 . 32768-65535 } accept
- Problemet med generation af byte-kode for sammensmeltning af intervaller, som bruger typer med forskellig byte-orden, som for eksempel IPv4 (netværks byte-orden) og meta mark (system byte-orden), er blevet løst. table ip x { map w { typeof ip saddr . meta mark : verdict flags interval counter elements = { 127.0.0.1-127.0.0.4 . 0x123434-0xb00122 : accept, 192.168.0.10-192.168.1.20 . 0x0000aa00-0x0000aaff : accept, } } chain k { type filter hook input priority filter; policy drop; ip saddr . meta mark vmap @w } }
- Der er etableret matchning af sjældne protokoller ved brug af rå udtryk, for eksempel: meta l4proto 91 @th,400,16 0x0 accept
- Problemerne med at inkludere regler med intervaller er blevet løst: insert rule x y tcp sport { 3478-3497, 16384-16387 } counter accept
- API'et til JSON er forbedret, da det nu understøtter udtryk i set- og map-lister.
- I udvidelserne til python-biblioteket nftables er det muligt at indlæse sæt regler til behandling i kontroltilstand («-c») og der er tilføjet støtte til ekstern definition af variabler.
- Det er nu tilladt at tilføje kommentarer i elementerne i set-lister.
- Det er tilladt at angive en værdi på nul i byte ratelimit.
Kilde: opennet.ru
