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


12.05.2022

Odszyfrowanie historii

Z inicjatywy prezesa IPN, dr. Karola Nawrockiego, powstało Biuro Nowych Technologii. Jego...
01.04.2022

Program partnerski

NGAGEFirma NFON, ogólnoeuropejski dostawca komunikacji głosowej w chmurze, ogłosił...
01.04.2022

SI w TFI PZU

Na platformie do inwestowania inPZU działa już nowa metoda identyfikacji tożsamości...
01.04.2022

Kooperacja w chmurze

To oparta na stworzonej przez NetApp technologii ONTAP i w pełni zarządzana przez...
01.04.2022

Nowe laptopy od Dynabook

Dynabook wprowadza do swojej oferty dwa laptopy z procesorami Intel Core 12. generacji,...
01.04.2022

Ryzen do stacji roboczych

AMD przedstawił nową gamę procesorów Ryzen Threadripper PRO 5000 serii WX.
31.03.2022

Serwery dla MŚP

Firma Lenovo wprowadziła nowe rozwiązania w zakresie infrastruktury IT Future Ready,...
31.03.2022

Innowacyjny kontroler SSD

Microchip zaprezentował nowe kontrolery SSD, które umożliwią obsługę napędów o pojemności...
31.03.2022

Wydajny jak Brother

Brother dodał do swojej oferty trzy nowe, atramentowe urządzenia wielofunkcyjne, które...

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.

Artykuł pochodzi z miesięcznika: IT Professional

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

.

Transmisje online zapewnia: StreamOnline

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