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.
Inhaltsverzeichnis
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
Noch keine Reaktion