wydanie filtra pakietów , rozwijającego się jako zamiennik iptables, ip6tables, arptables i ebtables poprzez unifikację interfejsów filtrowania pakietów dla IPv4, IPv6, ARP i mostów sieciowych. W pakiecie nftables znajdują się komponenty filtrowania pakietów działające w przestrzeni użytkownika, podczas gdy na poziomie jądra pracuje subsystem nf_tables, który jest częścią jądra Linux od wydania 3.13. Niezbędne dla działania wydania nftables 0.9.3 zmiany są zawarte w przyszłej gałęzi jądra Linux 5.5.
Na poziomie jądra udostępniany jest jedynie ogólny interfejs, niezależny od konkretnego protokołu, który zapewnia podstawowe funkcje wyodrębniania danych z pakietów, wykonywania operacji na danych i zarządzania ruchem. Logika filtrowania oraz specyficzne dla protokołów przetwarzacze są kompilowane do bajtkodu w przestrzeni użytkownika, a następnie ten bajtkod jest ładowany do jądra za pomocą interfejsu Netlink i wykonywany w specjalnej maszynie wirtualnej, przypominającej BPF (Berkeley Packet Filters). Tego rodzaju podejście pozwala znacznie zmniejszyć rozmiar kodu filtrowania działającego na poziomie jądra oraz przenieść wszystkie funkcje analizy reguł i logiki obsługi protokołów do przestrzeni użytkownika.
Główne nowości:
- Wsparcie dla dopasowywania pakietów według czasu. Można zdefiniować zarówno zakresy czasowe i daty, w których reguła będzie działać, jak i skonfigurować działanie w poszczególnych dniach tygodnia. Dodano również nową opcję „-T” do wyświetlania czasu epokowego w sekundach.
meta time "2019-12-24 16:00" — "2020-01-02 7:00"
meta hour "17:00" — "19:00"
meta day "Fri" - Wsparcie dla przywracania i zapisywania znaczników SELinux (secmark).
ct secmark set meta secmark
meta secmark set ct secmark - Wsparcie dla list map-ów synproxy, pozwalających na określenie więcej niż jednej reguły dla backendu.
tabela ip foo {
synproxy https-synproxy {
mss 1460
wscale 7
timestamp sack-perm
}synproxy other-synproxy {
mss 1460
wscale 5
}chain pre {
type filter hook prerouting priority raw; policy accept;
tcp dport 8888 tcp flags syn notrack
}łańcuch bar {
type filter hook forward priority filter; policy accept;
ct state invalid,untracked synproxy name ip saddr map { 192.168.1.0/24 : "https-synproxy", 192.168.2.0/24 : "other-synproxy" }
}
} - Możliwość dynamicznego usuwania elementów zestawów set z reguł przetwarzania pakietów.
nft add rule … delete @set5 { ip6 saddr . ip6 daddr }
- Wsparcie dla dopasowywania VLAN według identyfikatora i protokołu, określonych w metadanych interfejsu mostu sieciowego;
meta ibrpvid 100
meta ibrvproto vlan - Opcja „-t” („—terse”) do wykluczania elementów zestawów set przy wyświetlaniu reguł. Przy wykonaniu „nft -t list ruleset” zostanie wyświetlone:
table ip x {
set y {
type ipv4_addr
}
}A przy „nft list ruleset”
table ip x {
set y {
type ipv4_addr
elements = { 192.168.10.2, 192.168.20.1,
192.168.4.4, 192.168.2.34 }
}
} - Możliwość wskazania więcej niż jednego urządzenia w łańcuchach netdev (działa tylko z jądrem 5.5) w celu łączenia typowych reguł filtrowania.
add table netdev x
add chain netdev x y { \
type filter hook ingress devices = { eth0, eth1 } priority 0;
} - Możliwość dodawania opisów typów danych.
# nft describe ipv4_addr
datatype ipv4_addr (adres IPv4) (typ podstawowy integer), 32 bity - Możliwość budowy interfejsu CLI z biblioteką linenoise zamiast libreadline.
./configure —with-cli=linenoise
Źródło: opennet.ru
