PÀrast aastat arendust paketifiltri vÀljaanne , arenes, mis on iptables, ip6table, arptables ja ebtables asendamiseks arenev, unifitseerides paketifiltreerimise liideseid IPv4, IPv6, ARP ja vÔrgusildade jaoks. nftablesi paketis on kasutusruumi töötavad paketifiltreerimise komponendid, samas kui kernelitasemel teostab töö nf_tablesi subsystem, mis on osa Linuxi kernelist alates versioonist 3.13.
Kernelitasemel pakutakse vaid ĂŒldist liidest, mis ei sĂ”ltu konkreetsest protokollist ning mis pakub pĂ”hifunktsioone andmete vĂ€ljavĂ”tmiseks paketist, andmetega operatsioonide teostamiseks ja voo juhtimiseks.
Filtreerimise loogika ja protokollispetsiifilised töötlejad kompileeritakse kasutusruumis bytecode'ks, millejÀrel laaditakse see kernelisse Netlinki liidese abil ja teostatakse spetsiaalses virtuaalses masinas, mis sarnaneb BPF-ile (Berkeley Packet Filters). Selline lÀhenemine vÔimaldab mÀrkimisvÀÀrselt vÀhendada kernelitasemel töötava filtreerimiskoodi mahtu ning viia kÔik reeglite parsimise ja protokollide töötlemise loogika funktsioonid kasutusruumi.
PÔhilised uuendused:
- IPsec-i tugi, mis vÔimaldab tuuninguaadresside, IPsec-i pÀringu ID ja SPI (Security Parameter Index) sildi sidumist pakettidega. NÀiteks,
⊠ipsec in ip saddr 192.168.1.0/24
⊠ipsec in spi 1-65536Samuti on vÔimalik kontrollida marsruudi lÀbitavust IPsec-i tunnelis. NÀiteks, et blokeerida liiklus, mis ei toimu IPSec-i kaudu:
⊠filter output rt ipsec missing drop
- IGMP (Internet Group Management Protocol) toe vÔimalus. NÀiteks, et kÔrvaldada sissetulevad IGMP grupi kuuluvuse pÀringud, vÔib kasutada reeglit
nft add rule netdev foo bar igmp type membership-query counter drop
- Muuttujate kasutamise vĂ”imalus ĂŒleminekuahelate (jump / goto) mÀÀramiseks. NĂ€iteks:
define dest = ber
add rule ip foo bar jump $dest - Toetatakse OS jalajĂ€lje (OS Fingerprint) maske TTL vÀÀrtuste pĂ”hjal pealkirjas. NĂ€iteks, et mĂ€rgistada pakette saaja operatsioonisĂŒsteemi pĂ”hjal, vĂ”ib kasutada kĂ€sku:
⊠meta mark set osf ttl skip name map { «Linux» : 0x1,
«Windows» : 0x2,
«MacOS» : 0x3,
«unknown» : 0x0 }
⊠osf ttl skip version «Linux:4.20» - vĂ”imalus siduda saatja ARP-aadress sihtsĂŒsteemi IPv4-aadressiga. NĂ€iteks, et suurendada ARP-pakettide arvu, mis saadetakse aadressilt 192.168.2.1, on vĂ”imalik kasutada reeglit:
table arp x {
chain y {
filtri tĂŒĂŒpi konks sisendi prioriteet; poliitika aktsepteerida;
arp saddr ip 192.168.2.1 counter pakette 1 baitide 46
}
} - Toetatakse lÀbipaistvat pÀringute edastamist lÀbi proksi (tproxy). NÀiteks, et suunata pÀringud porte 80 proksi 8080:le:
table ip x {
chain y {
filtri tĂŒĂŒpi konks eelpruunimine prioriteet -150; poliitika aktsepteerida;
tcp dport 80 tproxy to :8080
}
} - Toetatakse soklite mĂ€rgistamist, vĂ”imalusega hilisema mĂ€rgise saamiseks lĂ€bi setsockopt() SO_MARK reĆŸiimis. NĂ€iteks:
table inet x {
chain y {
filtri tĂŒĂŒpi konks eelpruunimine prioriteet -150; poliitika aktsepteerida;
tcp dport 8080 mark set socket mark
}
} - Toetatakse tekstiliste nimede mÀÀramist prioriteetide jaoks ahelates. NÀiteks:
nft add chain ip x raw { type filter hook prerouting priority raw; }
nft add chain ip x filter { type filter hook prerouting priority filter; }
nft add chain ip x filter_later { type filter hook prerouting priority filter + 10; } - Toetatakse SELinuxi (Secmark) silte. NÀiteks, et mÀÀrata silt «sshtag» SELinuxi konteksti seotusega, saab kÀivitada:
nft add secmark inet filter sshtag «system_u:object_r:ssh_server_packet_t:s0»
Ja seejÀrel saab seda silti kasutada reeglites:
nft add rule inet filter input tcp dport 22 meta secmark set «sshtag»
nft add map inet filter secmapping { type inet_service : secmark; }
nft add element inet filter secmapping { 22 : «sshtag» }
nft add rule inet filter input meta secmark set tcp dport map @secmapping - VÔimalus mÀÀrata protokollidega seotud porte tekstina, nagu need on mÀÀratletud failis /etc/services. NÀiteks:
nft add rule x y tcp dport «ssh»
nft list ruleset -l
tabel x {
chain y {
âŠ
tcp dport «ssh»
}
} - VĂ”imalus kontrollida vĂ”rguinterfÀÀsi tĂŒĂŒpi. NĂ€iteks:
add rule inet raw prerouting meta iifkind «vrf» accept
- Parandatud dĂŒnaamilise sisu uuendamise toetust komplektides (sets) lĂ€bi selge «dynamic» lipu mÀÀramise. NĂ€iteks, et uuendada komplekti «s» lisades algusadresse ja lĂ€htestades kirje juhul, kui pakette ei ole 30 sekundi jooksul:
add table x
add set x s { type ipv4_addr; size 128; timeout 30s; flags dynamic; }
add chain x y { type filter hook input priority 0; }
add rule x y update @s { ip saddr } - VĂ”imalus mÀÀrata eraldi tingimus ajaĂŒlevaate mÀÀramiseks. NĂ€iteks, et ĂŒletada vaikimisi ajaĂŒlevaade paketi puhul, mis on saadetud sadamasse 8888, saate mÀÀrata:
table ip filter {
ct timeout agressive-tcp {
protocol tcp;
l3proto ip;
policy = {established: 100, close_wait: 4, close: 4}
}
chain output {
âŠ
tcp dport 8888 ct timeout set «agressive-tcp»
}
} - NAT toimetamine inet perekonnale:
table inet nat {
âŠ
ip6 daddr dead::2::1 dnat to dead:2::99
} - Parandatud vigade teavitamise vahendid trĂŒkivigade tĂ”ttu:
nft add chain filtre test
Error: No such file or directory; did you mean table «filter» in family ip?
add chain filtre test
^^^^^^ - VÔimalus mÀÀrata liidese nimesid komplektides (sets):
set sc {
type inet_service . ifname
elements = { «ssh» . «eth0» }
} - Uuendatud flowtable reeglite sĂŒntaks:
nft add table x
nft add flowtable x ft { hook ingress priority 0; devices = { eth0, wlan0 }; }
âŠ
nft add rule x forward ip protocol { tcp, udp } flow add @ft - Parandatud JSON toimetamine.
Allikas: opennet.ru
