Avalikustatud nftables 1.0.0 versioon, mis ĂŒhtlustab pakettide filtreerimise liideseid IPv4, IPv6, ARP ja vĂ”rgu sildade jaoks (mille eesmĂ€rk on asendada iptables, ip6tables, arptables ja ebtables). Nfables 1.0.0 vĂ€ljaande jaoks vajalikud muudatused on lisatud Linuxi tuuma versiooni 5.13. Versiooni numbrit on oluliselt muudetud, kuid see ei tĂ€henda fundamentaalseid muutusi; see on lihtsalt jĂ€rjepideva kĂŒmnendkĂŒmnenduse jĂ€tk (eelmise versiooni number oli 0.9.9).
Nftables'i paketis on kasutusruumi paketifiltreerimise komponendid, samas kui tuuma tasemel tagab töö nf_tables alamsĂŒsteem, mis on Linuxi tuumas saadaval alates versioonist 3.13. Tuuma tasemel on olemas vaid ĂŒldine liides, mis ei sĂ”ltu konkreetsetest protokollidest ja pakub pĂ”hiĂŒlesandeid paketidest andmete ekstraheerimiseks, andmete töötlemiseks ja voogude haldamiseks.
Filtreerimisreeglid ja protokollispetsiifilised töötlejad kompileeritakse kasutusruumis byte-koodiks, seejÀrel laaditakse see byte-kood tuuma Netlinki liidese abil ja kÀivitatakse tuumas eraldi virtuaalmasinas, mis tahes BPF (Berkeley Packet Filters). Sarnane lÀhenemine vÔimaldab oluliselt vÀhendada filterkoodi suurust, mis töötab tuuma tasemel, ning viia kÔik reeglite parsing'u funktsioonid ja protokollide töötlemise loogika kasutajaruumi.
PÔhilised uuendused:
- Set-loendisse on lisatud elemendi-maski "*" toetus, mis aktiveerub kÔigi pakettide jaoks, mis ei lange kokku muude koosoleku mÀÀratud elementidega. table x { map blocklist { type ipv4_addr : verdict flags interval elements = { 192.168.0.0/16 : accept, 10.0.0.0/8 : accept, * : drop } } chain y { type filter hook prerouting priority 0; policy accept; ip saddr vmap @blocklist } }
- Selle vĂ”imaluse abil on antud vĂ”imalus mÀÀrata muutujaid kĂ€surealt valiku "âdefine" kaudu. # cat test.nft table netdev x { chain y { type filter hook ingress devices = $dev priority 0; policy drop; } } # nft âdefine dev=»{ eth0, eth1 }» -f test.nft
- Map-listides on lubatud kasutada pĂŒsivaid (stateful) vĂ€ljendeid: table inet filter { map portmap { type inet_service : verdict counter elements = { 22 counter packets 0 bytes 0 : jump ssh_input, * counter packets 0 bytes 0 : drop } } chain ssh_input { } chain wan_input { tcp dport vmap @portmap } chain prerouting { type filter hook prerouting priority raw; policy accept; iif vmap { «lo» : jump wan_input } } }
- Lisatud kÀsk «list hooks» antud paketifamiilia kÀsitlejate nimekiri vÀljastamiseks: # nft list hooks ip device eth0 family ip { hook ingress { +0000000010 chain netdev x y [nf_tables] +0000000300 chain inet m w [nf_tables] } hook input { -0000000100 chain ip a b [nf_tables] +0000000300 chain inet m z [nf_tables] } hook forward { -0000000225 selinux_ipv4_forward 0000000000 chain ip a c [nf_tables] } hook output { -0000000225 selinux_ipv4_output } hook postrouting { +0000000225 selinux_ipv4_postroute } }
- Blokis "queue" on lubatud kombineerida jhash, symhash ja numgen vÀljendeid, et jagada pakette queue'des kasutajaruumi. ... queue to symhash mod 65536 ... queue flags bypass to numgen inc mod 65536 ... queue to jhash oif . meta mark mod 32 "queue" saab ka kombineerida kaardilistadega, et valida queue kasutajaruumi pÔhjal suvaliste vÔtmete jÀrgi. ... queue flags bypass to oifname map { "eth0" : 0, "ppp0" : 2, "eth1" : 2 }
- On antud vÔimalus jagada muutujaid, mis sisaldavad set-listi, mitmeks kaardiks. define interfaces = { eth0, eth1 } table ip x { chain y { type filter hook input priority 0; policy accept; iifname vmap { lo : accept, $interfaces : drop } } } # nft -f x.nft # nft list ruleset table ip x { chain y { type filter hook input priority 0; policy accept; iifname vmap { "lo" : accept, "eth0" : drop, "eth1" : drop } } }
- Lubatud on vmap-ide (verdict map) kombineerimine vahemikega: # nft add rule x y tcp dport . ip saddr vmap { 1025-65535 . 192.168.10.2 : accept }
- NAT-i vastavuste sĂŒntaks on lihtsustatud. Lubatud on aadresside vahemike mÀÀramine: ... snat to ip saddr map { 10.141.11.4 : 192.168.2.2-192.168.2.4 } vĂ”i otseste IP-aadresse ja ja ja ip aaddress map { 10.141.11.4 : 192.168.2.3 . 80 } vĂ”i kombinatsioon ip aadresside ja portide vahemikest: ... dnat to ip aaddress . tcp dport map { 192.168.1.2 . 80 : 10.141.10.2-10.141.10.5 . 8888-8999 }
Allikas: opennet.ru
