nftables pakketfilter release 1.0.7

De uitgave van nftables 1.0.7 pakketfilter is gepubliceerd, die pakketfilterinterfaces verenigt voor IPv4, IPv6, ARP en netwerkbruggen (ter vervanging van iptables, ip6table, arptables en ebtables). Het nftables-pakket bevat pakketfiltercomponenten die in de gebruikersruimte draaien, terwijl het kernelniveau wordt geleverd door het nf_tables-subsysteem, dat sinds release 3.13 deel uitmaakt van de Linux-kernel. Op kernelniveau is er alleen een generieke protocolonafhankelijke interface die basisfuncties biedt voor het extraheren van gegevens uit pakketten, het uitvoeren van bewerkingen op gegevens en het regelen van de stroom.

De filterregels zelf en protocolspecifieke handlers worden gecompileerd in bytecode van de gebruikersruimte, waarna deze bytecode in de kernel wordt geladen met behulp van de Netlink-interface en in de kernel wordt uitgevoerd in een speciale virtuele machine die lijkt op BPF (Berkeley Packet Filters). Deze aanpak maakt het mogelijk om de grootte van de filtercode die op kernelniveau draait aanzienlijk te verkleinen en alle functies van parseerregels en de logica van het werken met protocollen naar de gebruikersruimte te verplaatsen.

Grote veranderingen:

  • Voor systemen met Linux kernel 6.2+ is ondersteuning voor vxlan-, geneve-, gre- en gretap-protocoltoewijzingen toegevoegd, waardoor eenvoudige expressies de headers in ingekapselde pakketten kunnen controleren. Om bijvoorbeeld het IP-adres in de header van een genest pakket van VxLAN te controleren, kunt u nu de volgende regels gebruiken (zonder dat u eerst de VxLAN-header hoeft te de-encapsuleren en het filter aan de vxlan0-interface moet binden): ... udp dport 4789 vxlan ip-protocol 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 }
  • Ondersteuning voor het automatisch samenvoegen van restanten na gedeeltelijke verwijdering van een setlistelement is geïmplementeerd, waardoor u een element of een deel van een bereik uit een bestaand bereik kunt verwijderen (voorheen kon een bereik alleen in zijn geheel worden verwijderd). Na het verwijderen van element 25 uit een setlist met de bereiken 24-30 en 40-50 blijft de lijst bijvoorbeeld 24, 26-30 en 40-50. De reparaties die nodig zijn om automerging te laten werken, zullen worden aangeboden in onderhoudsreleases van de stabiele takken van de 5.10+ kernel. # nft lijst regelset tabel ip x { set y {type van tcp dport vlaggen interval automatisch samenvoegen elementen = { 24-30, 40-50 } } } # nft verwijder element ip xy { 25 } # nft lijst regelset tabel ip x { set y { typeof tcp dport flags interval auto-merge elements = { 24, 26-30, 40-50 } } }
  • Maakt het gebruik van contacten en bereiken mogelijk bij het in kaart brengen van adresvertaling (NAT). table ip nat {chain prerouting {type nat hook prerouting prioriteit dstnat; beleid accepteren; dnat naar ip daddr. tcp dport-kaart { 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 } }
  • Ondersteuning toegevoegd voor de “laatste” uitdrukking, waarmee u het tijdstip kunt achterhalen van het laatste gebruik van een regelelement of setlist. De functie wordt ondersteund vanaf Linux kernel 5.14. tabel ip x {set y {typevan ip daddr. tcp dport-grootte 65535 vlaggen dynamisch, time-out laatste time-out 1 uur } chain z { type filter hook uitvoerprioriteitfilter; beleid accepteren; update @y { ip daddr . tcp dport } } } # nft lijst set ip xy tabel ip x { set y { typeof ip daddr . tcp dport size 65535 vlaggen dynamisch,time-out laatste time-out 1h elementen = { 172.217.17.14. 443 laatst gebruikte 1s591ms time-out 1 uur verstrijkt 59m58s409ms, 172.67.69.19 . 443 laatst gebruikte 4s636ms time-out 1 uur verstrijkt 59m55s364ms, 142.250.201.72 . 443 laatst gebruikte 4s748ms time-out 1 uur verstrijkt 59m55s252ms, 172.67.70.134 . 443 laatst gebruikte 4s688ms time-out 1 uur verstrijkt 59m55s312ms, 35.241.9.150 . 443 laatst gebruikte 5s204ms time-out 1 uur verloopt 59m54s796ms, 138.201.122.174 . 443 laatst gebruikte 4s537ms time-out 1 uur verstrijkt 59m55s463ms, 34.160.144.191 . 443 laatst gebruikte 5s205ms time-out 1 uur verstrijkt 59m54s795ms, 130.211.23.194 . 443 laatst gebruikt 4s436ms time-out 1 uur verloopt 59m55s564ms } } }
  • De mogelijkheid toegevoegd om quota's in setlijsten te definiëren. Om bijvoorbeeld het verkeersquotum voor elk doel-IP-adres te bepalen, kunt u het volgende opgeven: table netdev x { set y { typeof ip daddr size 65535 quota over 10000 mbytes } chain y { type filter hook egress device "eth0" prioriteitsfilter; beleid accepteren; ip daddr @y drop } } # nft element toevoegen inet xy { 8.8.8.8 } # ping -c 2 8.8.8.8 # nft lijst regelset tabel netdev x { set y { type ipv4_addr grootte 65535 quotum meer dan 10000 MB elementen = { 8.8.8.8. 10000 quotum meer dan 196 MB gebruikt 0 bytes } } chain y { type filter hook uitgangsapparaat “ethXNUMX” prioriteitsfilter; beleid accepteren; ip daddr @y drop } }
  • Het gebruik van constanten in setlijsten is toegestaan. Als u bijvoorbeeld het bestemmingsadres en de VLAN-ID als lijstsleutel gebruikt, kunt u rechtstreeks het VLAN-nummer opgeven (daddr . 123): table netdev t { set s { typeof ether saddr . vlan id grootte 2048 vlaggen dynamisch, time-out time-out 1m } chain c { type filter hook ingress device eth0 prioriteit 0; beleid accepteren; ethertype != 8021q update @s { ether daddr . 123 } teller } }
  • Een nieuwe opdracht "vernietigen" toegevoegd om objecten onvoorwaardelijk te verwijderen (in tegenstelling tot de opdracht verwijderen genereert deze geen ENOENT wanneer wordt geprobeerd een ontbrekend object te verwijderen). Vereist minimaal Linux kernel 6.3-rc om te werken. vernietig het tabel-IP-filter

Bron: opennet.ru

Voeg een reactie