Samouczek Nftables

Samouczek Nftables



Ten samouczek wyjaśnia, jak pracować z zaporą Nftables Linux. Ta zawartość jest zoptymalizowana zarówno dla doświadczonych, jak i nowych użytkowników Linuksa.

Nftables jest składnikiem jądra Linuksa zapewniającym funkcje zapory sieciowej. Jest to zamiennik Iptables.







Po przeczytaniu tego samouczka zrozumiesz zasady Nftables i będziesz mógł stworzyć swoją zaporę ogniową. Nie potrzebujesz wcześniejszej wiedzy na temat Iptables.



Wszystkie przykłady w tym samouczku zawierają zrzuty ekranu, ułatwiając wszystkim użytkownikom Linuksa, niezależnie od poziomu wiedzy, ich zrozumienie i wdrożenie.



Pierwsze kroki z Nftables

Zanim zaczniesz, utwórz i otwórz plik za pomocą edytora tekstu, takiego jak nano lub vi, aby zacząć wpisywać swoje pierwsze reguły Nftables na podstawie poniższego przykładu. Nie kopiuj-wklej; wpisz wszystko.





nano firewall.nft

Przykład w tym samouczku jest dość prosty i pokazuje restrykcyjną zaporę sieciową, w której cały ruch IPv4 jest odrzucany z wyjątkiem pętli zwrotnej i określonych portów.



Na poprzednim zrzucie ekranu użyłem pierwszej linii do zdefiniowania mojej sieci lokalnej (192.168.0.0/16) jako LinuxHintNet.

zdefiniuj LinuxHintNet = 192.168.0.0 / 16

W drugim wierszu definiuję grupę portów (80,443 i 22). Nazywam tę grupę AllowPorts, ponieważ planuję przepuszczać przez nie ruch. AllowPorts to dowolna nazwa.

zdefiniuj AllowPorts   = { 80 , 443 , 53 , 22 }

Następnie dodaję tabelę, która jest kontenerem lub grupą łańcuchów i reguł; oba z nich wyjaśniono poniżej. Tabele pomagają uporządkować zasady i łańcuchy. Nazwałem tabelę w przykładzie „Restrykcyjna”, ponieważ zawiera restrykcyjną politykę, a jej nazwa jest dowolna.

Adres IP przed nazwą tabeli wskazuje, że reguły tabeli kolejek będą stosowane tylko do ruchu IPv4. Możesz użyć inet zamiast IP, aby zastosować reguły do ​​protokołów IPv4 i IPv6. Lub możesz zastąpić IP IP6 tylko dla IPv6.

Pamiętaj, że restrykcyjna to nazwa, którą zdefiniowałem arbitralnie. Możesz nazwać tabelę, jak chcesz.

W moim przypadku stosuję reguły tylko do IPv4, jak pokazano poniżej.

dodaj tabelę IP Ograniczający

W przypadku obu protokołów użyj następujących:

dodaj tabelę inet Ograniczające

Następnie dodajemy pierwszy łańcuch bazowy, który dowolnie nazywam Incoming, ponieważ jest powiązany z ruchem przychodzącym. Możesz jednak nazwać to, jak chcesz.

Poniższy łańcuch podstawowy domyślnie odrzuca cały ruch przychodzący:

  • add chain ip Restrictive Incoming: Ta sekcja dodaje łańcuch Restrictive Incoming, który ma być zastosowany do IPv4
  • filtr typu: definiuje typ łańcucha jako filtr, ponieważ będzie filtrować ruch. Inne możliwe typy łańcuchów to trasa lub NAT
  • wejście hook: Odnosi się do pakietów przychodzących
  • priorytet 0: Priorytet łańcucha bazowego określa kolejność łańcuchów bazowych
  • policy drop: polityka drop domyślnie odrzuca wszystkie pakiety
Dodaj łańcuch IP Restrykcyjne przychodzące { rodzaj priorytet wejścia haka filtra 0 ; spadek polityki; }

Jak widać na poniższym zrzucie ekranu, stworzyłem dwa inne łańcuchy bazowe podobne do poprzedniego, Restrictive Redirect i Restrictive Outgoing. Różnica polega na zdefiniowanym zaczepie dla każdego (zaczep do przodu i wyjście zaczepu). Wyjaśnianie ich jest powtarzalne.

Po trzech podstawowych łańcuchach możemy kontynuować z regułami Nftables, aby zezwolić na ruch pętli zwrotnej.

Dodaję następujące wiersze dla ruchu przychodzącego i wychodzącego na interfejsie pętli zwrotnej.

dodaj regułę IP Restrykcyjne przychodzące iifname lo counter zaakceptuj

dodaj regułę IP Restrykcyjne przychodzące oifname lo counter zaakceptuj

Teraz dodaję cztery reguły akceptujące wychodzący i przychodzący ruch TCP i UDP przez wszystkie porty zawarte w zmiennej $AllowPorts zdefiniowanej na początku pliku.

dodaj regułę IP Restrykcyjne przychodzące sport tcp $AllowPorts licznik zaakceptuj

dodaj regułę IP Restrykcyjne wychodzące tcp dport $AllowPorts licznik zaakceptuj

dodaj regułę IP Restrykcyjne przychodzące sporty UDP $AllowPorts licznik zaakceptuj

dodaj regułę IP Restrykcyjne wychodzące udp dport $AllowPorts licznik zaakceptuj

Poniżej możesz zobaczyć pełny skrypt.

Po zakończeniu wpisywania tabel, łańcuchów i reguł zamknij dokument i zapisz zmiany.

# W pierwszych dwóch wierszach określam swoją sieć lokalną (LinuxHintNet) oraz zestaw portów (80,
#443,22)aby umożliwić ruch przez nie w poniższych zasadach.
zdefiniuj LinuxHintNet = 192.168.0.0 / 16
zdefiniuj AllowPorts   = { 80 , 443 , 53 , 22 }
#Deklaruję nową tabelę, która będzie zawierała łańcuchy i reguły. Nazywam tę tabelę „Restrykcyjną”.
#'ip' stosuje reguły tylko do IPv4. W przypadku IPv6 używaj tylko „ip6” i „inet” dla obu protokołów.
dodaj tabelę IP Ograniczający
# Po utworzeniu tabeli tworzę trzy łańcuchy, Incoming, Redirect i Outgoing,
#Ich imiona są arbitralne. Wszystkie domyślnie odrzucają ruch przychodzący, wychodzący i przesyłany dalej.
dodaj łańcuch IP Restrykcyjne przychodzące { rodzaj priorytet wejścia haka filtra 0 ; spadek polityki; }
dodaj łańcuch IP Restrykcyjne przekierowanie { rodzaj filtrowanie priorytetu do przodu 0 ; spadek polityki; }
dodaj łańcuch IP Restrykcyjne wychodzące { rodzaj priorytet wyjściowy haka filtra 0 ; spadek polityki; }
# Wdrażam dwie reguły, aby zezwolić na ruch pętli zwrotnej.
dodaj regułę IP Restrykcyjne przychodzące iifname lo counter zaakceptuj
dodaj regułę IP Restrykcyjne przychodzące oifname lo counter zaakceptuj
# Wdrażam reguły zezwalające na ruch przez porty zdefiniowane w zmiennej AllowPorts.
dodaj regułę IP Restrykcyjny przychodzący sport tcp $AllowPorts licznik zaakceptuj
dodaj regułę IP Restrykcyjne wychodzące tcp dport $AllowPorts licznik zaakceptuj
dodaj regułę IP Restrykcyjne przychodzące sporty UDP $AllowPorts licznik zaakceptuj

dodaj regułę IP Restrykcyjne wychodzące udp dport $AllowPorts licznik zaakceptuj

Aby aktywować zaporę, uruchom następujące polecenie:

sudo nft -f firewall.nft

Możesz sprawdzić swoje reguły, uruchamiając następujące polecenie:

sudo zestaw reguł listy nft

To podstawowy restrykcyjny firewall.

Wniosek:

Jak widać, Nftables jest znacznie bardziej przyjazny niż Iptables, a użytkownicy mogą uczyć się Nftables szybciej niż Iptables. Ponieważ Iptables jest wycofywane, a wiele dystrybucji używa Nftables jako domyślnej zapory ogniowej, w tym Debiana. Doświadczeni użytkownicy Iptables mogą chcieć spojrzeć na narzędzie Iptables-nftables-compat, które tłumaczy Iptables na Nftables. To może pomóc im zrozumieć różnice.

Profesjonalni użytkownicy, tacy jak administratorzy systemu, zwykle pracują z Iptables; unikaj ignorowania Nftables, aby zaoszczędzić czas, jednocześnie poprawiając filtrowanie. Mam nadzieję, że ten artykuł był wystarczająco prosty, aby przekonać Cię do wypróbowania Nftables.