Wydanie pakietowego filtru nftables 1.1.0

Opublikowano wydanie pakietowego filtra nftables 1.1.0, który ujednolica interfejsy filtrowania pakietów dla IPv4, IPv6, ARP i mostów sieciowych (ma na celu zastąpienie iptables, ip6table, arptables i ebtables). Znacząca zmiana numeru wersji nie jest związana z żadnymi drastycznymi zmianami, a jedynie wynika z kontynuacji numeracji w systemie dziesiętnym (poprzednie wydanie to 1.0.9). Równocześnie opublikowano wydanie towarzyszącej biblioteki libnftnl 1.2.7, oferującej niskopoziomowe API do interakcji z podsystemem nf_tables.

W pakiecie nftables zawarte są komponenty filtrów pakietowych, które działają w przestrzeni użytkownika, podczas gdy na poziomie jądra działania szczególną rolę pełni subsystem nf_tables, wchodzący w skład jądra Linux od wersji 3.13. Na poziomie jądra udostępniany jest tylko ogólny interfejs, niezależny od konkretnego protokołu, który zapewnia podstawowe funkcje wydobywania danych z pakietów, realizacji 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 wyrażeniach map dodano obsługę zmiennych: define dst_map = { ::1234 : 5678 } table ip6 nat { map dst_map { typeof ip6 daddr : tcp dport; elements = $dst_map } chain prerouting { ip6 nexthdr tcp redirect to ip6 daddr map @dst_map } }
  • Dodano wsparcie dla VLAN: ip saddr 10.1.1.1 icmp type echo-request vlan id set 321 # payload ether type 8021ad vlan id 10 vlan type 8021q vlan id 100 vlan type ip accept
  • Dla wyrażeń „log” wprowadzono nowy preprocesor stringów z obsługą zmiennych: define message="test" log prefix "my $message"
  • Przy obliczaniu wartości wyrażenia „meta hour” zrealizowano obsługę ujemnego przesunięcia w strefie czasowej, określonej przez zmienną środowiskową TZ: TZ=UTC-4 nft add rule x y meta hour "22:00"
  • Zrealizowano konwersję kolejności bajtów przy użyciu wyrażeń ct i meta, a także przy użyciu operacji scalania i wskazywania zakresów w zestawach set. map mapv6 { typeof ip6 dscp : meta mark; } meta mark set ip6 dscp map @map1 będzie miał bajtkod: [ payload load 2b @ network header + 0 => reg 1 ] [ bitwise reg 1 = ( reg 1 & 0x0000c00f ) ^ 0x00000000 ] [ byteorder reg 1 = ntoh(reg 1, 2, 2) ] [ bitwise reg 1 = ( reg 1 > 0x00000006 ) ] [ lookup reg 1 set mapv6 dreg 1 ] [ meta set mark with reg 1 ]
  • Wznowiono wsparcie dla komendy „replace rule”. replace rule ip t1 c1 handle 3 ‘jhash ip protocol . ip saddr mod 170 vmap { 0-94 : goto wan1, 95-169 : goto wan2, 170-269 }’
  • Wznowiono możliwość dodawania urządzeń sieciowych do istniejących flowtable: create flowtable inet filter f1 { hook ingress priority 0; counter } add flowtable inet filter f1 { devices = { dummy1 } ; }
  • Rozwiązano problemy z używaniem komendy „create set”: define ip-block-4 = { 1.1.1.1 } create set netdev filter ip-block-4-test { type ipv4_addr flags interval auto-merge elements = $ip-block-4 }
  • Rozwiązano problemy z używaniem cyfrowego przedstawienia opcji tcp: tcp option 254
  • Rozwiązano problemy z używaniem wyrażeń meta i ct z map-setami: meta mark set vlan id map { 1 : 0x00000001, 4095 : 0x00004095 }
  • W wyrażeniach payload i concat zabronione jest wskazywanie danych większych niż 512 bajtów.
  • Podczas wykonywania polecenia „nft describe” zaimplementowano uwzględnienie wartości z plików group, rt_mark i rt_realms, umiejscowionych w katalogach /etc/iproute2/ i /use/share/iproute2/. # nft describe meta rtclassid meta expression, datatype realm (królestwo routingu) (basetype integer), 32 bity wstępnie zdefiniowane symbole z /etc/iproute2/rt_realms (w dziesiętnym): cosmos 0 Odrzuć instrukcję z zakresem meta mark set 0-100
  • Przyspieszono operację wyświetlania listy tabel. Zaimplementowano wsparcie dla opcji -t/—terse w celu przyspieszenia poleceń „list table” i „list set”.
  • Zapewniono przekształcenie wyrażeń meter w dynamiczne zbiory set: add rule t c tcp dport 80 meter m size 128 { ip saddr timeout 2s limit rate 10/second } zostanie przekształcone w set m { type ipv4_addr size 128 flags dynamic,timeout } tcp dport 80 update @m { ip saddr timeout 2s limit rate 10/second burst 5 packets }
  • W prezentacji w formacie JSON dodano wsparcie dla obiektów synproxy i map-zestawów z połączonymi danymi.
  • W zestawach set określonych w formacie JSON zaimplementowano wsparcie dla flagi auto-merge.
  • Przy użyciu prezentacji w formacie JSON dopuszcza się wskazanie wielu urządzeń w bloku „chain”.
  • Przy użyciu opcji -f/—filename zapewniona jest obróbka ścieżek w odniesieniu do katalogu bieżącego pliku.
  • Przy użyciu opcji -I/—include przeszukiwanie ścieżek domyślnie teraz odbywa się od końca listy.
  • Poprawiono działanie opcji -o/—optimize z wyrażeniami zawierającymi liczniki wartości: # nft -c -o -f ruleset.nft Scalanie: ruleset.nft:5:17-45: ct state invalid counter drop ruleset.nft :6:17-59: ct state established,related counter accept do: ct state vmap { invalid counter : drop, established counter : accept, related counter : accept } Scalanie: ruleset.nft:7:17-43: tcp dport 80 counter accept ruleset.nft:8:17-44: tcp dport 123 counter accept do: tcp dport { 80, 123 } counter accept Scalanie: ruleset.nft:9:17-64: ip saddr 1.1.1.1 ip daddr 2.2.2.2 counter accept ruleset.nft:10:17-62: ip saddr 1.1.1.2 ip daddr 3.3.3.3 counter drop do: ip saddr . ip daddr vmap { 1.1.1.1 . 2.2.2.2 counter : accept, 1.1.1.2 . 3.3.3.3 counter : drop }
  • Przywrócono zgodność z zrzutami elementu set, utworzonymi w nftables przed wersją 0.9.8.

Ź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