Vydanie paketového filtra nftables 1.0.7

Bolo zverejnené vydanie paketového filtra nftables 1.0.7, ktoré zjednocuje rozhrania na filtrovanie paketov pre IPv4, IPv6, ARP a sieťové mosty (zamerané na nahradenie iptables, ip6table, arptables a ebtables). Balík nftables obsahuje komponenty paketového filtra, ktoré bežia v užívateľskom priestore, zatiaľ čo úroveň jadra zabezpečuje subsystém nf_tables, ktorý je súčasťou linuxového jadra od vydania 3.13. Na úrovni jadra je k dispozícii iba generické rozhranie nezávislé od protokolu, ktoré poskytuje základné funkcie na extrahovanie údajov z paketov, vykonávanie operácií s údajmi a riadenie toku.

Samotné filtrovacie pravidlá a obslužné programy špecifické pre daný protokol sú skompilované do bajtkódu používateľského priestoru, po ktorom sa tento bajtkód načíta do jadra pomocou rozhrania Netlink a spustí sa v jadre v špeciálnom virtuálnom stroji pripomínajúcom BPF (Berkeley Packet Filters). Tento prístup umožňuje výrazne zmenšiť veľkosť filtrovacieho kódu spusteného na úrovni jadra a presunúť všetky funkcie pravidiel parsovania a logiku práce s protokolmi do užívateľského priestoru.

Hlavné zmeny:

  • Pre systémy so systémom Linux kernel 6.2+ bola pridaná podpora pre mapovania protokolov vxlan, geneve, gre a gretap, čo umožňuje jednoduchým výrazom kontrolovať hlavičky v zapuzdrených paketoch. Napríklad, ak chcete skontrolovať IP adresu v hlavičke vnoreného paketu z VxLAN, môžete teraz použiť pravidlá (bez toho, aby ste najprv museli deenkapsulovať hlavičku VxLAN a naviazať filter na rozhranie 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 }
  • Bola implementovaná podpora automatického zlučovania zvyškov po čiastočnom vymazaní prvku set-listu, čo umožňuje vymazať prvok alebo časť rozsahu z existujúceho rozsahu (predtým bolo možné rozsah vymazať len celý). Napríklad po odstránení prvku 25 zo zoznamu množín s rozsahmi 24-30 a 40-50 zostane zoznam 24, 26-30 a 40-50. Opravy potrebné na fungovanie automatického zlučovania budú ponúkané vo vydaniach údržby stabilných vetiev jadra 5.10+. # nft zoznam pravidiel tabuľky ip x { set y { typeof tcp dport flags interval automatického zlučovania prvkov = { 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 zlúčenia prvkov = { 24, 26-30, 40-50 } } }
  • Umožňuje použitie kontaktov a rozsahov pri mapovaní prekladu adries (NAT). tabuľka ip nat { chain prerouting { type nat hook prerouting priority dstnat; prijať 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é } }
  • Pridaná podpora pre výraz „posledný“, ktorý vám umožňuje zistiť čas posledného použitia prvku pravidla alebo zoznamu množín. Táto funkcia je podporovaná od jadra Linuxu 5.14. tabuľka 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; prijať politiku; aktualizovať @y { ip daddr . tcp dport } } } # nft zoznam set ip xy tabuľka 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 uplynie 59m58s409ms, 172.67.69.19 . 443 naposledy použitý 4s636ms časový limit 1h uplynie 59m55s364ms, 142.250.201.72 . 443 naposledy použité 4s748ms časový limit 1h uplynie 59m55s252ms, 172.67.70.134 . 443 naposledy použitý 4s688ms časový limit 1h uplynie 59m55s312ms, 35.241.9.150 . 443 naposledy použitý 5s204ms časový limit 1h uplynie 59m54s796ms, 138.201.122.174 . 443 naposledy použitý 4s537ms časový limit 1h uplynie 59m55s463ms, 34.160.144.191 . 443 naposledy použité 5s205ms časový limit 1h uplynie 59m54s795ms, 130.211.23.194 . 443 naposledy použité 4s436ms časový limit 1h uplynie 59m55s564ms } } }
  • Pridaná možnosť definovať kvóty v zoznamoch množín. Ak chcete napríklad určiť kvótu návštevnosti pre každú cieľovú adresu IP, môžete zadať: tabuľka netdev x { set y { typeof ip daddr veľkosť 65535 kvóta nad 10000 0 mbytes } chain y { type filter hook výstup zariadenia "eth8.8.8.8" filter priority; prijať politiku; ip daddr @y drop } } # nft pridať prvok inet xy { 2 } # ping -c 8.8.8.8 4 # nft zoznam množín pravidiel netdev x { set y { typ ipv65535_addr veľkosť 10000 kvóta nad 8.8.8.8 10000 mbytes prvkov. = { 196 prvkov 0 kvóta nad XNUMX XNUMX mbajtov použitých XNUMX bajtov } } reťazec y { typ filtra hák výstup zariadenia „ethXNUMX“ prioritný filter; prijať politiku; ip daddr @y drop } }
  • Používanie konštánt v zoznamoch množín je povolené. Napríklad pri použití cieľovej adresy a VLAN ID ako kľúča zoznamu môžete priamo zadať čí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 priorita 0; prijať politiku; ether type != 8021q update @s { ether daddr . 123 } počítadlo } }
  • Pridaný nový príkaz "zničiť" na bezpodmienečné vymazanie objektov (na rozdiel od príkazu delete negeneruje ENOENT pri pokuse o vymazanie chýbajúceho objektu). Na fungovanie vyžaduje aspoň jadro Linuxu 6.3-rc. zničiť tabuľkový ip filter

Zdroj: opennet.ru

Pridať komentár