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
