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 / 16W 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ącyW przypadku obu protokołów użyj następujących:
dodaj tabelę inet OgraniczająceNastę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
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 zaakceptujdodaj 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 zaakceptujdodaj 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.