Wie in einem schon bestehenden Artikel versprochen (leider weiß ich nicht mehr in welchem) – hier die professionelle Konfiguration der Firewall unter Linux. Hier wird noch die Konfiguration mit Iptables beschrieben – inzwischen ist auch Nftables vorhanden. Beide Anwendungen können zur Konfiguration genutzt werden, die Nftables sind angeblich einfacher zu nutzen – damit habe ich mich jedoch noch nicht befasst, kommt in einem späteren Artikel. Übrigens werden die Iptables heute noch immer als Standard etwa auf Cisco-Checkpoints genutzt.

Zur grundsätzlichen Information: Weder die Iptables, noch die Nftables, UFW oder GUFW sind die Firewall – die Firewall unter Linux nennt sich Netfilter. Alle anderen Anwendungen dienen zur Konfiguration des Netfilters.

Der Netfilter wird mit den Iptables als root am Terminal konfiguriert, hier ist um einiges mehr an Wissen nötig, als mit UFW oder gar GUFW. Wichtig auch – haben Sie bereits eine andere Software zur Konfiguration der Firewall laufen, deaktivieren Sie diese.

Installation der Iptables

Unter auf Debian basierenden Linux-Distributionen installieren Sie diese Software zur Konfiguration der Firewall wie üblich über die Paket-Verwaltung durch die Pakete „iptables iptables-persistent„.

Grundlagen des Netfilters

Wie der Netfilter arbeitet, mag zu Beginn etwas kompliziert sein – man versteht es jedoch schnell, wenn man will. Der Netfilter arbeitet mit drei wichtigen Dingen:

Tabellen (tables)

Tabellen werden genutzt, um der Firewall (eben dem Netfilter) zu zeigen, was zu tun ist – folgende Tabellen gibt es:

  • filter – dies ist die meistgenutzte Tabelle im Home-Bereich, hier werden Ports gesperrt und geöffnet. Um diesen Bereich werden wir uns in diesem Artikel aus kümmern.
  • nat – die Tabelle, um Ports weiterzuleiten, etwa auf andere Computer.
  • mangle – hier lassen sich Datenpakete manipulieren.
  • raw – hier lassen sich unter anderem Ausnahmen festlegen.

Regelketten (chains)

In den Regelketten legen Sie fest, wann eine Regel zutreffen soll – Regelketten liegen wiederum in den Tabellen (tables), in diesem Beitrag also nur in der Tabelle „filter„. Folgende Regelketten gibt es (es gibt noch weitere, diese sind jedoch sehr speziell):

  • INPUT – in dieser Regelkette legen Sie fest, was mit eingehenden Datenpaketen geschehen soll.
  • OUTPUT – diese Regelkette dient dazu, festzulegen, was mit ausgehenden Datenpaketen passieren soll.
  • FORWARD – die Regelkette für an andere Computer weiterzuleitende Pakete.

Ziele (targets)

Ziele liegen wieder in den gerade vorgestellten Regelketten – sie dienen dazu, was mit entsprechenden Paketen geschehen soll. Folgende Ziele können Sie nutzen:

  • ACCEPT – das Datenpaket wird in das System gelassen.
  • DROP – das Datenpaket wird nicht in das System gelassen, also gesperrt.
  • REJECT – wie DROP, jedoch wird hier der Sender des Paketes über die Sperre informiert.
  • LOG – egal was mit dem Paket zuvor auch gemacht wird, es wird in die Logdatei der Firewall geschrieben.

Regeln erstellen

Wichtig: egal, was auch immer Sie vorhaben – wenn Sie auf einen Computer keinen physischen Zugang haben, denken Sie vorher, planen Sie Ihre Regeln – ein kleiner Fehler und Sie könnten sich selbst aussperren.

Ein kleiner Tipp: haben Sie keinen physischen Zugang zum Computer – solange Sie die neuen Regeln nicht tatsächlich speichern, sind neu erstellte Regeln nach einem Neustart wieder weg. Richten Sie einen automatischen Neustart ein, erstellen in dieser Zeit Ihre Regeln und testen diese. Mit folgendem Beispiel als root:

shutdown -r +10

startet das System nach zehn Minuten neu. Sie haben in diesem Beispiel zehn Minuten Zeit, um die Regeln zu erstellen und zu testen.

In diesem Beitrag werden wir nur eingehende Datenpakete bearbeiten, also solche in der Regelkette INPUT. OUTPUT ist dasselbe, FORWARD wird nur in speziellen Fällen genutzt.

Zu Beginn leeren wir einmal möglicherweise schon bestehende Regeln, dies gelingt durch den Befehl:

iptables -F

Jetzt sehen wir uns die Syntax an, um Regeln zu erstellen:

iptables -OPTION TABELLE -i Netzwerkschnittstelle -p Protokoll --dport Port -j ZIEL

Zu Beginn finden Sie natürlich den grundlegenden Befehl iptables, anschließend folgt mit -OPTION – wo soll die Regel in der Regelkette stehen? Regeln liegen in einer einfachen Textdatei – jede Regel steht in einer eigenen Zeile, die Regeln werden von oben nach unten vom Netfilter ausgeführt. Sehen wir uns die möglichen Optionen an:

  • A – die Regel wird an bestehende Regeln angefügt, ist noch keine vorhanden, ist dies die erste Regel, besteht schon eine oder mehrere, wird die neue Regel darunter gestellt.
  • I N – die neue Regel landet an der durch „N“ angegebenen Stelle eingefügt. Ganz oben steht die Regel Nummer eins. Würden Sie also etwa „N“ durch „2“ ersetzen, würde die neue Regel in der zweiten Zeile eingefügt, die Regel, die sich bisher an zweiter Stelle befand, eine Zeile nach unten verschoben.
  • D N – die Regel in der durch „N“ angegebenen Zeile wird gelöscht.

Nach der Option folgt die zu nutzende TABELLE, also etwa „filter„, mit -i geben Sie die Netzwerkschnittstelle an, es folgt mit -p das Protokoll, mit --dport der zu nutzende Port und mit -j wird das Ziel angegeben.

Kommen wir zur ersten Regel – diese werde ich hier nicht weiter aufschlüsseln, sondern nur erklären:

iptables -I INPUT 1 -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

Ohne diese Regel würde für jedes Datenpaket eine neue Verbindung gestartet, der Datentransfer würde um vieles länger dauern, die Verbindung würde immer wieder abbrechen. Wie Sie in diesem Beispiel sehen, können Sie die Zeile (oben „n“) auch nach der Tabelle angeben. Diese Regel sollte immer an erster (oberster Stelle stehen).

Jetzt wollen wir einen ersten Port freigeben, dieser ist besonders dann absolut wichtig, wenn Sie keinen physischen Zugang zum Computer haben und sich über SSH (Secure Shell) mit diesem verbinden. Hier fügen wir mit der Option -A die neue Regel an bestehende an:

iptables -A INPUT -i eth0 -p tcp --dport ssh -j ACCEPT

Diese Regel gilt also für eingehende Datenpakete – INPUT auf der Schnittstelle eth0 auf für das Protokoll tcp auf dem Port ssh und solche Pakete werden mit ACCEPT akzeptiert. Statt den Port auszuschreiben, können Sie auch die Nummer des Ports angeben – für SSH also „22“:

iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT

Eine Liste der gängigsten Ports finden Sie unter Wikipedia. Jetzt wollen wir beispielsweise auch den Port 443 erlauben oder eben https – wir hängen diese einfach an die bestehenden Regeln an:

iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT

Wir können auch einen Port-Bereich angeben. Nehmen wir etwa Kdeconnect – die Software benötigt folgende offene Ports: 1714 bis 1764, mit dem Protokoll udp und 1714 bis 1764, mit dem Protokoll tcp. Dies würde folgende beide neuen Regeln ergeben:

iptables -A INPUT -i eth0 -p udp --dport 1714:1764 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 1714:1764 -j ACCEPT

Statt der Option -i können wir auch eine IP-Adresse angeben – in diesem Fall kann man mit der angegebenen IP-Adresse auf den Computer zugreifen, mit anderen IP’s nicht (wenn Sie keine weiteren angeben und alles andere sperren):

iptables -A INPUT -s 123.456.78.9 -p tcp --dport ssh -j ACCEPT

Jetzt wollen wir einen IP-Adressbereich sperren – etwa, weil aus diesen Bereichen sehr viele Verbindungsversuche per SSH kommen, oder Spam in das Forum. Nehmen wir den Bereich 101.55.224.0 bis 101.55.231.255:

iptables -A INPUT -i eth0 -s 101.55.224.0:101.55.231.255 -p tcp --dport ssh -j DROP
iptables -A INPUT -i eth0 -s 101.55.224.0:101.55.231.255 -p tcp --dport 443

Nachdem Sie alle Regeln erstellt haben – also alles, was Sie erlauben wollen und sperren, gilt es noch alles andere zu sperren, was Sie nicht definiert haben. Dies gelingt mit folgendem Befehl:

iptables -A INPUT -i eth0 -j DROP

Wichtig – diese Regel muss am Ende der Regelkette liegen, also ganz unten – mit Ausnahme einer Regel: Wollen Sie unerlaubte Zugriffsversuche loggen, folgt diese Regel zuletzt:

iptables -A INPUT -i eth0 -j LOG --log-prefix "DROP - "

Mit folgendem Befehl können Sie sich die aktuell bestehenden Regeln ansehen:

iptables -L

Firewall-Regeln mit den Iptables speichern

Wie schon beschrieben, bleiben erstellte Regeln nur bis zum nächsten Neustart erhalten – starten Sie das System neu, sind die Regeln verschwunden. Sie müssen neu erstellte Regeln, auch zu bestehenden Regeln neu hinzu gefügte speichern – dies gelingt mit dem Befehl:

iptables-save > /etc/iptables/rules.v4

Categories:

Tags:

Schreibe einen Kommentar

Noch keine Reaktion

Neue Themen im Forum
Umlaute in PDF-FormularMit Okular gibt es unter Debian (alle Distributionen mit dieser Ok … Weiterlesen
Kann man einen Browser (flatpak) …Hallo nochmal, Crash-Reports für Firefox bekommt man nach Einga … Weiterlesen
Debian-Xfce-Erscheinungsbild-Symb …Hallo @zebolon, den Icon-Cache zu aktualisieren hat nichts gebr … Weiterlesen
Kategorien im Wiki
WIKI-Beiträge des Monates

Die Beiträge des Monates finden Sie im Kalender unter den blau markierten Tageszahlen.

November 2023
M D M D F S S
 12345
6789101112
13141516171819
20212223242526
27282930  
Archive