izlazak paketskog filtera , koji se razvija kao zamjena za iptables, ip6tables, arptables i ebtables kroz unifikaciju sučelja filtriranja paketa za IPv4, IPv6, ARP i mrežne mostove. U paket nftables uključeni su komponenti filtriranja paketa koji rade u korisničkom prostoru, dok na razini jezgre funkcionalnost osigurava podsustav nf_tables koji je dio Linux jezgre od verzije 3.13. Potrebne promjene za rad verzije nftables 0.9.4 uključene su u buduću granu jezgre. .
Na razini jezgre pruža se samo opće sučelje, neovisno o konkretnom protokolu, koje nudi osnovne funkcije za ekstrakciju podataka iz paketa, izvođenje operacija s podacima i upravljanje protokom. Pravila filtriranja i specifični procesori za protokole kompiliraju se u bajtkod u korisničkom prostoru, nakon čega se taj bajtkod učitava u jezgru putem Netlink sučelja i izvršava se u jezgru u posebnoj virtualnoj mašini, sličnoj BPF-u (Berkeley Packet Filters). Ovaj pristup omogućava značajno smanjenje veličine koda filtriranja koji radi na razini jezgre i premještanje svih funkcija analize pravila i logike rada s protokolima u korisnički prostor.
Glavne novine:
- Podrška za raspon u povezivanjima (concatenation, određene kombinacije adresa i portova, što pojednostavljuje usklađivanje). Na primjer, za skup 'whitelist', čiji su elementi povezivanje, specificiranje zastavice 'interval' značit će da skup može uključivati raspon u povezivanju (za povezivanje 'ipv4_addr . ipv4_addr . inet_service' prije se moglo nabrajati točne podudarnosti poput '192.168.10.35 . 192.68.11.123 . 80', a sada se mogu specificirati grupe adresa '192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125 . 80'):
table ip foo {
set whitelist {
type ipv4_addr . ipv4_addr . inet_service
flags interval
elements = { 192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125 . 80 }
}chain bar {
type filter hook prerouting priority filter; policy drop;
ip saddr . ip daddr . tcp dport @whitelist accept
}
} - U skupovima i map-listama omogućena je upotreba direktive 'typeof', koja definiše format elementa prilikom usklađivanja.
Na primjer:table ip foo {
set whitelist {
typeof ip saddr
elements = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
}chain bar {
type filter hook prerouting priority filter; policy drop;
ip daddr @whitelist accept
}
}table ip foo {
map addr2mark {
typeof ip saddr : meta mark
elements = { 192.168.10.35 : 0x00000001, 192.168.10.135 : 0x00000002 }
}
} - Dodana je mogućnost korištenja povezivanja u NAT povezivanju, što omogućuje specificiranje adrese i porta prilikom definiranja NAT transformacija na osnovi map-lista ili imenovanih skupova:
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 - Podrška za hardversko ubrzanje s delegiranjem nekih operacija filtriranja na mrežnu karticu. Ubrzanje se uključuje putem alata ethtool ('ethtool -K eth0 hw-tc-offload on'), nakon čega se aktivira u nftables za glavnu lanku pomoću zastavice 'offload'. Kada se koristi Linux jezgra 5.6, podržano je hardversko ubrzanje za usklađivanje polja zaglavlja i provjeru ulaznog sučelja u kombinaciji s primanjem, odbacivanjem, dupliciranjem (dup) i preusmjeravanjem (fwd) paketa. U donjem primjeru operacije odbacivanja paketa koji dolaze s adrese 192.168.30.20 izvršavaju se na razini mrežne kartice, bez prijenosa paketa jezgre:
# cat file.nft
table netdev x {
lanac y {
tip filtra hook ulazni uređaj eth0 prioritet 10; oznake offload;
ip saddr 192.168.30.20 odbaci
}
}
# nft -f file.nft - Poboljšano obavještavanje o mjestu greške u pravilima.
# nft delete rule ip y z handle 7
Greška: Nije moguće obraditi pravilo: Nema takvog datoteka ili direktorija
izbriši pravilo ip y z handle 7
^# nft delete rule ip x x handle 7
Greška: Nije moguće obraditi pravilo: Nema takvog datoteka ili direktorija
izbriši pravilo ip x x handle 7
^# nft delete table twst
Greška: Nema takvog datoteka ili direktorija; jeste li možda mislili na tablicu 'test' u obitelji ip?
izbriši tablicu twst
^^^^U prvom primjeru pokazano je da tablica 'y' nedostaje u sustavu, u drugom, da nedostaje handler '7', a u trećem, da se ispisuje savjet o tipografskoj grešci pri unosu imena tablice.
- Dodana podrška za provjeru slave sučelja putem naznačavanja 'meta sdif' ili 'meta sdifname':
… meta sdifname vrf1 …
- Dodana podrška za operaciju pomicanja ulijevo ili udesno. Na primjer, za pomicanje postojeće oznake paketa ulijevo za 1 bit i postavljanje manjeg bita na 1:
… meta mark set meta mark lshift 1 ili 0x1 …
- Implementirana opcija '-V' za prikaz proširenih informacija o verziji.
# nft -V
nftables v0.9.4 (Jive at Five)
cli: readline
json: da
minigmp: ne
libxtables: da - Opcije naredbenog retka sada moraju biti navedene prije naredbi. Na primjer, trebate navesti 'nft -a list ruleset', dok će pokretanje 'nft list ruleset -a' rezultirati greškom.
Izvor: opennet.ru
