Opublikowano wydanie pakietu filter nftables 1.0.2, 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.2 są zawarte w jądrze Linuksa 5.17-rc.
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ł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:
- Dodano tryb optymalizacji reguł, włączany za pomocą nowej opcji „-o” („--optimize”), którą można łączyć z opcją „--check” w celu sprawdzania i optymalizacji zmian w pliku zestawu reguł bez konieczności jego faktycznego ładowania. Optymalizacja pozwala na łączenie podobnych reguł, na przykład reguł: 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
zostanie scalone z meta iifname. ip saddr . ip daddr { eth1 . 1.1.1.1 . 2.2.2.3, eth1 . 1.1.1.2 . 2.2.2.5 } akceptuj ip saddr. ip daddr vmap { 1.1.1.1 . 2.2.2.2 : akceptuję, 2.2.2.2 . 3.3.3.3 : usuń }
Przykład użycia: # nft -c -o -f ruleset.test Scalanie: ruleset.nft:16:3-37: ip daddr 192.168.0.1 licznik zaakceptuj ruleset.nft:17:3-37: ip daddr 192.168.0.2 licznik zaakceptuj ruleset.nft:18:3-37: ip daddr 192.168.0.3 licznik zaakceptuj do: ip daddr { 192.168.0.1, 192.168.0.2, 192.168.0.3 } licznik pakietów 0 bajtów 0 zaakceptuj
- Listy zestawów obsługują teraz określanie opcji IP i TCP, a także fragmentó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 obsługę opcji TCP fastopen, md5sig i mptcp.
- Dodano obsługę używania podtypu mp-tcp w mapowaniach: opcja tcp podtyp mptcp 1
- Ulepszony kod filtrujący po stronie jądra.
- Flowtable teraz w pełni obsługuje format JSON.
- Umożliwia użycie akcji „odrzuć” podczas operacji dopasowywania ramek Ethernet. ether saddr aa:bb:cc:dd:ee:ff ip daddr 192.168.0.1 odrzuć
Źródło: opennet.ru
