Strona korzysta z plików cookies w celu realizacji usług i zgodnie z Polityką Plików Cookies.



24.05.2022

Nowe możliwości w zakresie...

VMware rozszerza ofertę zabezpieczeń end-to-end dla obciążeń cloud-native poprzez ochronę...
24.05.2022

Zarządzanie kluczami

IBM przedstawił nowe rozwiązanie do zarządzania kluczami w wielu chmurach, oferowane jako...
24.05.2022

Ochrona przed zagrożeniami

ESET wprowadził nowe wersje swoich produktów biznesowych do ochrony stacji roboczych,...
24.05.2022

Value Stream Management

Micro Focus zaprezentował nową platformę do zarządzania strumieniem wartości VSM (ang....
24.05.2022

Unijna decyzja Value Stream...

Komisja rynku wewnętrznego i ochrony konsumentów Parlamentu Europejskiego poparła...
24.05.2022

Nowy laptop Dynabooka

Sprzęt waży 1,45 kg, a jego grubość to 17,8 mm. Jest odporny na czynniki zewnętrzne, gdyż...
24.05.2022

Przepływ pracy

QNAP oferuje model TS-435XeU wykorzystujący procesor Marvell OCTEON TX2 CN9131 2,2 GHz z...
24.05.2022

Wideo bez wstrząsów

Kamera stałopozycyjna firmy Axis Communications służy do monitoringu miejsc zagrożonych...
24.05.2022

Akceleratory dla naukowców

Firma AMD ogłosiła wprowadzenie do sprzedaży opartych na architekturze AMD CDNA 2...

Nftables – zapora systemu Linux

Data publikacji: 04-01-2022 Autor: Grzegorz Kuczyński

Obecnie najdłużej rozwijaną i najpowszechniej stosowaną zaporą systemu Linux jest iptables. Jednak jej kernelowy backend już dawno został podmieniony w transparentny sposób, a jego pełny potencjał możliwy jest do wykorzystania tylko przez nowe narzędzie nft.

 

Od ponad 20 lat obsługa sieci w systemie Linux rozwijana jest przez projekt Netfilter. Niewiele krótszą historię ma narzędzie iptables, które jest jedynie programem działającym w przestrzeni użytkownika. Za jego pomocą można wprowadzać zmiany w regułach filtrowania pakietów, które realizowane są przez podsystem jądra i jego moduł o nazwie x_tables. W latach 2009–2013 prowadzono prace nad nowym podsystemem filtrowania pakietów i powstał nf_tables. Ponieważ narzędzie iptables było już w tym czasie bardzo rozpowszechnione, zdecydowano się zrobić to w sposób transparentny dla użytkownika.

 

W tym celu zmieniono kod narzędzia iptables tak, aby tłumaczył swoje reguły na nowy język reguł modułu nf_tables. Problem polega na tym, że język reguł stosowanych przez iptables nie jest w stanie wykorzystać pełnych możliwości nowego podsystemu filtrowania. Deweloperzy modułu nf_tables od początku projektowali dla niego nowego klienta w postaci narzędzia nft. Jednak silne przywiązanie do iptables wśród społeczności spowodowało, iż więcej pracy poświęcano na jego integrację z nf_tables niż na rozwój nft. Taka sytuacja trwa od niemal siedmiu lat. Jednak obserwując komunikaty deweloperów niektórych dystrybucji systemu Linux, można zauważyć zdecydowaną chęć zmiany tego stanu rzeczy. Dla przykładu w dystrybucjach RHEL 8 i Debian Buster zdecydowano, iż domyślnym silnikiem filtrowania pakietów będzie nftables. Ponadto we wspomnianej wersji Debiana deweloperzy chcą, aby domyślnym narzędziem manipulacji zapory został nft.


> Co nowego w nftables


Od strony jądra nowe podejście do zapory systemu Linux to przede wszystkim integracja i rozszerzenie możliwości. Programiści Netfilter stworzyli nową maszynę wirtualną, która potrafi uruchamiać ustalony kod binarny w jądrze. Takie podejście sprawia, że dokonywanie zmian odbywa się przeważnie poza kodem jądra systemu. Natomiast komunikacja pomiędzy klientem a jądrem odbywa się za pomocą kernelowego protokołu netlink.


Do tej pory użytkownik systemu Linux używał wielu oddzielnych narzędzi {ip,ip6,arp,eb}tables do filtrowania ruchu, w zależności od protokołu. Teraz nft zastępuje je wszystkie. Narzędzia takie jak iptables nie pozwalają zastosować wielu akcji dla jednej reguły. Natomiast wykorzystanie zbioru adresów IP w regułach wymagało stosowania oddzielnego narzędzia ipset. Nftables nie tylko integruje te dwa narzędzia, ale wprowadza kilka typów listy klucz–wartość.


Reguły tworzone przez iptables tworzyły jeden zwarty kawałek kodu binarnego i wgrywały go do przestrzeni jądra. Zatem aktualizacja jednej z reguł wymagała przeładowania całego kodu. Jest to problem już obserwowany w środowisku z wielką liczbą kontenerów. W nftables każda reguła jest oddzielnym elementem w połączonej liście.


W odróżnieniu od iptables w nftables nie ma predefiniowanych tabel ani łańcuchów. Fakt ten stanowi największe wyzwanie w procesie przejścia pomiędzy tymi narzędziami. W zamian nft oferuje tzw. mechanizm podpięć (ang. hooks), które mogą być używane w strategicznych miejscach stosu sieciowego.


> Integracja z systemem


W dystrybucji Debian 11 (Buster) nie musimy niczego dodatkowo instalować, aby korzystać z nftables. Gdyby jednak brakowało nft, wystarczy poniższe polecenie.

 

# aptitude install nftables


Sama integracja polega na włączeniu usługi nftables.service.


# systemctl enable nftables
# grep Exec /lib/systemd/system/nftables.service
# ExecStart=/usr/sbin/nft -f /etc/nftables.conf
# ExecReload=/usr/sbin/nft -f /etc/nftables.conf
# ExecStop=/usr/sbin/nft flush ruleset


Jak widzimy, obsługuje ona trzy polecenia, a każde z nich odpowiada określonym komendom polecenia nft. Natomiast plik /etc/nftables.conf instalowany jest wraz z systemem i ma minimalną konfigurację.

 

> Podstawy


Wstępna konfiguracja zapory to dobry punkt wejścia w procesie poznawania składni nft. W rzeczywistości ta konfiguracja nie zawiera żadnych reguł, a jedynie definicje jednej tabeli i trzech łańcuchów. Więcej o najważniejszych elementach zapory nftables przeczytamy w ramce Netfilter hooks, tables i chains.


#!/usr/sbin/nft -f

flush ruleset

table inet filter {
chain input {
type filter hook input priority 0;
}
chain forward {
type filter hook forward priority 0;
}
chain output {
type filter hook output priority 0;
}
}


Pierwsza linia odpowiada za właściwą interpretację komend w powłoce systemowej. Druga z kolei resetuje zaporę poprzez usunięcie wszystkich dotychczasowych wpisów. W linii piątej definiowana jest tabela „filter” typu inet. Linie 6, 9 i 12 to definicje trzech łańcuchów typu filter. Wszystkie trzy są tego samego typu, ale każdy ma inny punkt podpięcia (hook). Na rys. 1 zostały umieszczone wszystkie podpięcia dla protokołu IP.


> Typy tabel


Tabele w nftables dzieli się ze względu na typ protokołu, który obsługują. Dostępne są następujące protokoły: ip, ip6, inet, arp, bridge, netdev. Protokół inet oznacza rodzinę protokołów ip i ip6. Poniższe polecenie tworzy tabelę przeznaczoną do obsługi protokołów IPv4/6 o nazwie „filter_t”.


# nft create table inet filter_t

 

[...]

 

Autor zawodowo zajmuje się informatyką. Jest członkiem społeczności open source, prowadzi blog na temat systemu GNU/Linux.

Pełna treść artykułu jest dostępna w papierowym wydaniu pisma.

prenumerata Numer niedostępny Spis treści

.

Transmisje online zapewnia: StreamOnline

All rights reserved © 2019 Presscom / Miesięcznik "IT Professional"