nftables paketfilter 1.0.7 release

Utgivningen av paketfilter nftables 1.0.7 har publicerats, som förenar paketfiltreringsgränssnitt för IPv4, IPv6, ARP och nätverksbryggor (som syftar till att ersätta iptables, ip6table, arptables och ebtables). Paketet nftables inkluderar paketfilterkomponenter som körs i användarutrymme, medan arbetet på kärnnivå tillhandahålls av nf_tables-undersystemet, som har varit en del av Linux-kärnan sedan release 3.13. Kärnnivån tillhandahåller endast ett generiskt protokolloberoende gränssnitt som tillhandahåller grundläggande funktioner för att extrahera data från paket, utföra dataoperationer och flödeskontroll.

Filtreringsreglerna och protokollspecifika hanterare kompileras till bytekod i användarutrymmet, varefter denna bytekod laddas in i kärnan med hjälp av Netlink-gränssnittet och exekveras i kärnan i en speciell virtuell maskin som påminner om BPF (Berkeley Packet Filters). Detta tillvägagångssätt tillåter dig att avsevärt minska storleken på filtreringskoden som körs på kärnnivå och flytta alla funktioner för att analysera regler och logik för att arbeta med protokoll till användarutrymmet.

Huvudändringar:

  • För system som kör Linux-kärna 6.2+ har stöd för vxlan-, geneve-, gre- och gretap-protokollmappningar lagts till, vilket gör att enkla uttryck kan kontrollera rubriker i inkapslade paket. Till exempel, för att kontrollera IP-adressen i rubriken för ett kapslat paket från VxLAN, kan du nu använda reglerna (utan att du behöver först avkapsla VxLAN-huvudet och binda filtret till vxlan0-gränssnittet): ... udp dport 4789 vxlan ip-protokoll 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 }
  • Stöd för automatisk sammanslagning av rester efter att en partiell radering av ett set-list-element har implementerats, vilket gör att du kan ta bort ett element eller en del av ett intervall från ett befintligt intervall (tidigare kunde ett intervall bara tas bort helt). Till exempel, efter att ha tagit bort element 25 från en uppsättningslista med intervallen 24-30 och 40-50, kommer listan att förbli 24, 26-30 och 40-50. De korrigeringar som krävs för att automerging ska fungera kommer att erbjudas i underhållsversioner av de stabila grenarna av 5.10+ kärnan. # 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 flags interval auto-merge elements = { 24, 26-30, 40-50 } } }
  • Tillåter användning av kontakter och intervall vid kartläggning av adressöversättning (NAT). table ip nat { chain prerouting { typ nat hook prerouting priority dstnat; policy acceptera; dnat till 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 } beständig } }
  • Lade till stöd för det "sista" uttrycket, vilket låter dig ta reda på tidpunkten för den senaste användningen av ett regelelement eller en uppsättningslista. Funktionen stöds från och med Linux-kärnan 5.14. table ip x { set y { typeof ip daddr . tcp dport storlek 65535 flaggor dynamisk, timeout senaste timeout 1h } kedja z { typ filter krok utgångsprioritet filter; policy acceptera; uppdatera @y {ip daddr. tcp dport } } } # nft list set ip xy table ip x { set y { typeof ip daddr . tcp dport storlek 65535 flaggor dynamisk, timeout senaste timeout 1h element = { 172.217.17.14 . 443 senast använda 1s591ms timeout 1h går ut 59m58s409ms, 172.67.69.19. 443 senast använda 4s636ms timeout 1h går ut 59m55s364ms, 142.250.201.72. 443 senast använda 4s748ms timeout 1h går ut 59m55s252ms, 172.67.70.134. 443 senast använda 4s688ms timeout 1h går ut 59m55s312ms, 35.241.9.150 . 443 senast använda 5s204ms timeout 1h går ut 59m54s796ms, 138.201.122.174 . 443 senast använda 4s537ms timeout 1h går ut 59m55s463ms, 34.160.144.191. 443 senast använda 5s205ms timeout 1h går ut 59m54s795ms, 130.211.23.194 . 443 senast använda 4s436ms timeout 1h går ut 59m55s564ms } } }
  • Lade till möjligheten att definiera kvoter i setlistor. Till exempel, för att bestämma trafikkvoten för varje mål-IP-adress, kan du ange: tabell netdev x { set y { typeof ip daddr size 65535 quota over 10000 mbytes } chain y { type filter hook egress device "eth0" priority filter; policy acceptera; ip daddr @y drop } } # nft add element inet xy { 8.8.8.8 } # ping -c 2 8.8.8.8 # nft list regeluppsättningstabell netdev x { set y { typ ipv4_addr storlek 65535 kvot över 10000 mbyte elements. 8.8.8.8 kvot över 10000 196 MB används 0 byte } } kedja y { typ filter krok utgående enhet "ethXNUMX" prioritetsfilter; policy acceptera; ip daddr @y drop } }
  • Det är tillåtet att använda konstanter i setlistor. Till exempel, när du använder destinationsadressen och VLAN-ID som listnyckel, kan du direkt ange VLAN-numret (daddr . 123): table netdev t { set s { typeof ether saddr . vlan id storlek 2048 flaggor dynamisk, timeout timeout 1m } kedja c {typ filter krok ingress enhet eth0 prioritet 0; policy acceptera; etertyp != 8021q uppdatera @s { eter daddr . 123 } räknare } }
  • Lade till ett nytt "destroy"-kommando för att ovillkorligt radera objekt (till skillnad från delete-kommandot genererar det inte ENOENT när man försöker ta bort ett saknat objekt). Kräver minst Linuxkärna 6.3-rc för att fungera. förstör tabellens ip-filter

Källa: opennet.ru

Lägg en kommentar