Opublikowano wersję filtrowania pakietów nftables 1.0.2, ujednolicającą interfejsy filtrowania pakietów dla IPv4, IPv6, ARP i mostów sieciowych (ma na celu zastąpienie iptables, ip6tables, arptables i ebtables). Wymagane do działania zmiany w wersji nftables 1.0.2 zostały uwzględnione w jądrze Linuksa 5.17-rc.
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 nowości:
- Dodano tryb optymalizacji reguł, uruchamiany za pomocą nowej opcji „-o” („—optimize”), którą można łączyć z opcją „—check” do sprawdzania i optymalizacji zmian w pliku zestawu reguł bez jego faktycznego załadowania. Optymalizacja pozwala na łączenie podobnych reguł, na przykład: 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.5 accept ip saddr 1.1.1.1 ip daddr 2.2.2.2 accept ip saddr 2.2.2.2 ip daddr 3.3.3.3 drop
zostaną połączone w meta iifname . ip saddr . ip daddr { eth1 . 1.1.1.1 . 2.2.2.3, eth1 . 1.1.1.2 . 2.2.2.5 } accept ip saddr . ip daddr vmap { 1.1.1.1 . 2.2.2.2 : accept, 2.2.2.2 . 3.3.3.3 : drop }
Przykład użycia: # nft -c -o -f ruleset.test Łączenie: ruleset.nft:16:3-37: ip daddr 192.168.0.1 counter accept ruleset.nft:17:3-37: ip daddr 192.168.0.2 counter accept ruleset.nft:18:3-37: ip daddr 192.168.0.3 counter accept w: ip daddr { 192.168.0.1, 192.168.0.2, 192.168.0.3 } counter packets 0 bytes 0 accept
- W listach set zaimplementowano możliwość wskazywania opcji ip i tcp, a także chunków sctp: set s5 { typeof ip option ra value elements = { 1, 1024 } } set s7 { typeof sctp chunk init num-inbound-streams elements = { 1, 4 } } chain c5 { ip option ra value @s5 accept } chain c7 { sctp chunk init num-inbound-streams @s7 accept }
- Dodano wsparcie dla opcji TCP fastopen, md5sig i mptcp.
- Dodano wsparcie dla użycia w dopasowaniach podtypu mp-tcp: tcp option mptcp subtype 1
- Udoskonalono kod filtrowania działający po stronie jądra.
- Dla flowtable wdrożono pełne wsparcie dla formatu JSON.
- Wprowadzono możliwość użycia akcji „reject” w operacjach dopasowania ramek Ethernet. ether saddr aa:bb:cc:dd:ee:ff ip daddr 192.168.0.1 reject
Źródło: opennet.ru
