paketifiltri väljaanne , mis areneb iptablesi, ip6table'i, arptables'i ja ebtables'i asendamiseks, unifitseerides pakettide filtreerimise liideseid IPv4, IPv6, ARP ja võrgu sillutamiseks. Nftablesi paketis on kasutusruumi pakettide filtreerimise komponente, samas kui tuuma tasemel tagab toimimise nf_tables'i alamsüsteem, mis on osa Linuxi tuumast alates versioonist 3.13. Nftables 0.9.2 väljaande tööks vajalikud muudatused on lisatud Linuxi tuuma versioonis 5.3.
Tuumatasandil pakutakse ainult üldist liidest, mis ei sõltu konkreetsest protokollist ja pakub põhifunktsioone andmete ekstraktsiooniks pakettidest, andmete töötlemiseks ja voogude haldamiseks. Otsene filtreerimise loogika ja protokollipõhised töötlejad kompileeritakse kasutajaruumi 'bytecode', mis seejärel laaditakse tuuma mitteliidese kaudu ja käitatakse spetsiaalses virtuaalmasinas, mis meenutab BPF-i (Berkeley Packet Filters). Selline lähenemine võimaldab oluliselt vähendada tuumatasandil töötava filtreerimiskoodi suurust, viies kõik reeglite käsitlemise ja protokollide töötlemise funktsioonid kasutajaruumi.
Peamised uuendused:
- Võimalus kontrollida sadama numbrit transportkihi paketipea kaudu sõltumata 4. tasandi protokollist:
add rule x y ip protocol { tcp, udp } th dport 53
- Eluea taastamise toetamine elementide kogumites:
add element ip x y { 1.1.1.1 timeout 30s expires 15s }
- Võimalus kontrollida üksikuid valikuid (lsrr, rr, ssrr ja ra) IPv4 paketist:
add rule x y ip option rr exists drop
Marsruutimisvalikute jaoks on võimalik kontrollida välja type, ptr, length ja addr:
add rule x y ip option rr type 1 drop
- Väljendites on nüüd lubatud määrata võrgu eeliseid ja aadresside vahemikke:
iifname ens3 snat to 10.0.0.0/28
iifname ens3 snat to 10.0.0.1-10.0.0.15 - Toetab muutujate kasutamist ketaste määratlemisel:
define default_policy = accept
add chain ip foo bar { type filter hook input priority filter; policy $default_policy } - Kettide prioriteedi määramine on nüüd võimalik numbrilises ja sümboolses vormis:
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; } - Toetab synproxy mooduli rakendamist. Näiteks TCP pordi 8888 kaitsmiseks saab kasutada järgmisi reegleid:
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
}
} - Nüüd saab määrata ühendustootmise poliitikaid tavaliste reeglite kogumite kaudu, et määrata tabelis conntrack oodatud lisast ühendusi, mis vajavad mitme ühenduse loomist protokollide ja stsenaariumite korral. Näiteks, et määrata port 8888 TCP-ühenduse oodatud järgmised ühendused porti 5432, saab kirjutada järgmised reeglid:
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
}
}
Allikas: opennet.ru
