Vydanie paketového filtra nftables 1.0.6

Bolo zverejnené vydanie paketového filtra nftables 1.0.6, 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:

  • V optimalizátore pravidiel, ktorý sa volá pri zadávaní voľby "-o/--optimize", sa nastavilo automatické balenie pravidiel ich kombináciou a ich konverziou na zoznamy máp a množín. Napríklad pravidlá sú # cat ruleset.nft table ip x { chain y { type filter hook input priority filter; pokles politiky; meta iifname eth1 ip saddr 1.1.1.1 ip daddr 2.2.2.3 akceptovať meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.2.4 akceptovať meta iifname eth1 ip saddr 1.1.1.2 ip saddr.2.2.3.0eth 24 prijať ip daddr.1 1.1.1.2 .2.2.4.0 ip daddr 2.2.4.10-2 prijať meta iifname eth1.1.1.3 ip saddr 2.2.2.5 ip daddr 4 prijať } } po "nft -o -c -f ruleset.nft" sa skonvertuje na nasledovné: sada pravidiel. nft:17:74-1: meta iifname eth1.1.1.1 ip saddr 2.2.2.3 ip daddr 5 accept ruleset.nft:17:74-1: meta iifname eth1.1.1.2 ip saddr 2.2.2.4 ip daddr 6 accept ruleset.nft 17:77-1: meta iifname eth1.1.1.2 ip saddr 2.2.3.0 ip daddr 24/7 prijať pravidlá.nft:17:83-1: meta iifname eth1.1.1.2 ip saddr 2.2.4.0 ip daddr 2.2.4.10-8. ruleset.nft:17:74-2: meta iifname eth1.1.1.3 ip saddr 2.2.2.5 ip daddr 1 prijať do: iifname . ip saddr. ip daddr { eth1.1.1.1 . 2.2.2.3. 1, eth1.1.1.2. 2.2.2.4. 1, eth1.1.1.2 . 2.2.3.0. 24/1, eth1.1.1.2. 2.2.4.0. 2.2.4.10-2, eth1.1.1.3. 2.2.2.5. XNUMX } prijať
  • Optimalizátor môže tiež zhrnúť pravidlá, ktoré už používajú jednoduché zoznamy nastavení, do kompaktnejšej formy, ako napríklad: # cat ruleset.nft tabuľka ip filter { chain input { type filter hook input filter priority; pokles politiky; iifname "lo" accept ct state created,related accept comment "V premávke pochádzame, veríme" iifname "enp0s31f6" ip saddr { 209.115.181.102, 216.197.228.230 } ip daddr 10.0.0.149 ud123 32768udport 65535udport 0ud sport iifname "enp31s6f64.59.144.17" ip saddr { 64.59.150.133, 10.0.0.149 } ip daddr 53 udp sport 32768 udp dport 65535-6 akceptovať } - pravidlá pre balík dc "likenft." : ruleset.nft:22:149-0: iifname "enp31s6f209.115.181.102" ip saddr { 216.197.228.230, 10.0.0.149 } ip daddr 123 udp sport 32768d65535 akceptovať pravidlá udp 7 udp.22 143-0 31 : iifname "enp6s64.59.144.17f64.59.150.133" ip saddr { 10.0.0.149, 53 } ip daddr 32768 udp sport 65535 udp dport 0-31 prijať do: iifname ip saddr. ip ocko. udp šport. udp dport { enp6s209.115.181.102f10.0.0.149 . 123. 32768. 65535. 0-31, enp6s216.197.228.230f10.0.0.149. 123. 32768. 65535. 0-31, enp6s64.59.144.17f10.0.0.149. 53. 32768. 65535. 0-31, enp6s64.59.150.133f10.0.0.149. 53. 32768. 65535. XNUMX-XNUMX } prijať
  • Vyriešený problém s generovaním bajtkódu na zlučovanie intervalov, ktoré používajú typy s rôznou endianitou, ako je IPv4 (endian siete) a meta značka (system endian). tabuľka ip x { mapa w { typeof ip saddr . meta značka : verdikt flags interval counter elements = { 127.0.0.1-127.0.0.4 . 0x123434-0xb00122 : prijať, 192.168.0.10-192.168.1.20 . 0x0000aa00-0x0000aaff : akceptovať, } } reťazec k { typ filter hák filter priority vstupu; pokles politiky; ip saddr. meta značka vmap @w } }
  • Vylepšené mapovanie zriedkavých protokolov pri použití nespracovaných výrazov, napríklad: meta l4proto 91 @th,400,16 0x0 accept
  • Opravené problémy s povoľovaním pravidiel v intervaloch: vložte pravidlo xy tcp sport { 3478-3497, 16384-16387 } counter accept
  • Rozhranie JSON API bolo vylepšené tak, aby podporovalo výrazy v zoznamoch množín a máp.
  • V rozšíreniach knižnice nftables python je povolené načítať sady pravidiel na spracovanie v režime kontroly ("-c") a bola pridaná podpora pre definíciu externých premenných.
  • Pridávanie komentárov je povolené v prvkoch set-listov.
  • V limite bajtovej rýchlosti je povolené zadať nulovú hodnotu.

Zdroj: opennet.ru

Pridať komentár