nftables pakkefilter 1.0.7 udgivelse

Frigivelsen af ​​pakkefilter nftables 1.0.7 er blevet offentliggjort, som forener pakkefiltreringsgrænseflader til IPv4, IPv6, ARP og netværksbroer (med henblik på at erstatte iptables, ip6table, arptables og ebtables). nftables-pakken inkluderer pakkefilterkomponenter, der kører i brugerrum, mens arbejdet på kerneniveau leveres af nf_tables-undersystemet, som har været en del af Linux-kernen siden release 3.13. Kerneniveauet giver kun en generisk protokol-uafhængig grænseflade, der giver grundlæggende funktioner til at udtrække data fra pakker, udføre dataoperationer og flowkontrol.

Selve filtreringsreglerne og protokol-specifikke handlere kompileres til brugerrumsbytekode, hvorefter denne bytekode indlæses i kernen ved hjælp af Netlink-grænsefladen og eksekveres i kernen i en speciel virtuel maskine, der ligner BPF (Berkeley Packet Filters). Denne tilgang gør det muligt betydeligt at reducere størrelsen af ​​den filtreringskode, der kører på kerneniveau, og flytte alle funktionerne i parsingsregler og logikken i at arbejde med protokoller ind i brugerrummet.

Vigtigste ændringer:

  • For systemer, der kører Linux-kerne 6.2+, er understøttelse af vxlan-, geneve-, gre- og gretap-protokoltilknytninger blevet tilføjet, hvilket gør det muligt for simple udtryk at kontrollere overskrifter i indkapslede pakker. For at kontrollere IP-adressen i headeren på en indlejret pakke fra VxLAN kan du for eksempel nu bruge reglerne (uden at du først behøver at de-indkapsle VxLAN-headeren og binde filteret til vxlan0-grænsefladen): ... udp dport 4789 vxlan ip protokol udp ... udp dport 4789 vxlan ip saddr 1.2.3.0. 24/4789 ... udp dport 1.2.3.4 vxlan ip saddr . vxlan ip daddr { 4.3.2.1 . XNUMX }
  • Understøttelse af automatisk fletning af rester efter delvis sletning af et sætlisteelement er blevet implementeret, hvilket giver dig mulighed for at slette et element eller en del af et område fra et eksisterende område (tidligere kunne et område kun slettes helt). For eksempel, efter at have fjernet element 25 fra en sætliste med intervaller 24-30 og 40-50, vil listen forblive 24, 26-30 og 40-50. De rettelser, der kræves for at automerging fungerer, vil blive tilbudt i vedligeholdelsesudgivelser af de stabile grene af 5.10+-kernen. # nft list ruleset table ip x { set y { typeof tcp dport flags interval auto-merge elements = { 24-30, 40-50 } } } # nft delete element ip xy { 25 } # nft list ruleset table ip x { set y { typeof tcp dport flag interval auto-merge elementer = { 24, 26-30, 40-50 } } }
  • Tillader brug af kontakter og områder ved kortlægning af adresseoversættelse (NAT). table ip nat { chain prerouting { type nat hook prerouting priority dstnat; politik acceptere; dnat til 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 } vedvarende } }
  • Tilføjet understøttelse af det "sidste" udtryk, som giver dig mulighed for at finde ud af tidspunktet for sidste brug af et regelelement eller sætliste. Funktionen understøttes fra og med Linux-kerne 5.14. tabel ip x { sæt y { typeof ip daddr . tcp dport størrelse 65535 flag dynamisk, timeout sidste timeout 1h } kæde z { type filter hook output priority filter; politik acceptere; opdater @y {ip daddr. tcp dport } } } # nft liste sæt ip xy tabel ip x { sæt y { typeof ip daddr . tcp dport størrelse 65535 flag dynamisk, timeout sidste timeout 1h elementer = { 172.217.17.14. 443 sidst brugte 1s591ms timeout 1t udløber 59m58s409ms, 172.67.69.19. 443 sidst brugte 4s636ms timeout 1t udløber 59m55s364ms, 142.250.201.72. 443 sidst brugte 4s748ms timeout 1t udløber 59m55s252ms, 172.67.70.134. 443 sidst brugte 4s688ms timeout 1t udløber 59m55s312ms, 35.241.9.150. 443 sidst brugte 5s204ms timeout 1t udløber 59m54s796ms, 138.201.122.174. 443 sidst brugte 4s537ms timeout 1t udløber 59m55s463ms, 34.160.144.191. 443 sidst brugte 5s205ms timeout 1t udløber 59m54s795ms, 130.211.23.194. 443 sidst brugte 4s436ms timeout 1t udløber 59m55s564ms } } }
  • Tilføjet muligheden for at definere kvoter i sætlister. For at bestemme trafikkvoten for hver mål-IP-adresse kan du f.eks. angive: tabel netdev x { set y { typeof ip daddr size 65535 quota over 10000 mbytes } chain y { type filter hook egress device "eth0" priority filter; politik acceptere; ip daddr @y drop } } # nft add element inet xy { 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 kvote over 10000 mbytes brugt 196 bytes } } kæde y { type filter hook egress device "eth0" prioritetsfilter; politik acceptere; ip daddr @y drop } }
  • Det er tilladt at bruge konstanter i sætlister. For eksempel, når du bruger destinationsadressen og VLAN ID som listenøgle, kan du direkte angive VLAN-nummeret (daddr . 123): table netdev t { set s { typeof ether saddr . vlan id størrelse 2048 flag dynamisk, timeout timeout 1m } kæde c { type filter hook ingress device eth0 prioritet 0; politik acceptere; ether type != 8021q update @s { ether daddr . 123 } tæller } }
  • Tilføjet en ny "destroy"-kommando for ubetinget at slette objekter (i modsætning til delete-kommandoen genererer den ikke ENOENT, når man forsøger at slette et manglende objekt). Kræver mindst Linux-kerne 6.3-rc for at fungere. ødelægge tabellens ip-filter

Kilde: opennet.ru

Tilføj en kommentar