Wydanie filtru pakietów nftables 1.0.6

Opublikowano wydanie filtra pakietów nftables 1.0.6, ujednolicającego interfejsy filtrowania pakietów dla IPv4, IPv6, ARP oraz mostów sieciowych (ma na celu zastąpienie iptables, ip6tables, arptables i ebtables). Pakiet nftables zawiera komponenty filtra pakietów działające w przestrzeni użytkownika, podczas gdy na poziomie jądra działanie zapewnia podsystem nf_tables, wchodzący w skład jądra Linux od wersji 3.13. Na poziomie jądra dostarczany jest jedynie ogólny interfejs, niezależny od konkretnego protokołu, oferujący podstawowe funkcje ekstrakcji danych z pakietów, wykonywania operacji na danych oraz zarządzania przepływem.

Bezpośrednio zasady filtracji i specyficzne dla protokołów komponenty są kompilowane do bajtowego kodu w przestrzeni użytkownika, po czym ten kod bajtowy jest ładowany do jądra za pomocą interfejsu Netlink i wykonywany w jądrze w specjalnej maszynie wirtualnej, przypominającej BPF (Berkeley Packet Filters). Tego typu podejście pozwala znacznie zmniejszyć rozmiar kodu filtracji działającego na poziomie jądra i przenieść wszystkie funkcje parsowania zasad i logiki pracy z protokołami do przestrzeni użytkownika.

Główne zmiany:

  • W optymizatorze reguł, wywoływanym przy użyciu opcji „-o/—optimize”, wdrożono automatyczne pakowanie reguł poprzez ich łączenie i przekształcanie w listy map i zbiorów. Na przykład, reguły # cat ruleset.nft table ip x { chain y { type filter hook input priority filter; policy drop; meta iifname eth1 ip saddr 1.1.1.1 ip daddr 2.2.2.3 accept meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.2.4 accept meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.3.0/24 accept meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.4.0-2.2.4.10 accept meta iifname eth2 ip saddr 1.1.1.3 ip daddr 2.2.2.5 accept } } po wykonaniu „nft -o -c -f ruleset.nft” zostaną przekształcone w następujący sposób: ruleset.nft:4:17-74: meta iifname eth1 ip saddr 1.1.1.1 ip daddr 2.2.2.3 accept ruleset.nft:5:17-74: meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.2.4 accept ruleset.nft:6:17-77: meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.3.0/24 accept ruleset.nft:7:17-83: meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.4.0-2.2.4.10 accept ruleset.nft:8:17-74: meta iifname eth2 ip saddr 1.1.1.3 ip daddr 2.2.2.5 accept do: iifname . ip saddr . ip daddr { eth1 . 1.1.1.1 . 2.2.2.3, eth1 . 1.1.1.2 . 2.2.2.4, eth1 . 1.1.1.2 . 2.2.3.0/24, eth1 . 1.1.1.2 . 2.2.4.0-2.2.4.10, eth2 . 1.1.1.3 . 2.2.2.5 } accept
  • Optymalizator może również przekształcać w bardziej zwartą formę zasady, w których już używane są proste listy zbiorów, na przykład zasady: # cat ruleset.nft table ip filter { chain input { type filter hook input priority filter; policy drop; iifname "lo" accept ct state established,related accept comment "W ruchu, który generujemy, ufamy" iifname "enp0s31f6" ip saddr { 209.115.181.102, 216.197.228.230 } ip daddr 10.0.0.149 udp sport 123 udp dport 32768-65535 accept iifname "enp0s31f6" ip saddr { 64.59.144.17, 64.59.150.133 } ip daddr 10.0.0.149 udp sport 53 udp dport 32768-65535 accept } } Po wykonaniu "nft -o -c -f ruleset.nft" zostaną spakowane w następujący sposób: ruleset.nft:6:22-149: iifname "enp0s31f6" ip saddr { 209.115.181.102, 216.197.228.230 } ip daddr 10.0.0.149 udp sport 123 udp dport 32768-65535 accept ruleset.nft:7:22-143: iifname "enp0s31f6" ip saddr { 64.59.144.17, 64.59.150.133 } ip daddr 10.0.0.149 udp sport 53 udp dport 32768-65535 accept do: iifname . ip saddr . ip daddr . udp sport . udp dport { enp0s31f6 . 209.115.181.102 . 10.0.0.149 . 123 . 32768-65535, enp0s31f6 . 216.197.228.230 . 10.0.0.149 . 123 . 32768-65535, enp0s31f6 . 64.59.144.17 . 10.0.0.149 . 53 . 32768-65535, enp0s31f6 . 64.59.150.133 . 10.0.0.149 . 53 . 32768-65535 } accept
  • Rozwiązano problem z generowaniem kodu bajtowego dla łączenia zakresów, w których stosowane są typy z różnym porządkiem bajtów, na przykład IPv4 (porządek sieciowy bajtów) i meta mark (systemowy porządek bajtów). table ip x { map w { typeof ip saddr . meta mark : verdict flags interval counter elements = { 127.0.0.1-127.0.0.4 . 0x123434-0xb00122 : accept, 192.168.0.10-192.168.1.20 . 0x0000aa00-0x0000aaff : accept, } } chain k { type filter hook input priority filter; policy drop; ip saddr . meta mark vmap @w } }
  • Ustanowiono korespondencję rzadkich protokołów przy użyciu wyrażeń raw, na przykład: meta l4proto 91 @th,400,16 0x0 accept
  • Rozwiązano problemy z dodawaniem reguł z zakresami: insert rule x y tcp sport { 3478-3497, 16384-16387 } counter accept
  • Udoskonalone API JSON, które wprowadziło wsparcie dla wyrażeń w zbiorach i mapach.
  • W rozszerzeniach biblioteki python nftables umożliwiono ładowanie zestawów reguł do przetwarzania w trybie sprawdzenia („-c”) oraz dodano wsparcie dla zewnętrznego definiowania zmiennych.
  • W elementach zbiorów dozwolone jest dodawanie komentarzy.
  • W byte ratelimit zezwolono na wskazanie wartości zerowej.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster