Avaldatud on paketifiltri nftables 1.0.7 väljaanne, mis ühtlustab pakettide filtreerimise liideseid IPv4, IPv6, ARP ja võrgusildade jaoks (sihtides asendada iptables, ip6tables, arptables ja ebtables). Pakett nftables sisaldab kasutajaruumi pakettfiltri komponente, samal ajal kui tuumatasemel haldab tööd nf_tables alamsüsteem, mis kuulub Linuxi tuumasse alates väljaandest 3.13. Tuumatasemel pakutakse vaid ühtset liidest, mis ei sõltu konkreetsest protokollist ja mis võimaldab põhifunktsioone andmete ekstraktimiseks pakettidest, andmetega operatsioonide läbiviimiseks ja voolu juhtimiseks.
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.
Peamised muudatused:
- Linuxi tuuma 6.2+ süsteemidesse on lisatud protokollide vxlan, geneve, gre ja gretap vastavuse tugi, mis võimaldab lihtsate väljendite kasutamist kapseldatud pakettide päiste kontrollimiseks. Näiteks kontrollimiseks IP-aadressid VxLAN-i sissetuleva paketi päises nüüd saab kasutada reegleid (ilma VxLAN-i päise eelneva deinkapsuleerimise ja filtri sidumise vxlan0 liidesele): … udp dport 4789 vxlan ip protokoll udp … udp dport 4789 vxlan ip saddr 1.2.3.0/24 … udp dport 4789 vxlan ip saddr . vxlan ip daddr { 1.2.3.4 . 4.3.2.1 }
- Toetatakse automaatset üleliigsete elementide liitmist pärast osalist eemaldamist set-loendist, mis võimaldab eemaldada elemendi või osa vahemikust olemasolevast vahemikust (varem sai vahemiku eemaldada ainult täielikult). Näiteks pärast elemendi 25 eemaldamist set-loendist, mille vahemikud on 24-30 ja 40-50, jäävad loendisse 24, 26-30 ja 40-50. Parandused, mis on vajalikud automaatseks liitmiseks, pakutakse välja stabiilsete 5.10+ põhi versioonide korrigeerimisväljaannetes. # nft list ruleset table ip x { set y { typeof tcp dport flags interval auto-merge elements = { 24-30, 40-50 } } } # nft delete element ip x y { 25 } # nft list ruleset table ip x { set y { typeof tcp dport flags interval auto-merge elements = { 24, 26-30, 40-50 } } }
- Kontaktsuse ja vahemike kasutamine adresseerimise tõlke (NAT) kaardistamisel on lubatud. table ip nat { chain prerouting { type nat hook prerouting priority dstnat; policy accept; dnat to ip daddr . tcp dport map { 10.1.1.136 . 80 : 1.1.2.69 . 1024, 10.1.1.10-10.1.1.20 . 8888-8889 : 1.1.2.69 . 2048-2049 } persistent } }
- Lisatud on to support 'last' expression, which allows you to determine the last usage time of a rule element or set list. This support is available starting from Linux kernel 5.14. table ip x { set y { typeof ip daddr . tcp dport size 65535 flags dynamic,timeout last timeout 1h } chain z { type filter hook output priority filter; policy accept; update @y { ip daddr . tcp dport } } } # nft list set ip x y table ip x { set y { typeof ip daddr . tcp dport size 65535 flags dynamic,timeout last timeout 1h elements = { 172.217.17.14 . 443 viimati kasutatud 1s591ms aegub 1h, 172.67.69.19 . 443 viimati kasutatud 4s636ms aegub 1h, 142.250.201.72 . 443 viimati kasutatud 4s748ms aegub 1h, 172.67.70.134 . 443 viimati kasutatud 4s688ms aegub 1h, 35.241.9.150 . 443 viimati kasutatud 5s204ms aegub 1h, 138.201.122.174 . 443 viimati kasutatud 4s537ms aegub 1h, 34.160.144.191 . 443 viimati kasutatud 5s205ms aegub 1h, 130.211.23.194 . 443 viimati kasutatud 4s436ms aegub 1h } } }
- Lisatud on võimalus määrata kvoote set-loendites. Näiteks iga siht-IP-aadressi jaoks liikluse kvoodi määramiseks saab määrata: table netdev x { set y { typeof ip daddr size 65535 quota over 10000 mbytes } chain y { type filter hook egress device «eth0» priority filter; policy accept; ip daddr @y drop } } # nft add element inet x y { 8.8.8.8 } # ping -c 2 8.8.8.8 # nft list ruleset table netdev x { set y { type ipv4_addr size 65535 quota over 10000 mbytes elements = { 8.8.8.8 quota over 10000 mbytes used 196 bytes } } chain y { type filter hook egress device «eth0» priority filter; policy accept; ip daddr @y drop } }
- Konstantide kasutamine set-loendites on lubatud. Näiteks, kui kasutada sihtaadressi ja VLAN-i tuvastajat loendi võtmena, saab otse määrata VLAN-i numbri (daddr . 123): table netdev t { set s { typeof ether saddr . vlan id size 2048 flags dynamic,timeout timeout 1m } chain c { type filter hook ingress device eth0 priority 0; policy accept; ether type != 8021q update @s { ether daddr . 123 } counter } }
- Lisatud on uus käsk «destroy», mis võimaldab objekti (erinevalt delete käsust) kindlat eemaldamist, genereerimata ENOENT-i puuduvate objektide kustutamisel. Töötamiseks on vajalik vähemalt Linuxi kernel 6.3-rc. destroy table ip filter
Allikas: opennet.ru
