utgivning av paketfilter , som utvecklas som en ersÀttning för iptables, ip6tables, arptables och ebtables genom att förena grÀnssnitten för paketfiltrering för IPv4, IPv6, ARP och nÀtverksbryggor. Paketet nftables inkluderar komponenter av paketfiltern som arbetar i anvÀndarrummet, medan kÀrnnivÄns arbete tillhandahÄlls av nf_tables subsystemet, som ingÄr i Linux-kÀrnan sedan version 3.13. NödvÀndiga Àndringar för att stödja nftables 0.9.4 ingÄr i en kommande kÀrngren .
PÄ kÀrnnivÄ tillhandahÄlls endast ett gemensamt grÀnssnitt, oberoende av specifik protokoll och ger grundlÀggande funktioner för att extrahera data frÄn paket, utföra operationer med data och kontrollera flödet. Regler för filtrering och protokollspecifika behandlare kompileras direkt till bytekod i anvÀndarrummet, varefter denna bytekod laddas in i kÀrnan via Netlink-grÀnssnittet och utförs i kÀrnan i en speciell virtuell maskin som liknar BPF (Berkeley Packet Filters). Detta tillvÀgagÄngssÀtt möjliggör en betydande minskning av storleken pÄ filtreringskoden som körs pÄ kÀrnnivÄ och flyttar alla funktioner för reglerdjup och logik av protokoll till anvÀndarrummet.
Huvudsakliga nyheter:
- Stöd för intervall i sammanfogningar (concatenation, specifika adresser och portbindningar som förenklar matchning). Till exempel, för en uppsÀttning "whitelist", dÀr elementen Àr en sammanfogning, kommer flaggan "interval" att ange att uppsÀttningen kan inkludera intervall i sammanfogningen (för sammanfogningen "ipv4_addr . ipv4_addr . inet_service" kunde man tidigare ange exakta matchningar sÄsom "192.168.10.35 . 192.68.11.123 . 80", men nu kan man ange adressgrupper "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
}
} - I uppsÀttningar och map-lists finns möjlighet att anvÀnda direktivet "typeof", som definierar formatet för ett element vid matchning.
Till exempel: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 }
}
} - Möjlighet till anvÀndning av sammanfogningar i NAT-bindningar har lagts till, vilket möjliggör angivande av adress och port vid definiering av NAT-transformationer baserat pÄ map-lists eller namngivna uppsÀttningar:
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 - Stöd för hÄrdvaruacceleration genom att överföra vissa filtreringsoperationer till nÀtverkskortet. Acceleration aktiveras via verktyget ethtool ("ethtool -K eth0 hw-tc-offload on"), varefter det aktiveras i nftables för huvudkedjan med hjÀlp av flaggan "offload". Med Linux-kÀrnan 5.6 stöds hÄrdvaruacceleration för fÀltmatchning och inkommande grÀnssnittskontroll i kombination med mottagning, utkastning, kopiering (dup) och omdirigering (fwd) av paket. I exemplet nedan utförs utkastning av paket som kommer frÄn adressen 192.168.30.20 pÄ nivÄ av nÀtverkskortet, utan att paket skickas till kÀrnan:
# 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 - FörbÀttrad felmeddelande om platsen för ett regelbrott.
# nft delete rule ip y z handle 7
Error: Could not process rule: No such file or directory
delete rule ip y z handle 7
^# nft delete rule ip x x handle 7
Error: Could not process rule: No such file or directory
delete rule ip x x handle 7
^# nft delete table twst
Error: No such file or directory; did you mean table âtestâ in family ip?
delete table twst
^^^^I det första exemplet visas att tabellen "y" saknas i systemet, i det andra att bearbetaren "7" saknas, och i det tredje att en stavningskontroll görs vid inmatning av tabellnamnet.
- Tillagd stöd för att kontrollera slave-grÀnssnittet genom att ange "meta sdif" eller "meta sdifname":
⊠meta sdifname vrf1 âŠ
- Tillagd stöd för bitvis förflyttning Ät höger eller vÀnster. Till exempel, för att flytta en befintlig pakettagg Ät vÀnster med 1 bit och sÀtta den minsta biten till 1:
⊠meta mark set meta mark lshift 1 or 0x1 âŠ
- Implementerat alternativet "-V" för att visa utökad versioninformation.
# nft -V
nftables v0.9.4 (Jive at Five)
cli: readline
json: yes
minigmp: no
libxtables: yes - Alternativen för kommandoraden mÄste nu anges före kommandona. Till exempel, mÄste "nft -a list ruleset" anges, medan att köra "nft list ruleset -a" kommer att ge ett felmeddelande.
KĂ€lla: opennet.ru
