Vydání paketového filtru nftables 1.0.7

Bylo zveřejněno vydání paketového filtru nftables 1.0.7 sjednocující rozhraní pro filtrování paketů pro IPv4, IPv6, ARP a síťové mosty (zaměřené na nahrazení iptables, ip6table, arptables a ebtables). Balíček nftables obsahuje komponenty paketového filtru, které běží v uživatelském prostoru, zatímco práci na úrovni jádra zajišťuje subsystém nf_tables, který je součástí linuxového jádra od vydání 3.13. Úroveň jádra poskytuje pouze generické rozhraní nezávislé na protokolu, které poskytuje základní funkce pro extrakci dat z paketů, provádění operací s daty a řízení toku.

Filtrovací pravidla a obslužné rutiny specifické pro protokol jsou zkompilovány do bajtového kódu v uživatelském prostoru, poté je tento bajtový kód načten do jádra pomocí rozhraní Netlink a spuštěn v jádře ve speciálním virtuálním stroji připomínajícím BPF (Berkeley Packet Filters). Tento přístup umožňuje výrazně zmenšit velikost filtrovacího kódu běžícího na úrovni jádra a přesunout všechny funkce parsovacích pravidel a logiky pro práci s protokoly do uživatelského prostoru.

Hlavní změny:

  • Pro systémy se systémem Linux kernel 6.2+ byla přidána podpora mapování protokolů vxlan, geneve, gre a gretap, což umožňuje jednoduchým výrazům kontrolovat hlavičky v zapouzdřených paketech. Například pro kontrolu IP adresy v hlavičce vnořeného paketu z VxLAN můžete nyní použít pravidla (aniž byste museli nejprve de-zapouzdřit hlavičku VxLAN a svázat filtr s rozhraním vxlan0): ... 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 }
  • Byla implementována podpora automatického slučování zbytků po částečném smazání prvku set-listu, což umožňuje odstranit prvek nebo část rozsahu z existujícího rozsahu (dříve bylo možné rozsah smazat pouze celý). Například po odstranění prvku 25 ze seznamu sad s rozsahy 24-30 a 40-50 zůstane seznam 24, 26-30 a 40-50. Opravy potřebné pro fungování automatické slučování budou nabízeny ve vydáních údržby stabilních větví jádra 5.10+. # nft seznam pravidel set 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 automatického sloučení prvků = { 24, 26-30, 40-50 } } }
  • Umožňuje použití kontaktů a rozsahů při mapování překladu adres (NAT). tabulka ip nat { chain prerouting { type nat hook prerouting priority dstnat; přijmout politiku; dnat na 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 } trvalé } }
  • Přidána podpora pro výraz „poslední“, který umožňuje zjistit čas posledního použití prvku pravidla nebo seznamu sad. Tato funkce je podporována počínaje linuxovým jádrem 5.14. tabulka ip x { set y { typeof ip daddr . tcp dport size 65535 příznaky dynamic, timeout last timeout 1h } chain z { type filter hook output priority filter; přijmout politiku; aktualizovat @y { ip daddr . tcp dport } } } # nft seznam set ip xy tabulka ip x { set y { typeof ip daddr . tcp dport size 65535 flags dynamic, timeout last timeout 1h elements = { 172.217.17.14 . 443 naposledy použitý 1s591ms časový limit 1h vyprší 59m58s409ms, 172.67.69.19 . 443 naposledy použitý 4s636ms časový limit 1h vyprší 59m55s364ms, 142.250.201.72 . 443 naposledy použitý 4s748ms časový limit 1h vyprší 59m55s252ms, 172.67.70.134 . 443 naposledy použitý 4s688ms časový limit 1h vyprší 59m55s312ms, 35.241.9.150 . 443 naposledy použitý 5s204ms časový limit 1h vyprší 59m54s796ms, 138.201.122.174 . 443 naposledy použitý 4s537ms časový limit 1h vyprší 59m55s463ms, 34.160.144.191 . 443 naposledy použitý 5s205ms časový limit 1h vyprší 59m54s795ms, 130.211.23.194 . 443 naposledy použito 4s436ms časový limit 1h vyprší 59m55s564ms } } }
  • Přidána možnost definovat kvóty v seznamech sad. Chcete-li například určit kvótu provozu pro každou cílovou IP adresu, můžete zadat: table netdev x { set y { typeof ip daddr size 65535 kvóta nad 10000 mbytes } chain y { type filter hook egress device "eth0" prioritní filtr; přijmout politiku; ip daddr @y drop } } # nft přidat prvek inet xy { 8.8.8.8 } # ping -c 2 8.8.8.8 # nft seznam tabulka pravidel netdev x { set y { typ ipv4_addr velikost 65535 kvóta přes 10000 8.8.8.8 mbytes prvků. = { 10000 prvků 196 kvóta přes 0 XNUMX mbytů využito XNUMX bajtů } } řetěz y { typ filtru hák výstupní zařízení “ethXNUMX” prioritní filtr; přijmout politiku; ip daddr @y drop } }
  • Použití konstant v seznamech množin je povoleno. Například při použití cílové adresy a VLAN ID jako klíče seznamu můžete přímo zadat číslo VLAN (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; přijmout politiku; ether type != 8021q update @s { ether daddr . 123 } čítač } }
  • Přidán nový příkaz "destroy" pro bezpodmínečné odstranění objektů (na rozdíl od příkazu delete negeneruje ENOENT při pokusu o odstranění chybějícího objektu). K fungování vyžaduje alespoň linuxové jádro 6.3-rc. zničit stolní ip filtr

Zdroj: opennet.ru

Přidat komentář