csomagszűrő kiadása , amely az iptables, ip6tables, arptables és ebtables helyettesítésére fejlődik, a csomagszűrési interfészek egységesítésével IPv4, IPv6, ARP és hálózati hidak számára. Az nftables csomagba tartoznak a felhasználói térben működő csomagszűrő összetevők, míg a kernel szintjén a nf_tables alrendszer végzi a munkát, amely a Linux kernelben 3.13 kiadás óta elérhető. Az nftables 0.9.4 kiadásához szükséges módosítások a jövőbeli kernel ágba kerültek. .
A kernel szintjén csupán egy általános interfész érhető el, amely független a konkrét protokoltól, és alapvető funkciókat nyújt az adatok csomagokból való kinyerésére, adatokkal való műveletek végrehajtására és az áramlás kezelésére. A szűrési szabályok és a protokoll-specifikus feldolgozók közvetlenül felhasználói térben byte-kódra vannak lefordítva, amelyet ezután a Netlink interfész segítségével töltenek be a kernelbe, és egy speciális virtuális gépben hajtanak végre a kernelben, amely hasonlít a BPF (Berkeley Packet Filter) működésére. Ez a megközelítés jelentősen csökkenti a kernel szintjén működő szűrési kód méretét, valamint a szabályok parsingját és a protokollokkal való logikai munkát a felhasználói térbe helyezi.
Főbb újítások:
- Tartományok támogatása a kapcsolatokban (concatenation, bizonyos címek és portok összekapcsolása, amelyek megkönnyítik a párhuzamosítást). Például a "whitelist" halmaz esetén, amelynek elemei egy összekapcsolás, a "interval" jelző megadása arra utal, hogy a halmaz tartalmazhat tartományokat a kapcsolódásban (az "ipv4_addr . ipv4_addr . inet_service" összekapcsolás esetén korábban pontos egyezéseket lehetett megadni, mint "192.168.10.35 . 192.68.11.123 . 80", most azonban csoportos címeket is lehet megadni, például "192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125 . 80"):
tábla ip foo {
halmaz whitelist {
típus ipv4_addr . ipv4_addr . inet_service
jelzők interval
elemek = { 192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125 . 80 }
}lánc bar {
típus szűrő hook prerouting priority filter; politikai drop;
ip saddr . ip daddr . tcp dport @whitelist accept
}
} - A halmazokban és a map-listákban biztosított a "typeof" direktíva használatának lehetősége, amely meghatározza az elemek formátumát a párhuzamosításhoz.
Például:tábla ip foo {
halmaz whitelist {
typeof ip saddr
elemek = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
}lánc bar {
típus szűrő hook prerouting priority filter; politikai drop;
ip daddr @whitelist accept
}
}tábla ip foo {
map addr2mark {
typeof ip saddr : meta mark
elemek = { 192.168.10.35 : 0x00000001, 192.168.10.135 : 0x00000002 }
}
} - Hozzáadva a NAT-kötésekben való csatlakozások használatának lehetősége, amely lehetővé teszi az IP-cím és a port megadását NAT-transzformációk meghatározásakor map-listák vagy névleges készletek alapján:
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 - Hardveres gyorsítás támogatása, amely lehetővé teszi bizonyos szűrési műveletek áthelyezését a hálózati kártya terheire. A gyorsítás az ethtool segédeszközön keresztül kapcsolható be („ethtool -K eth0 hw-tc-offload on”), majd aktiválható a nftables-ben az alap lánc számára az „offload” jelző segítségével. A Linux 5.6-os kernel használata esetén hardveres gyorsítás érhető el a fejlécmezők és a bejövő interfész ellenőrzésére, összekapcsolva a csomagok befogásával, eldobásával (dup) és átirányításával (fwd). Az alábbi példában a 192.168.30.20 címről érkező csomagok eldobási műveletei a hálózati kártya szintjén történnek, anélkül, hogy a csomagok eljutnának a kernelhez:
# 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 - Javítva lett a hibahely értesítés a szabályokban.
# nft delete rule ip y z handle 7
Hiba: A szabály feldolgozása nem sikerült: Nincs ilyen fájl vagy könyvtár
delete rule ip y z handle 7
^# nft delete rule ip x x handle 7
Hiba: A szabály feldolgozása nem sikerült: Nincs ilyen fájl vagy könyvtár
delete rule ip x x handle 7
^# nft delete table twst
Hiba: Nincs ilyen fájl vagy könyvtár; talán a táblát ‘test’-re gondoltad az ip családban?
delete table twst
^^^^Az első példában látható, hogy a „y” tábla hiányzik a rendszerből, a második példában, hogy a „7” kezelő hiányzik, a harmadik pedig, hogy a táblázat nevének megadása során elírásra vonatkozó javaslatot ad.
- Hozzáadva a slave-interface ellenőrzésének támogatása a „meta sdif” vagy „meta sdifname” megadásával:
… meta sdifname vrf1 …
- Hozzáadva a jobbra vagy balra történő eltolás művelet támogatása. Például, hogy egy meglévő csomagmárkát balra 1 bitre toljun és a legkisebb bitet 1-re állítsuk:
… meta mark set meta mark lshift 1 or 0x1 …
- Megvalósítva a „-V” opció a verziók kiterjesztett információjának megjelenítéséhez.
# nft -V
nftables v0.9.4 (Jive at Five)
cli: readline
json: yes
minigmp: no
libxtables: yes - A parancssori opciókat mostantól kötelezően a parancsok előtt kell megadni. Például az „nft -a list ruleset” megadása szükséges, míg az „nft list ruleset -a” végrehajtása hibaüzenetet eredményez.
Forrás: opennet.ru
