Została wydana wersja nftables 1.0.5 filtra pakietów, która ujednolica interfejsy filtrowania pakietów dla protokołów IPv4, IPv6, ARP i mostów sieciowych (mająca na celu zastąpienie iptables, ip6table, arptables i ebtables). W tym samym czasie opublikowano również towarzyszącą bibliotekę libnftnl 1.2.3, udostępniającą niskopoziomowy interfejs API do interakcji z podsystemem nf_tables.
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 zmiany:
- W optymalizatorze reguł wywoływanym przy określeniu opcji „-o/--optimize” rozwiązano problemy z łączeniem reguł, map-list i set-list. # cat ruleset.nft table ip x { chain y { type nat hook postrouting priority srcnat; policy drop; ip saddr 1.1.1.1 tcp dport 8000 snat do 4.4.4.4:80 ip saddr 2.2.2.2 tcp dport 8001 snat do 5.5.5.5:90 } } # nft -o -c -f ruleset.nft Scalenie: ruleset.nft:4:3-52: ip saddr 1.1.1.1 tcp dport 8000 snat do 4.4.4.4:80 ruleset.nft:5:3-52: ip saddr 2.2.2.2 tcp dport 8001 snat do 5.5.5.5:90 do: snat do ip saddr . mapa portów tcp { 1.1.1.1 . 8000 : 4.4.4.4 . 80, 2.2.2.2 . 8001 : 5.5.5.5 . 90 }
- Podczas łączenia elementów Ethernet i VLAN definiowana jest dynamiczna lista zestawów, wypełniana na podstawie parametrów ścieżki pakietów. add table netdev x add chain netdev xy { type filter hook ingress device enp0s25 priority 0; } add set netdev x macset { typeof ether daddr . vlan id; flags dynamic,timeout; } add rule netdev xy update @macset { ether daddr . vlan id timeout 60s } add rule netdev xy ether saddr . vlan id { 0a:0b:0c:0d:0e:0f . 42, 0a:0b:0c:0d:0e:0f . 4095 } counter accept
- Dostosowano wyświetlanie reguł z listami map zawierającymi maski w nazwach interfejsów. tabela inet filter { chain INPUT { iifname vmap { "eth0" : jump input_lan, "wg*" : jump input_vpn } } chain input_lan {} chain input_vpn {} }
- Naprawiono regresywne zmiany, które powodowały nieprawidłową analizę leksykalną prawidłowych reguł.
- Rozwiązano problemy z powolnym przetwarzaniem i automatycznym scalaniem dużych list z elementami definiującymi zakresy wartości.
- Naprawiono błąd występujący podczas dodawania elementów do nieprawidłowej listy zestawów.
Źródło: opennet.ru
