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. Sama logika filtrowania i procedury obsługi specyficzne dla protokołu są kompilowane do kodu bajtowego w przestrzeni użytkownika, po czym ten kod bajtowy jest ładowany do jądra za pomocą interfejsu Netlink i wykonywany na specjalnej maszynie wirtualnej przypominającej BPF (Berkeley Packet Filters). Takie podejście pozwala znacznie zmniejszyć rozmiar kodu filtrującego działającego na poziomie jądra i przenieść wszystkie funkcje reguł analizowania i logiki pracy z protokołami do przestrzeni użytkownika.
Główne innowacje:
- Obsługa dopasowywania pakietów według czasu. Możesz zdefiniować zarówno zakresy godzin, jak i dat, w których reguła będzie uruchamiana, a także skonfigurować wyzwalanie w poszczególnych dniach tygodnia. Dodano także nową opcję „-T”, aby wyświetlić czas epokowy w sekundach.
metaczas \»2019-12-24 16:00\" — \»2020-01-02 7:00\"
metagodzina „17:00” - „19:00”
metadzień „piątek” - Wsparcie dla odzyskiwania i zapisywania znaków SELinux (secmark).
ct secmark ustawia meta secmark
meta secmark ustaw ct secmark - Obsługa list map synproxy, umożliwiająca zdefiniowanie więcej niż jednej reguły na backend.
tabela ip foo {
synproxy https-synproxy {
ms 1460
wskala 7
znacznik czasu sack-perm
}synproxy inny-synproxy {
ms 1460
wskala 5
}łańcuch przed {
typ hak filtrujący priorytet wstępnego trasowania surowy; polityka akceptuje;
tcp dport 8888 flagi tcp syn notrack
}prowadnica łańcucha {
typ haka filtra filtr priorytetu do przodu; polityka akceptuje;
Stan ct nieprawidłowy, nieśledzona nazwa synproxy ip saddr mapa { 192.168.1.0/24: „https-synproxy”, 192.168.2.0/24: „other-synproxy” }
}
} - Możliwość dynamicznego usuwania ustawionych elementów z reguł przetwarzania pakietów.
nft dodaj regułę... usuń @set5 { ip6 saddr. tata ip6}
- Obsługa mapowania sieci VLAN według identyfikatora i protokołu zdefiniowanego w metadanych interfejsu mostka sieciowego;
meta ibrpvid 100
meta ibrvproto vlan - Opcja „-t” („--terse”), aby wykluczyć elementy zestawu podczas wyświetlania reguł. Uruchomienie „nft -t list ruleset” spowoduje wyświetlenie:
IP tabeli x {
ustaw y {
wpisz adres ipv4_addr
}
}Oraz z „zestawem reguł listy nft”
IP tabeli x {
ustaw y {
wpisz adres ipv4_addr
elementy = { 192.168.10.2, 192.168.20.1,
192.168.4.4, 192.168.2.34}
}
} - Możliwość określenia więcej niż jednego urządzenia w łańcuchach netdev (działa tylko z jądrem 5.5) w celu połączenia wspólnych reguł filtrowania.
dodaj tabelę netdev x
dodaj łańcuch netdev xy { \
typ urządzeń wejściowych z hakami filtrującymi = { eth0, eth1 } priorytet 0;
} - Możliwość dodawania opisów typów danych.
# nft opisz ipv4_addr
typ danych ipv4_addr (adres IPv4) (liczba całkowita typu podstawowego), 32 bity - Możliwość zbudowania interfejsu CLI z biblioteką linenoise zamiast libreadline.
./configure --with-cli=linenoise
Źródło: opennet.ru