Nftables-Tutorial

Nftables Tutorial



Dieses Tutorial erklärt, wie Sie mit der Linux-Firewall von Nftables arbeiten. Dieser Inhalt ist sowohl für Linux-erfahrene als auch für neue Benutzer optimiert.

Nftables ist eine Komponente des Linux-Kernels, die Firewall-Funktionalitäten bereitstellt. Es ist der Ersatz von Iptables.







Nachdem Sie dieses Tutorial gelesen haben, werden Sie die Regeln von Nftables verstehen und in der Lage sein, Ihre Firewall zu erstellen. Sie benötigen keine Vorkenntnisse zu Iptables.



Alle Beispiele in diesem Tutorial enthalten Screenshots, die es allen Linux-Benutzern, unabhängig von ihrem Wissensstand, leicht machen, sie zu verstehen und umzusetzen.



Erste Schritte mit Nftables

Bevor Sie beginnen, erstellen und öffnen Sie eine Datei mit einem Texteditor wie nano oder vi, um mit der Eingabe Ihrer ersten Nftables-Regeln basierend auf dem folgenden Beispiel zu beginnen. Nicht kopieren und einfügen; alles eingeben.





nano firewall.nft

Das Beispiel in diesem Tutorial ist ziemlich einfach und zeigt eine restriktive Firewall, in der der gesamte IPv4-Verkehr mit Ausnahme von Loopback und bestimmten Ports verworfen wird.



Im vorherigen Screenshot habe ich die erste Zeile verwendet, um mein lokales Netzwerk (192.168.0.0/16) als LinuxHintNet zu definieren.

definieren Sie LinuxHintNet = 192.168.0.0 / 16

In der zweiten Zeile definiere ich eine Gruppe von Ports (80.443 und 22). Ich nenne diese Gruppe AllowPorts, weil ich plane, Datenverkehr durch sie zuzulassen. AllowPorts ist ein beliebiger Name.

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

Dann füge ich eine Tabelle hinzu, die ein Container oder eine Gruppe von Ketten und Regeln ist; beide werden unten erklärt. Tabellen helfen Regeln und Ketten zu organisieren. Ich habe die Tabelle im Beispiel „Restrictive“ genannt, weil sie eine restriktive Richtlinie enthält und ihr Name willkürlich ist.

Die IP vor dem Tabellennamen gibt an, dass Warteschlangentabellenregeln nur auf IPv4-Datenverkehr angewendet werden. Sie können inet anstelle von IP verwenden, um Regeln auf IPv4- und IPv6-Protokolle anzuwenden. Oder Sie können IP nur für IPv6 durch ip6 ersetzen.

Denken Sie daran, Restriktiv ist ein Name, den ich willkürlich definiert habe. Sie können die Tabelle benennen, wie Sie möchten.

In meinem Fall wende ich Regeln nur auf IPv4 an, wie unten gezeigt.

Tabelle hinzufügen IP Restriktiv

Verwenden Sie für beide Protokolle Folgendes:

Tabelle hinzufügen inet Restriktiv

Dann fügen wir die erste Basiskette hinzu, die ich willkürlich Incoming nenne, weil sie sich auf den eingehenden Datenverkehr bezieht. Sie können es jedoch benennen, wie Sie möchten.

Die folgende Basiskette verwirft standardmäßig den gesamten eingehenden Datenverkehr:

  • add chain ip Restrictive Incoming: Dieser Abschnitt fügt die Restrictive Incoming-Kette hinzu, die auf IPv4 angewendet werden soll
  • Typfilter: Dies definiert den Kettentyp als Filter, da er den Datenverkehr filtert. Andere mögliche Kettentypen sind Route oder NAT
  • Hook-Eingabe: Bezieht sich auf eingehende Pakete
  • Priorität 0: Die Priorität der Basiskette definiert die Reihenfolge der Basisketten
  • Policy Drop: Die Drop-Policy verwirft standardmäßig alle Pakete
Kette hinzufügen IP Eingeschränkter Eingang { Typ Filter-Hook-Eingangspriorität 0 ; Politikabfall; }

Wie Sie im folgenden Screenshot sehen können, habe ich zwei weitere Basisketten erstellt, die der vorherigen ähneln, Restrictive Redirect und Restrictive Outgoing. Der Unterschied ist der jeweils definierte Hook (Hook Forward und Hook Output). Sie zu erklären, wiederholt sich.

Nach den drei Basisketten können wir mit den Nftables-Regeln fortfahren, um Loopback-Verkehr zuzulassen.

Ich füge die folgenden Zeilen für eingehenden und ausgehenden Datenverkehr auf der Loopback-Schnittstelle hinzu.

Regel hinzufügen IP Restrictive Incoming iifname lo counter accept

Regel hinzufügen IP Eingeschränkter eingehender oifname-Lo-Zähler akzeptieren

Jetzt füge ich vier Regeln hinzu, die ausgehenden und eingehenden TCP- und UDP-Datenverkehr über alle Ports akzeptieren, die in der am Anfang der Datei definierten Variable $AllowPorts enthalten sind.

Regel hinzufügen IP Restriktiver eingehender TCP-Sport $AllowPorts entgegennehmen

Regel hinzufügen IP Restriktiver ausgehender TCP-Port $AllowPorts entgegennehmen

Regel hinzufügen IP Eingeschränkter eingehender UDP-Sport $AllowPorts entgegennehmen

Regel hinzufügen IP Restriktiver ausgehender UDP-Port $AllowPorts entgegennehmen

Sie können das vollständige Skript unten sehen.

Wenn Sie mit der Eingabe Ihrer Tabellen, Ketten und Regeln fertig sind, schließen Sie das Dokument und speichern Sie die Änderungen.

# In den ersten beiden Zeilen definiere ich mein lokales Netzwerk (LinuxHintNet) und eine Reihe von Ports (80,
#443,22), um den Verkehr durch sie in den folgenden Regeln zu ermöglichen.
definieren Sie LinuxHintNet = 192.168.0.0 / 16
AllowPorts definieren   = { 80 , 443 , 53 , 22 }
#Ich deklariere eine neue Tabelle, die Ketten und Regeln enthalten wird. Ich nenne diese Tabelle 'Restriktiv'.
#Das 'ip' wendet Regeln nur auf IPv4 an. Verwenden Sie für IPv6 nur „ip6“ und für beide Protokolle „inet“.
Tabelle hinzufügen IP Restriktiv
# Nachdem ich die Tabelle erstellt habe, erstelle ich drei Ketten, Incoming, Redirect und Outgoing,
#Ihre Namen sind willkürlich. Alle von ihnen lassen standardmäßig eingehenden, ausgehenden und weiterleitenden Datenverkehr fallen.
Kette hinzufügen IP Eingeschränkter Eingang { Typ Filter-Hook-Eingangspriorität 0 ; Politikabfall; }
Kette hinzufügen IP Restriktive Weiterleitung { Typ Hook-Forward-Priorität filtern 0 ; Politikabfall; }
Kette hinzufügen IP Restriktiv abgehend { Typ Filter-Hook-Ausgangspriorität 0 ; Politikabfall; }
# Ich implementiere zwei Regeln, um Loopback-Verkehr zuzulassen.
Regel hinzufügen IP Restrictive Incoming iifname lo counter accept
Regel hinzufügen IP Eingeschränkter eingehender oifname-Lo-Zähler akzeptieren
# Ich implementiere Regeln, um Datenverkehr durch Ports zuzulassen, die in der AllowPorts-Variablen definiert sind.
Regel hinzufügen IP Restriktiver eingehender TCP-Sport $AllowPorts entgegennehmen
Regel hinzufügen IP Restriktiver ausgehender TCP-Port $AllowPorts entgegennehmen
Regel hinzufügen IP Restriktiver eingehender UDP-Sport $AllowPorts entgegennehmen

Regel hinzufügen IP Restriktiver ausgehender UDP-Port $AllowPorts entgegennehmen

Um die Firewall zu aktivieren, führen Sie den folgenden Befehl aus:

sudo nft -f firewall.nft

Sie können Ihre Regeln überprüfen, indem Sie den folgenden Befehl ausführen:

sudo nft-Listenregelsatz

Das ist eine grundlegende restriktive Firewall.

Fazit:

Wie Sie sehen können, ist Nftables viel benutzerfreundlicher als Iptables, und Benutzer können Nftables schneller lernen als Iptables. Da Iptables eingestellt wird und viele Distributionen Nftables als Standard-Firewall verwenden, einschließlich Debian. Iptables-erfahrene Benutzer sollten sich das Tool Iptables-nftables-compat ansehen, das Iptables in Nftables übersetzt. Dies kann ihnen helfen, die Unterschiede zu verstehen.

Professionelle Benutzer wie Systemadministratoren arbeiten in der Regel weiterhin mit Iptables; Vermeiden Sie es, Nftables zu ignorieren, um Zeit zu sparen und gleichzeitig die Filterung zu verbessern. Ich hoffe, dieser Artikel war einfach genug, um Sie davon zu überzeugen, Nftables auszuprobieren.