Ein tiefer Einblick in die Iptables- und Netfilter-Architektur

Einführung

Firewalls sind ein wichtiges Tool, das zum Schutz Ihrer Server und Infrastruktur konfiguriert werden kann. Im Linux-Ökosystem ist "+ iptables " ein weit verbreitetes Firewall-Tool, das mit dem " netfilter +" - Paketfilter-Framework des Kernels zusammenarbeitet. Für Benutzer und Administratoren, die sich mit der Architektur dieser Systeme nicht auskennen, kann die Erstellung zuverlässiger Firewall-Richtlinien nicht nur aufgrund der anspruchsvollen Syntax, sondern auch aufgrund der Anzahl der in Beziehung stehenden Teile im Framework schwierig sein.

In diesem Handbuch werden wir uns mit der Architektur von "+ iptables " befassen, um sie für Benutzer verständlicher zu machen, die ihre eigenen Firewall-Richtlinien erstellen müssen. Wir werden diskutieren, wie " iptables " mit " netfilter +" interagiert und wie die verschiedenen Komponenten zusammenpassen, um ein umfassendes Filter- und Mangelsystem bereitzustellen.

Was sind IPTables und Netfilter?

Die grundlegende Firewall-Software, die in Linux am häufigsten verwendet wird, heißt "+ iptables ". Die ' iptables'-Firewall interagiert mit den Paketfilter-Hooks im Linux-Kernel-Netzwerkstapel. Diese Kernel-Hooks werden als "+ netfilter +" - Framework bezeichnet.

Jedes Paket, das in das Netzwerksystem eintritt (eingehend oder ausgehend), löst diese Hooks im Verlauf des Stacks aus, sodass Programme, die sich bei diesen Hooks registrieren, an Schlüsselpunkten mit dem Datenverkehr interagieren können. Die mit "+ iptables +" verknüpften Kernelmodule werden an diesen Hooks registriert, um sicherzustellen, dass der Datenverkehr den in den Firewall-Regeln festgelegten Bedingungen entspricht.

Netfilter Hooks

Es gibt fünf "+ netfilter +" - Hooks, mit denen sich Programme registrieren können. Während Pakete den Stapel durchlaufen, lösen sie die Kernelmodule aus, die sich bei diesen Hooks registriert haben. Die Hooks, die ein Paket auslösen wird, hängen davon ab, ob das Paket eingeht oder ausgeht, welches Ziel das Paket hat und ob das Paket zu einem früheren Zeitpunkt verworfen oder abgelehnt wurde.

Die folgenden Hooks repräsentieren verschiedene genau definierte Punkte im Netzwerkstapel:

  • + NF_IP_PRE_ROUTING +: Dieser Hook wird sehr bald nach dem Betreten des Netzwerkstacks durch eingehenden Datenverkehr ausgelöst. Dieser Hook wird verarbeitet, bevor Routing-Entscheidungen darüber getroffen wurden, wohin das Paket gesendet werden soll.

  • + NF_IP_LOCAL_IN +: Dieser Hook wird ausgelöst, nachdem ein eingehendes Paket weitergeleitet wurde, wenn das Paket für das lokale System bestimmt ist.

  • + NF_IP_FORWARD +: Dieser Hook wird ausgelöst, nachdem ein eingehendes Paket weitergeleitet wurde, wenn das Paket an einen anderen Host weitergeleitet werden soll.

  • + NF_IP_LOCAL_OUT +: Dieser Hook wird durch lokal erzeugten ausgehenden Datenverkehr ausgelöst, sobald er den Netzwerkstapel erreicht.

  • + NF_IP_POST_ROUTING +: Dieser Hook wird durch ausgehenden oder weitergeleiteten Datenverkehr ausgelöst, nachdem das Routing stattgefunden hat und kurz bevor er auf dem Kabel ausgegeben wird.

Kernelmodule, die sich an diesen Hooks registrieren möchten, müssen eine Prioritätsnummer bereitstellen, um die Reihenfolge zu bestimmen, in der sie aufgerufen werden, wenn der Hook ausgelöst wird. Dies bietet die Möglichkeit, mehrere Module (oder mehrere Instanzen desselben Moduls) in deterministischer Reihenfolge mit jedem der Hooks zu verbinden. Jedes Modul wird der Reihe nach aufgerufen und gibt nach der Verarbeitung eine Entscheidung an das "+ netfilter +" - Framework zurück, die angibt, was mit dem Paket geschehen soll.

IPTables Tabellen und Ketten

Die "+ iptables " - Firewall verwendet Tabellen, um ihre Regeln zu organisieren. Diese Tabellen klassifizieren Regeln nach der Art der Entscheidungen, mit denen sie getroffen werden. Wenn sich eine Regel beispielsweise mit der Netzwerkadressübersetzung befasst, wird sie in die Tabelle " nat " aufgenommen. Wenn die Regel verwendet wird, um zu entscheiden, ob das Paket an seinem Ziel fortgesetzt werden soll, wird es wahrscheinlich der Tabelle " filter +" hinzugefügt.

Innerhalb jeder "+ iptables " - Tabelle sind die Regeln weiter in separaten "Ketten" organisiert. Während Tabellen durch das allgemeine Ziel der Regeln definiert werden, repräsentieren die eingebauten Ketten die " netfilter +" - Hooks, die sie auslösen. Ketten bestimmen grundsätzlich, wann Regeln ausgewertet werden.

Wie Sie sehen können, spiegeln die Namen der eingebauten Ketten die Namen der + netfilter + Hooks wider, denen sie zugeordnet sind:

  • + PREROUTING +: Wird durch den Hook + NF_IP_PRE_ROUTING + ausgelöst.

  • + INPUT +: Wird vom Hook + NF_IP_LOCAL_IN + ausgelöst.

  • + FORWARD +: Wird durch den Hook + NF_IP_FORWARD + ausgelöst.

  • + OUTPUT +: Wird vom Hook + NF_IP_LOCAL_OUT + ausgelöst.

  • + POSTROUTING +: Wird durch den Hook + NF_IP_POST_ROUTING + ausgelöst.

Mit Ketten kann der Administrator steuern, wo im Zustellungspfad eines Pakets eine Regel ausgewertet wird. Da jede Tabelle über mehrere Ketten verfügt, kann der Einfluss einer Tabelle an mehreren Verarbeitungspunkten ausgeübt werden. Da bestimmte Arten von Entscheidungen nur an bestimmten Punkten im Netzwerkstapel sinnvoll sind, ist für jede Tabelle nicht für jeden Kernel-Hook eine Kette registriert.

Es gibt nur fünf "+ netfilter " - Kernel-Hooks, sodass Ketten aus mehreren Tabellen an jedem der Hooks registriert werden. Zum Beispiel haben drei Tabellen " PREROUTING " - Ketten. Wenn sich diese Ketten am zugeordneten " NF_IP_PRE_ROUTING " - Hook registrieren, geben sie eine Priorität an, die bestimmt, in welcher Reihenfolge die " PREROUTING " - Kette jeder Tabelle aufgerufen wird. Jede der Regeln in der " PREROUTING " - Kette mit der höchsten Priorität wird nacheinander ausgewertet, bevor zur nächsten " PREROUTING +" - Kette übergegangen wird. Wir werden uns gleich die spezifische Reihenfolge jeder Kette ansehen.

Welche Tische gibt es?

Lassen Sie uns einen Moment zurücktreten und einen Blick auf die verschiedenen Tabellen werfen, die "+ iptables +" bietet. Diese repräsentieren unterschiedliche Regelsätze, die nach Problembereichen organisiert sind, um Pakete zu bewerten.

Die Filtertabelle

Die Filtertabelle ist eine der am häufigsten verwendeten Tabellen in + iptables +. Die "+ filter +" - Tabelle wird verwendet, um Entscheidungen darüber zu treffen, ob ein Paket an seinem beabsichtigten Ziel fortgesetzt oder seine Anforderung abgelehnt werden soll. Im Firewall-Sprachgebrauch wird dies als "Filtern" von Paketen bezeichnet. Diese Tabelle enthält den Großteil der Funktionen, an die die Benutzer denken, wenn sie sich mit Firewalls befassen.

Die NAT-Tabelle

Die "+ nat +" - Tabelle wird zum Implementieren von Regeln für die Übersetzung von Netzwerkadressen verwendet. Wenn Pakete in den Netzwerkstapel eingehen, bestimmen die Regeln in dieser Tabelle, ob und wie die Quell- oder Zieladressen des Pakets geändert werden, um die Art und Weise der Weiterleitung des Pakets und des Antwortverkehrs zu beeinflussen. Dies wird häufig verwendet, um Pakete an Netzwerke weiterzuleiten, wenn ein direkter Zugriff nicht möglich ist.

Der Mangeltisch

Die "+ mangle +" - Tabelle wird verwendet, um die IP-Header des Pakets auf verschiedene Arten zu ändern. Sie können beispielsweise den TTL-Wert (Time to Live) eines Pakets anpassen, indem Sie die Anzahl der gültigen Netzwerksprünge, die das Paket unterstützen kann, entweder verlängern oder verkürzen. Andere IP-Header können auf ähnliche Weise geändert werden.

Diese Tabelle kann auch eine interne Kernel-Markierung auf dem Paket zur weiteren Verarbeitung in anderen Tabellen und durch andere Netzwerktools platzieren. Diese Markierung berührt nicht das eigentliche Paket, sondern fügt die Markierung der Darstellung des Pakets durch den Kernel hinzu.

Der rohe Tisch

Die "+ iptables " - Firewall ist statusbehaftet, was bedeutet, dass Pakete hinsichtlich ihrer Beziehung zu früheren Paketen bewertet werden. Die auf dem " netfilter " - Framework aufbauenden Verbindungsverfolgungsfunktionen ermöglichen es " iptables +", Pakete als Teil einer laufenden Verbindung oder Sitzung anstatt als Datenstrom einzelner, nicht verwandter Pakete anzuzeigen. Die Verbindungsverfolgungslogik wird normalerweise sehr bald angewendet, nachdem das Paket die Netzwerkschnittstelle erreicht hat.

Die + raw + Tabelle hat eine sehr eng definierte Funktion. Ihr einziger Zweck besteht darin, einen Mechanismus zum Markieren von Paketen bereitzustellen, um die Verbindungsverfolgung zu deaktivieren.

Die Sicherheitstabelle

Die Tabelle + security + wird verwendet, um interne SELinux-Sicherheitskontextmarkierungen für Pakete festzulegen, die sich darauf auswirken, wie SELinux oder andere Systeme, die SELinux-Sicherheitskontexte interpretieren können, mit den Paketen umgehen. Diese Markierungen können pro Paket oder pro Verbindung angewendet werden.

Welche Ketten sind in jeder Tabelle implementiert?

Wir haben über Tabellen und Ketten getrennt gesprochen. Sehen wir uns an, welche Ketten in jeder Tabelle verfügbar sind. In dieser Diskussion ist eine weitere Diskussion über die Bewertungsreihenfolge von Ketten enthalten, die für denselben Haken registriert sind. Wenn drei Tabellen "+ PREROUTING +" -Ketten haben, in welcher Reihenfolge werden sie ausgewertet?

Die folgende Tabelle gibt die Ketten an, die in jeder "+ iptables " - Tabelle verfügbar sind, wenn sie von links nach rechts gelesen werden. Zum Beispiel können wir feststellen, dass die " raw " - Tabelle sowohl " PREROUTING " - als auch " OUTPUT " -Ketten enthält. Beim Lesen von oben nach unten wird auch die Reihenfolge angezeigt, in der jede Kette aufgerufen wird, wenn der zugehörige Haken " netfilter +" ausgelöst wird.

Ein paar Dinge sollten beachtet werden. In der folgenden Darstellung wurde die "+ nat " - Tabelle in " DNAT " - Operationen (die die Zieladresse eines Pakets ändern) und " SNAT +" - Operationen (die die Quelladresse ändern) aufgeteilt, um ihre anzuzeigen übersichtlicher bestellen. Wir haben auch Zeilen eingefügt, die Punkte darstellen, an denen Routing-Entscheidungen getroffen werden und bei denen die Verbindungsverfolgung aktiviert ist, um eine ganzheitlichere Ansicht der ablaufenden Prozesse zu ermöglichen:

Tables↓/Chains→ PREROUTING INPUT FORWARD OUTPUT POSTROUTING

(routing decision)

raw

(connection tracking enabled)

mangle

nat (DNAT)

(routing decision)

filter

security

nat (SNAT)

Wenn ein Paket einen "+ netfilter +" - Hook auslöst, werden die zugehörigen Ketten so verarbeitet, wie sie in der obigen Tabelle von oben nach unten aufgeführt sind. Die Hooks (Spalten), die ein Paket auslösen wird, hängen davon ab, ob es sich um ein eingehendes oder ausgehendes Paket handelt, welche Routing-Entscheidungen getroffen werden und ob das Paket die Filterkriterien erfüllt.

Bestimmte Ereignisse führen dazu, dass die Kette einer Tabelle während der Verarbeitung übersprungen wird. Beispielsweise wird nur das erste Paket in einer Verbindung anhand der NAT-Regeln bewertet. Alle "+ nat +" - Entscheidungen, die für das erste Paket getroffen wurden, werden ohne zusätzliche Auswertung auf alle nachfolgenden Pakete in der Verbindung angewendet. Bei Antworten auf NAT-Verbindungen werden automatisch die umgekehrten NAT-Regeln angewendet, um die Route korrekt auszuführen.

Chain Traversal Order

Angenommen, der Server weiß, wie ein Paket weitergeleitet wird, und die Firewall-Regeln erlauben seine Übertragung. In den folgenden Abläufen werden die Pfade dargestellt, die in verschiedenen Situationen durchlaufen werden:

  • * Eingehende Pakete für das lokale System *: + PREROUTING →` + INPUT`

  • * Eingehende Pakete an einen anderen Host *: + PREROUTING ++ FORWARD ++ POSTROUTING +

  • * Lokal erzeugte Pakete *: + OUTPUT ++ POSTROUTING +

Wenn wir die obigen Informationen mit der in der vorherigen Tabelle angegebenen Reihenfolge kombinieren, können wir sehen, dass ein ankommendes Paket, das für das lokale System bestimmt ist, zuerst anhand der Ketten "+ PREROUTING " der Ketten " raw ", " mangle " bewertet wird , und ` nat ` Tabellen. Anschließend werden die " INPUT " - Ketten der " mangle " -, " filter " -, " security " - und " nat +" -Tabellen durchlaufen, bevor sie schließlich an den lokalen Socket übergeben werden.

IPTables-Regeln

Regeln werden innerhalb einer bestimmten Kette einer bestimmten Tabelle platziert. Wenn jede Kette aufgerufen wird, wird das betreffende Paket in der Reihenfolge mit jeder Regel in der Kette verglichen. Jede Regel hat eine übereinstimmende Komponente und eine Aktionskomponente.

Passend

Der übereinstimmende Teil einer Regel gibt die Kriterien an, die ein Paket erfüllen muss, damit die zugehörige Aktion (oder das "Ziel") ausgeführt wird.

Das Matching-System ist sehr flexibel und kann mit den auf dem System verfügbaren "+ iptables +" - Erweiterungen erheblich erweitert werden. Regeln können so erstellt werden, dass sie unter anderem nach Protokolltyp, Ziel- oder Quelladresse, Ziel- oder Quellport, Ziel- oder Quellnetzwerk, Eingabe- oder Ausgabeschnittstelle, Headern oder Verbindungsstatus übereinstimmen. Diese können kombiniert werden, um ziemlich komplexe Regelsätze zur Unterscheidung zwischen verschiedenen Datenverkehr zu erstellen.

Ziele

Ein Ziel ist die Aktion, die ausgelöst wird, wenn ein Paket die Übereinstimmungskriterien einer Regel erfüllt. Ziele werden im Allgemeinen in zwei Kategorien unterteilt:

  • * Ziele beenden *: Ziele beenden führen eine Aktion aus, die die Auswertung innerhalb der Kette beendet und die Kontrolle an den Hook "+ netfilter +" zurückgibt. Abhängig vom bereitgestellten Rückgabewert kann der Hook das Paket verwerfen oder dem Paket erlauben, mit der nächsten Verarbeitungsstufe fortzufahren.

  • * Nicht terminierende Ziele *: Nicht terminierende Ziele führen eine Aktion aus und setzen die Bewertung innerhalb der Kette fort. Obwohl jede Kette eventuell eine endgültige Abbruchentscheidung zurückgeben muss, kann eine beliebige Anzahl von nicht abbrechenden Zielen im Voraus ausgeführt werden.

Die Verfügbarkeit jedes Ziels innerhalb der Regeln hängt vom Kontext ab. Beispielsweise können der Tabellen- und der Kettentyp die verfügbaren Ziele bestimmen. Die in der Regel aktivierten Erweiterungen und die Übereinstimmungsklauseln können sich auch auf die Verfügbarkeit von Zielen auswirken.

Zu benutzerdefinierten Ketten springen

Wir sollten eine spezielle Klasse nicht terminierender Ziele erwähnen: das Sprungziel. Sprungziele sind Aktionen, die dazu führen, dass die Auswertung zur weiteren Verarbeitung in eine andere Kette verschoben wird. Wir haben viel über die eingebauten Ketten gesprochen, die eng mit den "+ netfilter " - Hooks verknüpft sind, die sie aufrufen. Mit " iptables +" können Administratoren jedoch auch eigene Ketten für organisatorische Zwecke erstellen.

Regeln können in benutzerdefinierten Ketten genauso platziert werden wie in integrierten Ketten. Der Unterschied besteht darin, dass benutzerdefinierte Ketten nur durch "Springen" von einer Regel zu ihnen erreicht werden können (sie sind nicht mit einem "+ netfilter +" - Hook selbst registriert).

Benutzerdefinierte Ketten dienen als einfache Erweiterung der Kette, die sie aufgerufen hat. Zum Beispiel wird in einer benutzerdefinierten Kette die Auswertung an die aufrufende Kette zurückgegeben, wenn das Ende der Regelliste erreicht ist oder wenn ein "+ RETURN +" - Ziel durch eine übereinstimmende Regel aktiviert wird. Die Auswertung kann auch zu weiteren benutzerdefinierten Ketten springen.

Dieses Konstrukt ermöglicht eine größere Organisation und bietet das für eine stabilere Verzweigung erforderliche Framework.

IPTables und Verbindungsverfolgung

Wir haben das Verbindungsverfolgungssystem eingeführt, das auf dem Rahmen von "+ netfilter " implementiert ist, als wir die " raw " - Tabelle und die Verbindungsstatus-Übereinstimmungskriterien besprochen haben. Die Verbindungsverfolgung ermöglicht es " iptables ", Entscheidungen über Pakete zu treffen, die im Kontext einer laufenden Verbindung angezeigt werden. Das Connection-Tracking-System stellt " iptables +" die Funktionen zur Verfügung, die zur Ausführung von "stateful" -Operationen erforderlich sind.

Die Verbindungsverfolgung wird sehr bald angewendet, nachdem Pakete in den Netzwerkstapel eingegangen sind. Die "+ raw +" - Tabellenketten und einige grundlegende Sicherheitsüberprüfungen sind die einzige Logik, die für Pakete ausgeführt wird, bevor die Pakete einer Verbindung zugeordnet werden.

Das System überprüft jedes Paket anhand einer Reihe vorhandener Verbindungen. Er aktualisiert bei Bedarf den Status der Verbindung in seinem Speicher und fügt dem System bei Bedarf neue Verbindungen hinzu. Pakete, die mit dem Ziel "+ NOTRACK " in einer der Ketten " raw +" markiert wurden, umgehen die Routinen zur Verbindungsverfolgung.

Verfügbare Staaten

Vom Verbindungsverfolgungssystem verfolgte Verbindungen befinden sich in einem der folgenden Status:

  • + NEW +: Wenn ein Paket eintrifft, das keiner bestehenden Verbindung zugeordnet ist, aber nicht als erstes Paket ungültig ist, wird dem System eine neue Verbindung mit dieser Bezeichnung hinzugefügt. Dies geschieht sowohl für verbindungsbewusste Protokolle wie TCP als auch für verbindungslose Protokolle wie UDP.

  • + ESTABLISHED +: Eine Verbindung wird von + NEW + in + ESTABLISHED + geändert, wenn sie eine gültige Antwort in die entgegengesetzte Richtung erhält. Für TCP-Verbindungen bedeutet dies ein "+ SYN / ACK +" und für UDP- und ICMP-Verkehr eine Antwort, bei der Quelle und Ziel des ursprünglichen Pakets umgeschaltet werden.

  • + RELATED +: Pakete, die nicht Teil einer bestehenden Verbindung sind, aber einer bereits im System vorhandenen Verbindung zugeordnet sind, tragen die Bezeichnung + RELATED +. Dies könnte eine Hilfsverbindung bedeuten, wie dies bei FTP-Datenübertragungsverbindungen der Fall ist, oder es könnte sich um ICMP-Antworten auf Verbindungsversuche durch andere Protokolle handeln.

  • "+ UNGÜLTIG ": Pakete können als " UNGÜLTIG +" gekennzeichnet werden, wenn sie keiner bestehenden Verbindung zugeordnet sind und nicht zum Öffnen einer neuen Verbindung geeignet sind, wenn sie nicht identifiziert werden können oder wenn sie unter anderem nicht weitergeleitet werden können.

  • "+ UNTRACKED ": Pakete können als " UNTRACKED " markiert werden, wenn sie in einer " raw +" - Tabellenkette zur Umgehung der Verfolgung ausgewählt wurden.

  • + SNAT +: Ein virtueller Status, der festgelegt wird, wenn die Quelladresse durch NAT-Vorgänge geändert wurde. Dies wird vom Verbindungsverfolgungssystem verwendet, damit es weiß, dass die Quelladressen in Antwortpaketen wieder geändert werden.

  • + DNAT +: Ein virtueller Status, der festgelegt wird, wenn die Zieladresse durch NAT-Vorgänge geändert wurde. Dies wird vom Verbindungsverfolgungssystem verwendet, damit es weiß, dass es die Zieladresse beim Weiterleiten von Antwortpaketen zurück ändert.

Mit den im Verbindungsverfolgungssystem verfolgten Status können Administratoren Regeln erstellen, die auf bestimmte Punkte in der Lebensdauer einer Verbindung abzielen. Dies bietet die Funktionalität, die für gründlichere und sicherere Regeln erforderlich ist.

Fazit

Das Paketfilter-Framework "+ netfilter " und die Firewall " iptables " bilden die Grundlage für die meisten Firewall-Lösungen auf Linux-Servern. Die " netfilter " - Kernel-Hooks befinden sich nahe genug am Netzwerkstapel, um eine leistungsstarke Kontrolle über Pakete zu ermöglichen, während diese vom System verarbeitet werden. Die Firewall " iptables +" nutzt diese Funktionen, um dem Kernel eine flexible und erweiterbare Methode zur Übermittlung von Richtlinienanforderungen bereitzustellen. Wenn Sie wissen, wie diese Komponenten zusammenpassen, können Sie sie besser zur Steuerung und Sicherung Ihrer Serverumgebungen verwenden.

Wenn Sie mehr darüber erfahren möchten, wie Sie effektive "+ iptables +" - Richtlinien auswählen, lesen Sie https://www.digitalocean.com/community/tutorials/how-to-choose-an-effective-firewall-policy-to- sichere deine Server [diese Anleitung].

Diese Handbücher können Ihnen dabei helfen, mit der Implementierung Ihrer "+ iptables +" - Firewall-Regeln zu beginnen: