Wydanie pakietowego filtra nftables 1.1.6

Opublikowano wydanie filtrów pakietowych nftables 1.1.6, ujednolicającego interfejsy filtracji pakietów dla IPv4, IPv6, ARP oraz mostów sieciowych (ma na celu zastąpienie iptables, ip6tables, arptables i ebtables). Równocześnie opublikowano wydanie towarzyszącej biblioteki libnftnl 1.3.1, która dostarcza niskopoziomowe API do interakcji z systemem 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:

  • Zapewnione jest pełne wsparcie dla lekkich tuneli, takich jak vxlan, geneve i erspan: table netdev global { tunnel t1 { id 10 ip saddr 192.168.2.10 ip daddr 192.168.2.11 sport 1025 dport 20020 ttl 1 erspan { version 1 index 2 } } tunnel t2 { id 10 ip saddr 192.168.3.10 ip daddr 192.168.3.11 sport 1025 dport 21021 ttl 1 erspan { version 1 index 2 } } chain in { type filter hook ingress device veth0 priority 0; tunnel name ip saddr map { 10.141.10.12 : «t1», 10.141.10.13 : «t2» } fwd to erspan1 } } Przed załadowaniem zasad należy utworzyć interfejs sieciowy erspan1: ip link add dev erspan1 type erspan external
  • Dodano wsparcie dla masek w nazwach interfejsów sieciowych w handlerach netdev, na przykład, aby dodać podstawowy łańcuch do filtru ruchu przychodzącego dla wszystkich urządzeń vlan, można wskazać: table netdev t { chain c { type filter hook ingress devices = { «vlan*», «veth0» } priority filter; policy accept; } }
  • Na systemach z jądrem Linux 6.18+ wdrożono wsparcie dla przesyłania ramek L2 w interfejsie mostków sieciowych do lokalnego przetwarzania, na przykład, aby kierować wszystkie ramki Ethernet dla adresu MAC de:ad:00:00:be:ef w stosie IP, można podać: table bridge global { chain pre { type filter hook prerouting priority 0; policy accept; ether daddr de:ad:00:00:be:ef meta pkttype set host ether daddr set meta ibrhwaddr accept } }
  • Dodano nową infrastrukturę do testów fuzzingowych z wykorzystaniem narzędzia afl++ (american fuzzy lop++), aktywowaną na etapie kompilacji przez „./configure —with-fuzzer”.

Ź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