Filtr pakietów nftables w wersji 1.0.1

Opublikowano wydanie pakietu filter nftables 1.0.1, ujednolicającego interfejsy filtrowania pakietów dla IPv4, IPv6, ARP i mostów sieciowych (mające na celu zastąpienie iptables, ip6table, arptables i ebtables). Zmiany wymagane do działania wersji nftables 1.0.1 są zawarte w jądrze Linuksa 5.16-rc1.

Pakiet nftables zawiera komponenty filtrujące pakiety, które działają w przestrzeni użytkownika, natomiast pracę na poziomie jądra zapewnia podsystem nf_tables, który jest częścią jądra Linuksa od wersji 3.13. Poziom jądra zapewnia jedynie ogólny, niezależny od protokołu interfejs, który zapewnia 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łów są kompilowane w kod bajtowy przestrzeni użytkownika, po czym ten kod bajtowy jest ładowany do jądra za pomocą interfejsu Netlink i wykonywany w jądrze na specjalnej maszynie wirtualnej przypominającej BPF (Berkeley Packet Filters). Takie podejście umożliwia znaczne zmniejszenie rozmiaru kodu filtrującego działającego na poziomie jądra oraz przeniesienie wszystkich funkcji reguł parsowania i logiki pracy z protokołami do przestrzeni użytkownika.

Główne innowacje:

  • Zmniejszone zużycie pamięci podczas ładowania dużych list zestawów i map.
  • Przyspieszono ponowne ładowanie list zestawów i map.
  • Przyspieszono drukowanie wybranych tabel i łańcuchów w dużych zestawach reguł. Na przykład czas wykonania polecenia „nft list ruleset” w celu wyświetlenia zestawu reguł zawierającego 100 tysięcy wierszy wynosi 3.049 sekundy, a przy wyprowadzaniu tylko tabel nat i filter („nft list table nat”, „nft list table filter ”) zostaje skrócony do 1.969 i 0.697 sekundy.
  • Wykonywanie zapytań z opcją „--terse” zostało przyspieszone podczas przetwarzania reguł z dużymi listami zestawów i map.
  • Istnieje możliwość filtrowania ruchu z łańcucha „egress”, który jest przetwarzany na tym samym poziomie, co procedura obsługi wyjścia w łańcuchu netdev (egress hook), tj. na etapie, gdy sterownik odbiera pakiet ze stosu sieciowego jądra. tabela netdev filter {wyjście łańcucha {typ haka filtra urządzenia wyjściowe = { eth0, eth1 } priorytet 0; metapriorytet ustaw ip saddr mapa { 192.168.10.2 : abcd:2, 192.168.10.3 : abcd:3 } } }
  • Umożliwia dopasowanie i modyfikację bajtów w nagłówku i zawartości pakietu przy danym przesunięciu. # nft dodaj regułę xy @ih,32,32 0x14000000 licznik # nft dodaj regułę xy @ih,32,32 set 0x14000000 licznik

Źródło: opennet.ru

Dodaj komentarz