vydanie paketového filtra , ktorý sa vyvíja ako náhrada za iptables, ip6tables, arptables a ebtables, pomocou unifikácie filtrovacích rozhraní pre IPv4, IPv6, ARP a sieťové mosty. Paketu nftables sú súčasťou komponenty paketového filtra fungujúce v užívateľskom priestore, zatiaľ čo na úrovni jadra je práca zabezpečená subsystémom nf_tables, ktorý je súčasťou Linuxu od verzie 3.13. Zmeny potrebné na vydanie nftables 0.9.2 sú zahrnuté v jadre Linux 5.3.
Na úrovni jadra je poskytované len všeobecné rozhranie, nezávislé od konkrétneho protokolu a poskytujúce základné funkcie na extrakciu údajov z paketov, vykonávanie operácií s údajmi a riadenie toku. Logika filtrovania a protokolom špecifické procesory sa kompilujú do bajtkódu v priestore používateľa, po ktorom sa tento bajtkód načíta do jadra pomocou rozhrania Netlink a vykonáva sa v špeciálnej virtuálnej mašine, podobnej BPF (Berkeley Packet Filters). Tento prístup umožňuje výrazne znížiť veľkosť kódu filtrovania na úrovni jadra a preniesť všetky funkcie analýzy pravidiel a logiky práce s protokolmi do priestoru používateľa.
Hlavné novinky:
- Možnosť kontroly čísla portu z hlavičky paketov transportnej vrstvy nezávisle od typu protokolu 4. úrovne:
add rule x y ip protocol { tcp, udp } th dport 53
- Podpora obnovy času života množiny prvkov:
add element ip x y { 1.1.1.1 timeout 30s expires 15s }
- Možnosť kontroly jednotlivých možností (lsrr, rr, ssrr a ra) z paketov IPv4:
add rule x y ip option rr exists drop
Pre možnosti smerovania je možné kontrolovať polia type, ptr, length a addr:
add rule x y ip option rr type 1 drop
- V výrazoch je teraz možné uvádzať sieťové prefixy a rozsahy adries:
iifname ens3 snat to 10.0.0.0/28
iifname ens3 snat to 10.0.0.1-10.0.0.15 - Podpora používania premenných v definíciách reťazcov:
define default_policy = accept
add chain ip foo bar { type filter hook input priority filter; policy $default_policy } - Určenie priority reťazca môže byť teraz vykonávané ako v číselnom, tak aj v symbolickom formáte:
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; } - Bola realizovaná podpora modulu synproxy. Napríklad na zabezpečenie TCP portu 8888 pomocou synproxy je možné použiť množinu pravidiel:
table ip x {
chain y {
type filter hook prerouting priority raw; policy accept;
tcp dport 8888 tcp flags syn notrack
}chain z {
type filter hook forward priority filter; policy accept;
tcp dport 8888 ct state invalid,untracked synproxy mss 1460 \
wscale 7 timestamp sack-perm ct state invalid drop
}
} - Na definovanie v tabuľke conntrack očakávaných dodatočných pripojení súvisiacich s aktuálnym pripojením, ktoré sa používajú v protokoloch a scénaroch vyžadujúcich vytvorenie viacerých pripojení, je teraz možné definovať politiky prostredníctvom štandardných množín pravidiel. Napríklad na definovanie očakávaných pripojení k TCP portu 8888 nasledujúcich po pripojení k portu 5432 je možné uviesť nasledujúce pravidlá:
table x {
ct expectation myexpect {
protocol tcp
dport 5432
timeout 1h
size 12
l3proto ip
}chain input {
type filter hook input priority 0;
ct state new tcp dport 8888 ct expectation set myexpect
ct state established,related counter accept
}
}
Zdroj: opennet.ru
