Wie man eine Iptables-Firewall einrichtet, um den Remotezugriff auf Dienste in Linux zu ermöglichen – Teil 8

Linux Foundation Certified Engineer – Part 8

Vorstellung des Zertifizierungsprogramms der Linux Foundation

Sie werden sich aus Teil 1 – Über Iptables dieser LFCE (Linux Foundation Certified Engineer) -Serie erinnern, dass wir eine grundlegende Beschreibung dessen gegeben haben, was eine Firewall ist: ein Mechanismus zum Verwalten von Paketen, die in das Netzwerk eintreten und es verlassen. Mit „verwalten“ meinen wir tatsächlich:

  1. Bestimmte Pakete daran hindern, in unser Netzwerk einzutreten oder es zu verlassen.
  2. Andere Pakete von einem Punkt des Netzwerks zu einem anderen weiterleiten.

basierend auf vordefinierten Kriterien.

In diesem Artikel werden wir besprechen, wie man grundlegendes Paketfiltern implementiert und wie man die Firewall mit iptables konfiguriert, einem Frontend für netfilter, das ein natives Kernelmodul zur Firewall-Verwaltung ist.

Bitte beachten Sie, dass Firewalling ein umfangreiches Thema ist und dieser Artikel nicht als umfassender Leitfaden gedacht ist, um alles darüber zu verstehen, sondern vielmehr als Ausgangspunkt für ein tieferes Studium dieses Themas. Wir werden jedoch das Thema in Teil 10 dieser Serie erneut besprechen, wenn wir einige spezifische Anwendungsfälle einer Firewall in Linux erkunden.

Man kann sich eine Firewall wie einen internationalen Flughafen vorstellen, wo Passagierflugzeuge fast rund um die Uhr kommen und gehen. Basierend auf einer Reihe von Bedingungen, wie der Gültigkeit eines Personalausweises oder dem Herkunftsland (um nur einige Beispiele zu nennen), darf eine Person möglicherweise ein bestimmtes Land betreten oder verlassen oder auch nicht.

Gleichzeitig können Flughafenbeamte Personen anweisen, sich bei Bedarf von einem Ort des Flughafens zum anderen zu bewegen, zum Beispiel wenn sie die Zollbehörden passieren müssen.

Wir können die Flughafenmetapher während des Restes dieses Tutorials nützlich finden. Denken Sie einfach an die folgenden Beziehungen, während wir fortfahren:

  1. Personen = Pakete
  2. Firewall = Flughafen
  3. Land #1 = Netzwerk #1
  4. Land #2 = Netzwerk #2
  5. Flughafenregeln, die von Beamten durchgesetzt werden = Firewall-Regeln

Iptables – Die Grundlagen

Auf niedriger Ebene ist es der Kernel selbst, der basierend auf in Chains oder Sätzen gruppierten Regeln entscheidet, was mit Paketen zu tun ist. Diese Chains definieren, welche Aktionen ausgeführt werden sollen, wenn ein Paket die von ihnen festgelegten Kriterien erfüllt.

Die erste Aktion von iptables besteht darin zu entscheiden, was mit einem Paket geschehen soll:

  1. Akzeptieren (es in unser Netzwerk durchlassen)?
  2. Ablehnen (den Zugriff auf unser Netzwerk verhindern)?
  3. Weiterleiten (zu einer anderen Chain)?

Falls Sie sich fragen, warum dieses Tool iptables heißt, liegt das daran, dass diese Chains in Tabellen organisiert sind, wobei die Filtertabelle die bekannteste ist und diejenige, die zur Implementierung der Paketfilterung mit ihren drei Standardchains verwendet wird:

1. Die INPUT-Chain bearbeitet Pakete, die in das Netzwerk eingehen und für lokale Programme bestimmt sind.

2. Die OUTPUT-Kette wird verwendet, um Pakete zu analysieren, die im lokalen Netzwerk entstehen und an die Außenwelt gesendet werden sollen.

3. Die FORWARD-Kette verarbeitet Pakete, die an ein anderes Ziel weitergeleitet werden sollen (wie bei einem Router).

Für jede dieser Ketten gibt es eine Standardrichtlinie, die vorgibt, was standardmäßig getan werden soll, wenn Pakete keine der Regeln in der Kette erfüllen. Sie können die für jede Kette erstellten Regeln und die Standardrichtlinie anzeigen, indem Sie den folgenden Befehl ausführen:

# iptables -L

Die verfügbaren Richtlinien sind wie folgt:

  1. ACCEPT → lässt das Paket durch. Jedes Paket, das keine Regeln in der Kette erfüllt, wird in das Netzwerk eingelassen.
  2. DROP → verwirft das Paket geräuschlos. Jedes Paket, das keine Regeln in der Kette erfüllt, wird daran gehindert, in das Netzwerk einzutreten.
  3. REJECT → verwirft das Paket und sendet eine informative Nachricht zurück. Diese funktioniert insbesondere nicht als Standardrichtlinie. Sie ist stattdessen dazu gedacht, die Paketfilterungsregeln zu ergänzen.
Linux Iptables Policies

Bei der Entscheidung, welche Richtlinie Sie implementieren möchten, müssen Sie die Vor- und Nachteile jedes Ansatzes wie oben erläutert berücksichtigen – beachten Sie, dass es keine Einheitslösung gibt.

Regeln hinzufügen

Um eine Regel zur Firewall hinzuzufügen, rufen Sie den iptables-Befehl wie folgt auf:

# iptables -A chain_name criteria -j target

wo,

  1. -A steht für Append (hängt die aktuelle Regel an das Ende der Kette an).
  2. chain_name ist entweder INPUT, OUTPUT oder FORWARD.
  3. Ziel ist die Aktion oder Richtlinie, die in diesem Fall angewendet werden soll (AKZEPTIEREN, ABLEHNEN oder VERWERFEN).
  4. Kriterien sind die Bedingungen, gegen die die Pakete geprüft werden sollen. Es besteht mindestens aus einer (wahrscheinlich mehreren) der folgenden Flags. Optionen in Klammern, getrennt durch einen senkrechten Strich, sind äquivalent zueinander. Der Rest stellt optionale Schalter dar:
[--protocol | -p] protocol: specifies the protocol involved in a rule.
[--source-port | -sport] port:[port]: defines the port (or range of ports) where the packet originated.
[--destination-port | -dport] port:[port]: defines the port (or range of ports) to which the packet is destined.
[--source | -s] address[/mask]: represents the source address or network/mask.
[--destination | -d] address[/mask]: represents the destination address or network/mask.
[--state] state (preceded by -m state): manage packets depending on whether they are part of a state connection, where state can be NEW, ESTABLISHED, RELATED, or INVALID.
[--in-interface | -i] interface: specifies the input interface of the packet.
[--out-interface | -o] interface: the output interface.
[--jump | -j] target: what to do when the packet matches the rule.

Unsere Testumgebung

Lassen Sie uns das alles in 3 klassischen Beispielen unter Verwendung der folgenden Testumgebung für die ersten beiden zusammenfügen:

Firewall: Debian Wheezy 7.5 
Hostname: dev2.gabrielcanepa.com
IP Address: 192.168.0.15
Source: CentOS 7 
Hostname: dev1.gabrielcanepa.com
IP Address: 192.168.0.17

Und dies für das letzte Beispiel

NFSv4 server and firewall: Debian Wheezy 7.5 
Hostname: debian
IP Address: 192.168.0.10
Source: Debian Wheezy 7.5 
Hostname: dev2.gabrielcanepa.com
IP Address: 192.168.0.15
BEISPIEL 1: Untersuchung des Unterschieds zwischen den Richtlinien DROP und ABLEHNEN

Wir werden zuerst eine VERWERFEN-Richtlinie für Eingangspings zu unserer Firewall definieren. Das heißt, ICMP-Pakete werden still verworfen.

# ping -c 3 192.168.0.15
# iptables -A INPUT --protocol icmp --in-interface eth0 -j DROP
Drop ICMP Ping Request

Bevor wir mit dem ABLEHNEN-Teil fortfahren, werden wir alle Regeln aus der INPUT-Kette entfernen, um sicherzustellen, dass unsere Pakete von dieser neuen Regel getestet werden:

# iptables -F INPUT
# iptables -A INPUT --protocol icmp --in-interface eth0 -j REJECT
# ping -c 3 192.168.0.15
Reject ICMP Ping Request in Firewall
BEISPIEL 2: Deaktivieren/Wiederaktivieren von SSH-Anmeldungen von dev2 zu dev1

Wir werden uns mit der AUSGABE-Kette befassen, da wir ausgehenden Datenverkehr behandeln:

# iptables -A OUTPUT --protocol tcp --destination-port 22 --out-interface eth0 --jump REJECT
Block SSH Login in Firewall
BEISPIEL 3: Zulassen/Verhindern von NFS-Clients (aus 192.168.0.0/24), NFS4-Freigaben zu mounten

Führen Sie die folgenden Befehle im NFSv4-Server/Firewall aus, um die Ports 2049 und 111 für alle Arten von Verkehr zu schließen:

# iptables -F
# iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 2049 -j REJECT
# iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 111 -j REJECT
Block NFS Ports in Firewall

Jetzt lassen Sie uns diese Ports öffnen und sehen, was passiert.

# iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 111 -j ACCEPT
# iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 2049 -j ACCEPT
Open NFS Ports in Firewall

Wie Sie sehen können, konnten wir die NFSv4-Freigabe nach Öffnen des Verkehrs mounten.

Einfügen, Anhängen und Löschen von Regeln

In den vorherigen Beispielen haben wir gezeigt, wie man Regeln an die EINGABE– und AUSGABE-Ketten anhängt. Sollten wir sie stattdessen an einer vordefinierten Position einfügen wollen, sollten wir den -I (Großbuchstabe i) Schalter verwenden.

Sie müssen sich daran erinnern, dass Regeln nacheinander ausgewertet werden und dass die Auswertung stoppt (oder springt), wenn eine DROP oder ACCEPT-Richtlinie übereinstimmt. Aus diesem Grund kann es erforderlich sein, Regeln in der Kettenliste nach oben oder unten zu verschieben, wie benötigt.

Wir werden ein triviales Beispiel verwenden, um dies zu demonstrieren:

Check Rules of Iptables Firewall

Platzieren wir die folgende Regel,

# iptables -I INPUT 2 -p tcp --dport 80 -j ACCEPT

an Position 2) in der EINGABE-Kette (und verschieben damit das vorherige #2 als #3)

Iptables Accept Rule

Unter Verwendung des obigen Setups wird der Datenverkehr überprüft, um zu sehen, ob er auf Port 80 gerichtet ist, bevor er nach Port 2049 sucht.

Alternativ können Sie eine Regel löschen und das Ziel der verbleibenden Regeln auf REJECT ändern (mit dem -R Schalter):

# iptables -D INPUT 1
# iptables -nL -v --line-numbers
# iptables -R INPUT 2 -i eth0 -s 0/0 -p tcp --dport 2049 -j REJECT
# iptables -R INPUT 1 -p tcp --dport 80 -j REJECT
Iptables Drop Rule

Zuletzt, aber nicht zuletzt, müssen Sie sich daran erinnern, dass die Firewall-Regeln persistent sein müssen, indem Sie sie in eine Datei speichern und sie dann automatisch beim Booten wiederherstellen (mit der bevorzugten Methode Ihrer Wahl oder derjenigen, die für Ihre Distribution verfügbar ist).

Speichern von Firewall-Regeln:

# iptables-save > /etc/iptables/rules.v4		[On Ubuntu]
# iptables-save > /etc/sysconfig/iptables		[On CentOS / OpenSUSE]

Regeln wiederherstellen:

# iptables-restore < /etc/iptables/rules.v4		[On Ubuntu]
# iptables-restore < /etc/sysconfig/iptables		[On CentOS / OpenSUSE]

Hier sehen wir ein ähnliches Verfahren (Speichern und Wiederherstellen von Firewall-Regeln von Hand), wobei anstelle der oben gezeigten Standarddatei eine Dummy-Datei namens iptables.dump verwendet wird.

# iptables-save > iptables.dump
Dump Linux Iptables

Um diese Änderungen über Neustarts hinweg persistent zu machen:

Ubuntu: Installieren Sie das iptables-persistent Paket, das die Regeln aus der Datei /etc/iptables/rules.v4 lädt.

# apt-get install iptables-persistent

CentOS: Fügen Sie die folgenden 2 Zeilen zur Datei /etc/sysconfig/iptables-config hinzu.

IPTABLES_SAVE_ON_STOP="yes"
IPTABLES_SAVE_ON_RESTART="yes"

OpenSUSE: Listen Sie erlaubte Ports, Protokolle, Adressen usw. (durch Kommas getrennt) in der Datei /etc/sysconfig/SuSEfirewall2 auf.

Weitere Informationen finden Sie in der Datei selbst, die ausführlich kommentiert ist.

Schlussfolgerung

Die in diesem Artikel bereitgestellten Beispiele, obwohl sie nicht alle Feinheiten von iptables abdecken, dienen dazu zu veranschaulichen, wie der eingehende oder ausgehende Datenverkehr aktiviert oder deaktiviert wird.

Für diejenigen unter Ihnen, die Firewall-Fans sind, beachten Sie, dass wir dieses Thema mit spezifischeren Anwendungen in Teil 10 dieser LFCE-Serie erneut behandeln werden.

Fühlen Sie sich frei, mir Fragen oder Kommentare mitzuteilen.

Source:
https://www.tecmint.com/configure-iptables-firewall/