Filtr pakietów nftables w wersji 0.9.9

Wydano filtr pakietów nftables 0.9.9. Ujednolica on interfejsy filtrowania pakietów dla protokołów IPv4, IPv6, ARP i mostów sieciowych (ma on zastąpić iptables, ip6tables, arptables i ebtables). Jednocześnie wydano towarzyszącą bibliotekę libnftnl 1.2.0, która zapewnia niskopoziomowe API do interakcji z podsystemem nf_tables. Zmiany wymagane dla nftables 0.9.9 zostały uwzględnione w jądrze. Linux 5.13-rc1.

Pakiet nftables zawiera komponenty filtru pakietów działające w przestrzeni użytkownika, natomiast za zadania na poziomie jądra odpowiada podsystem nf_tables, który jest częścią jądra. Linux Od wersji 3.13 na poziomie jądra dostępny jest tylko ogólny, niezależny od protokołu interfejs, udostępniający podstawowe funkcje wyodrębniania danych z pakietów, wykonywania operacji na danych i kontroli przepływu.

Same reguły filtrowania i procedury obsługi specyficzne dla protokołu są kompilowane do bajtkodu w przestrzeni użytkownika, po czym bajtkod ten jest ładowany do jądra za pomocą interfejsu Netlink i wykonywany w jądrze w specjalnym maszyna wirtualna, przypominające BPF (Berkeley Packet Filters). To podejście pozwala na znaczną redukcję rozmiaru kodu filtrującego działającego na poziomie jądra i przenosi całą analizę reguł i logikę protokołu do przestrzeni użytkownika.

Główne innowacje:

  • Wprowadzono możliwość przeniesienia przetwarzania tabeli przepływów na stronę karty sieciowej, co umożliwia flaga „offload”. Tabela przepływów to mechanizm optymalizacji ścieżki przekazywania pakietów, w którym pełne przejście przez wszystkie łańcuchy przetwarzania reguł jest stosowane tylko do pierwszego pakietu, a wszystkie pozostałe pakiety w przepływie są przekazywane bezpośrednio. table ip global { flowtable f { hook ingress priority filter + 1 devices = { lan3, lan0, wan } flags offload } chain forward { type filter hook forward priority filter; policy accept; ip protocol { tcp, udp } flow add @f } chain post { type nat hook postrouting priority filter; policy accept; oifname "wan" masquerade } }
  • Dodano obsługę dołączania flagi do tabeli w celu powiązania jej z właścicielem, co pozwala na zapewnienie wyłącznego korzystania z tabeli przez proces. Po zakończeniu procesu powiązana z nim tabela jest automatycznie usuwana. Informacje o procesie są wyświetlane w zrzucie reguł jako komentarz: table ip x { # programname nft flags owner chain y { type filter hook input priority filter; policy accept; counter packets 1 bytes 309 } }
  • Dodano obsługę specyfikacji IEEE 802.1ad (stackowanie VLAN lub QinQ), która definiuje sposób zastępowania wielu tagów VLAN w jednej ramce Ethernet. Na przykład, aby sprawdzić typ zewnętrznej ramki Ethernet 8021ad i identyfikator VLAN=342, można użyć konstrukcji ... ether type 802.1ad vlan id 342, aby sprawdzić typ zewnętrznej ramki Ethernet 8021ad/vlan id=1, zagnieżdżony 802.1q/vlan id=2 i dalszą enkapsulację pakietu IP: ... ether type 8021ad vlan id 1 vlan type 8021q vlan id 2 vlan type ip counter
  • Dodano obsługę zarządzania zasobami z wykorzystaniem ujednoliconej hierarchii cgroups v2. Kluczową różnicą między cgroups v2 a v1 jest użycie wspólnej hierarchii cgroups dla wszystkich typów zasobów, zamiast oddzielnych hierarchii do alokacji zasobów procesora, regulacji zużycia pamięci i operacji wejścia/wyjścia. Na przykład, aby sprawdzić, czy przodek gniazda na pierwszym poziomie cgroupv2 pasuje do maski „system.slice”, można użyć konstrukcji: ... socket cgroupv2 level 1 „system.slice”
  • Dodano możliwość sprawdzania składników pakietów SCTP (funkcjonalność wymagana do działania pojawi się w jądrze) Linux 5.14). Na przykład, aby sprawdzić, czy pakiet zawiera fragment o typie „data” i polu „type”: … sctp chunk data exists … sctp chunk data type 0
  • Wykonanie operacji ładowania reguł z flagą „-f” zostało przyspieszone około dwukrotnie. Przyspieszono również generowanie listy reguł.
  • Dostępna jest kompaktowa forma testowania bitów ustawionych we flagach. Na przykład, aby sprawdzić, czy bity statusu snat i dnat nie są ustawione, można określić: … ct status ! snat,dnat, aby sprawdzić, czy bit syn jest ustawiony w masce bitowej syn,ack: … tcp flags syn / syn,ack, aby sprawdzić, czy bity fin i rst nie są ustawione w masce bitowej syn,ack,fin,rst: … tcp flags != fin,rst / syn,ack,fin,rst
  • Słowo kluczowe „verdict” jest dozwolone w definicjach typeof dla set/map: add map xm { typeof iifname . ip protocol . th dport : verdict ;}

Źródło: opennet.ru

Kup niezawodny hosting dla stron z ochroną DDoS, serwery VPS VDS 🔥 Kup niezawodny hosting stron internetowych z ochroną DDoS, serwery VPS VDS | ProHoster