udgivelse af pakkefilter , der udvikler sig som en erstatning for iptables, ip6tables, arptables og ebtables ved at forene grænsefladerne til pakkefiltrering for IPv4, IPv6, ARP og netværksbroer. Pakkens nftables indeholder komponenter til pakkefiltre, der arbejder i brugermiljøet, mens nf_tables under-systemet, der er en del af Linux-kernen siden version 3.13, sørger for funktionaliteten på kerne-niveau. De nødvendige ændringer til nftables 0.9.4 er inkluderet i en kommende kernetræ. .
På kerne-niveau tilbydes der kun en generel grænseflade, der ikke afhænger af et specifikt protokol og tilbyder grundlæggende funktioner til at udtrække data fra pakker, udføre operationer med data og styre strømmen. De faktiske filtreringsregler og protokolspecifikke håndterere kompileres til bytekode i brugermiljøet, hvorefter denne bytekode indlæses i kernen via Netlink-grænsefladen og udføres i kernen i en speciel virtuel maskine, der ligner BPF (Berkeley Packet Filters). Denne tilgang muliggør en betydelig reduktion af den kode, der kører på kerne-niveau, og flytter alle funktioner til regelparsing og logikken vedrørende protokoller ind i brugermiljøet.
Hovednyhederne:
- Understøttelse af intervaller i sammenføjninger (concatenation, specifikke adresser og porte, der forenkler matchning). For eksempel for et sæt "whitelist", hvor elementerne er en sammenføjning, vil angivelse af flaget "interval" indikere, at sættet kan inkludere intervaller i sammenføjningen (for sammenføjningen "ipv4_addr . ipv4_addr . inet_service" kunne man tidligere nævne præcise match som "192.168.10.35 . 192.68.11.123 . 80", men nu kan man angive grupper af adresser "192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125 . 80"):
tabel ip foo {
sæt whitelist {
type ipv4_addr . ipv4_addr . inet_service
flag interval
elementer = { 192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125 . 80 }
}kæde bar {
type filter hook prerouting prioritet filter; politik drop;
ip saddr . ip daddr . tcp dport @whitelist accept
}
} - I sæt og map-lister er muligheden for at bruge direktivet "typeof", der definerer elementets format ved matchning, sikret.
For eksempel:tabel ip foo {
sæt whitelist {
typeof ip saddr
elementer = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
}kæde bar {
type filter hook prerouting prioritet filter; politik drop;
ip daddr @whitelist accept
}
}tabel ip foo {
map addr2mark {
typeof ip saddr : meta mark
elementer = { 192.168.10.35 : 0x00000001, 192.168.10.135 : 0x00000002 }
}
} - Muligheden for at bruge tilslutninger i NAT-bindings er blevet tilføjet, hvilket gør det muligt at angive adresse og port, når man definerer NAT-transformationer baseret på map-lister eller navngivne sæt:
nft add rule ip nat pre dnat ip addr . port to ip saddr map { 1.1.1.1 : 2.2.2.2 . 30 }
nft add map ip nat destinations { type ipv4_addr . inet_service : ipv4_addr . inet_service \\; }
nft add rule ip nat pre dnat ip addr . port to ip saddr . tcp dport map @destinations - Understøttelse af hardware acceleration med overførsel af nogle filtreringsoperationer til netværkskortet. Accelerationen aktiveres via værktøjet ethtool ("ethtool -K eth0 hw-tc-offload on"), hvorefter det aktiveres i nftables for hovedkæden ved hjælp af flaget "offload". Ved brug af Linux 5.6-kernen understøttes hardware acceleration for feltnavnsafstemning og kontrol af den indkommende grænseflade kombineret med modtagelse, droppede pakker (dup) og omdirigering (fwd) af pakker. I eksemplet nedenfor udføres droppingen af pakker, der kommer fra adresse 192.168.30.20, på netværkskortniveau uden at sende pakkerne til kernen:
# cat file.nft
table netdev x {
chain y {
type filter hook ingress device eth0 priority 10; flags offload;
ip saddr 192.168.30.20 drop
}
}
# nft -f file.nft - Forbedret information om fejlstedet i reglerne.
# nft delete rule ip y z handle 7
Error: Kunne ikke behandle regel: Ingen sådan fil eller katalog
delete rule ip y z handle 7
^# nft delete rule ip x x handle 7
Error: Kunne ikke behandle regel: Ingen sådan fil eller katalog
delete rule ip x x handle 7
^# nft delete table twst
Error: Ingen sådan fil eller katalog; mente du tabel 'test' i familie ip?
delete table twst
^^^^Det første eksempel viser, at tabellen 'y' ikke findes i systemet, det andet, at behandleren '7' mangler, og det tredje, at der vises en forslag om en tastefejl ved indtastning af tabelnavnet.
- Understøttelse af kontrol af slave-interface er blevet tilføjet via angivelse af 'meta sdif' eller 'meta sdifname':
… meta sdifname vrf1 …
- Understøttelse af skift-operation til højre eller venstre er blevet tilføjet. For eksempel for at skifte en eksisterende pakke mærke til venstre med 1 bit og sætte den mindste bit til 1:
… meta mark set meta mark lshift 1 or 0x1 …
- Muligheden '-V' for at vise udvidet versionsinformation er blevet implementeret.
# nft -V
nftables v0.9.4 (Jive at Five)
cli: readline
json: yes
minigmp: no
libxtables: yes - Kommando-linje muligheder skal nu angives før kommandoerne. For eksempel skal man angive 'nft -a list ruleset', mens 'nft list ruleset -a' vil føre til en fejl.
Kilde: opennet.ru
