a csomagszűrő kiadása , amely az iptables, ip6tables, arptables és ebtables helyettesítésére fejlődik, az IPv4, IPv6, ARP és hálózati hídkapcsolók csomagszűrési interfészeinek egységesítése révén. Az nftables csomag tartalmazza a felhasználói térben működő csomagszűrő komponenseket, míg a kernel szintjén az nf_tables alrendszer biztosítja a működést, amely a Linux kernel 3.13-as kiadása óta része a rendszernek. Az nftables 0.9.2 működéséhez szükséges változtatások a Linux kernel 5.3-ba való beemelése.
A kernel szintjén csak egy általános interfész biztosított, amely független a konkrét protokolltól, és alapvető funkciókat nyújt az adatok csomagokból való kinyerésére, az adatokkal való műveletekre és az áramlás kontrollálására. Maguk a szűrési logika és a protokoll-specifikus kezelők a felhasználói térben bytekódra fordulnak, amelyet ezután a Netlink interfész segítségével betölt a kernelbe és egy BPF-hez (Berkeley Packet Filters) hasonló speciális virtuális gépen fut. Ez a megközelítés jelentősen csökkenti a kernel szintjén futó szűrési kód méretét, miközben az összes szabályfeldolgozással és protokollokkal kapcsolatos logikát a felhasználói térbe helyezi.
Főbb újítások:
- A forgalmi szintű csomag fejlécében található portszám ellenőrzésének lehetősége függetlenül a 4. szint protokolltól:
add rule x y ip protocol { tcp, udp } th dport 53
- A változóelemek élettartamának visszaállításának támogatása:
add element ip x y { 1.1.1.1 timeout 30s expires 15s }
- Lehetőség van egyes opciók (lsrr, rr, ssrr és ra) ellenőrzésére az IPv4 csomagokban:
add rule x y ip option rr exists drop
Az irányítási opciók esetén ellenőrizhetők a type, ptr, length és addr mezők:
add rule x y ip option rr type 1 drop
- A kifejezésekben most már megengedett hálózati prefixek és címtartományok megadása:
iifname ens3 snat to 10.0.0.0/28
iifname ens3 snat to 10.0.0.1-10.0.0.15 - A változók használatának támogatása a láncok definícióiban:
define default_policy = accept
add chain ip foo bar { type filter hook input priority filter; policy $default_policy } - A lánc prioritásának megadása most már numerikus és szimbolikus formában is történhet:
define prio = filter
define prionum = 10
define prioffset = «filter — 150»add table ip foo
add chain ip foo bar { type filter hook input priority $prio; }
add chain ip foo ber { type filter hook input priority $prionum; }
add chain ip foo bor { type filter hook input priority $prioffset; } - A synproxy modul támogatása megvalósítva. Például a 8888-as TCP port synproxy védelméhez a következő szabályhalmazok használhatók:
table ip x {
chain y {
típus szűrő horgony prerouting prioritás nyers; politika elfogadása;
tcp dport 8888 tcp flags syn notrack
}lánc z {
típus szűrő horgony forward prioritás szűrő; politika elfogadása;
tcp dport 8888 ct állapot érvénytelen, nem nyomon követett synproxy mss 1460 \
wscale 7 időbélyeg sack-perm ct állapot érvénytelen drop
}
} - A conntrack táblában a jelenlegi kapcsolathoz kapcsolódó várható további kapcsolatok meghatározásához, amelyeket több kapcsolat létrehozását igénylő protokollok és forgatókönyvek esetén alkalmaznak, most politikákat lehet definiálni a szokásos szabálykészletek által. Például, a TCP 8888-as portra várható további kapcsolatok meghatározásához a 5432-es portra a következő szabályokat lehet megadni:
table x {
ct elvárás myexpect {
protokoll tcp
dport 5432
időkorlát 1h
méret 12
l3proto ip
}lánc input {
típus szűrő horgony input prioritás 0;
ct állapot új tcp dport 8888 ct elvárás beállítása myexpect
ct állapot megerősített, kapcsolódó számláló elfogadása
}
}
Forrás: opennet.ru
