PĂ€rast aasta arendust paketifiltri vĂ€ljaanne , arendades iptables, ip6tables, arptables ja ebtables asemele, unifitseerides paketifiltrimise liideseid IPv4, IPv6, ARP ja vĂ”rgusildade jaoks. Ntfables'i pakett sisaldab kasutaja ruumis töötavaid paketifiltri komponente, samas kui tuuma tasandil tagab töö nf_tables alamvĂ”rk, mis on tĂŒĂŒp kerneli Linux alates versioonist 3.13.
Tuuma tasandil pakutakse vaid ĂŒldist liidest, mis ei sĂ”ltu konkreetsest protokollist ja mis pakub pĂ”hifunktsioone andmete ekstraheerimiseks pakettidest, andmete töötlemiseks ja voolu juhtimiseks.
Filtrimise loogika ja protokollile spetsiifilised töötlejad kompileeritakse kasutaja ruumis byte-koodeksisse, mille jÀrel see byte-koodeks laaditakse tuumas Netlink liidese kaudu ja tÀidetakse spetsiaalses virtuaalses masinas, mis meenutab BPF-d (Berkeley Packet Filters). Selline lÀhenemine vÔimaldab oluliselt vÀhendada tuuma tasandil töötava filtrikoodi suurust ja viia kÔik reeglite tÔlgendamise ja protokollide töötlemise loogika kasutaja ruumi.
Peamised uuendused:
- IPsec'i tugi, mis vÔimaldab teostada tunnelite aadresside vastendamist paketi, IPsec'i pÀringu identifikaatori ja SPI (Security Parameter Index) sildiga. NÀiteks,
⊠ipsec in ip saddr 192.168.1.0/24
⊠ipsec in spi 1-65536Samuti on vÔimalik kontrollida marsruudi lÀbimist lÀbi IPsec'i tunnelite. NÀiteks, et blokeerida liiklus mitte-IPSec'i kaudu:
⊠filter output rt ipsec missing drop
- IGMP (Internet Group Management Protocol) protokolli toimetamine. 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 ĂŒleminekuahela mÀÀratlemiseks (jump / goto). NĂ€iteks:
define dest = ber
add rule ip foo bar jump $dest - OS-i mÀÀratlemiseks mĂ”eldud maskide toimetamine (OS Fingerprint) pĂ”hinedes TTL vÀÀrtustele pĂ€ises. NĂ€iteks, et tĂ€histada pakette vastavalt saatja opsĂŒsteemile, 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 seostada saatja ARP-aadress sihtsĂŒsteemi IPv4-aadressiga. NĂ€iteks, et suurendada 192.168.2.1 aadressilt saadetud ARP-pakettide loendurit, vĂ”ib kasutada reeglit:
table arp x {
chain y {
type filter hook input priority filter; policy accept;
arp saddr ip 192.168.2.1 counter packets 1 bytes 46
}
} - Toetab proxy kaudu pÀringute lÀbilaskmise toele (tproxy). NÀiteks, et suunata pÀringud 80 pordilt proxy pordile 8080:
table ip x {
chain y {
type filter hook prerouting priority -150; policy accept;
tcp dport 80 tproxy to :8080
}
} - Toetab sokettide mĂ€rgistamist, vĂ”imaldades hilisemalt saata mÀÀratud mĂ€rgi lĂ€bi setsockopt() SO_MARK reĆŸiimis. NĂ€iteks:
table inet x {
chain y {
type filter hook prerouting priority -150; policy accept;
tcp dport 8080 mark set socket mark
}
} - Toetab tekstiliste prioriteetide nimede mÀÀramist ahelate jaoks. 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; } - Toetab SELinux (Secmark) mÀrke. NÀiteks, et mÀÀrata 'sshtag' kontekstiga SELinux seotuks, saate kasutada:
nft add secmark inet filter sshtag «system_u:object_r:ssh_server_packet_t:s0»
Ja seejÀrel kasutada seda mÀrki 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 pordid tekstivormingus, nagu need on mÀÀratud failis /etc/services. NÀiteks:
nft add rule x y tcp dport «ssh»
nft list ruleset -l
table x {
chain y {
âŠ
tcp dport «ssh»
}
} - VĂ”imalus kontrollida vĂ”rgu liidese tĂŒĂŒpi. NĂ€iteks:
add rule inet raw prerouting meta iifkind «vrf» accept
- Parendatud toetamine dĂŒnaamiliseks komplektide (sets) sisu vĂ€rskendamiseks, mÀÀrates selgelt 'dynamic' lipu. NĂ€iteks, et vĂ€rskendada komplekti 's', lisades algse aadressi ja kustutades kirje, 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 seada eraldi tingimus aja möödumise korral. NĂ€iteks, et ĂŒle kirjutada vaikimisi aegumisaeg 8888 pordil saab 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»
}
} - Toetab NAT-d inet perekonna jaoks:
table inet nat {
âŠ
ip6 daddr dead::2::1 dnat to dead:2::99
} - Parendatud vigade teavitamise tööriistad nÀpuvigade 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 liideste 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 - Parendatud JSON-i tugi.
Allikas: opennet.ru
