Direkt zum Inhalt

Cookie-Einstellungen

Wählen Sie, welche Arten von Cookies Sie erlauben. Sie können Ihre Auswahl jederzeit über Cookie-Einstellungen unten auf jeder Seite ändern. Datenschutzerklärung

Notwendig

Immer aktiv

Nötig zum Einloggen, für Ihren Warenkorb und um Ihre Auswahl zu speichern. Diese sind immer aktiv.

Welche Cookies?
  • weboke_sessie, weboke_klant, weboke_remember: Ihre Sitzung und eingeloggt bleiben
  • weboke_basket: Ihr Warenkorb
  • wkBtwIncl: Preise mit oder ohne MwSt. anzeigen
  • wok_cookies: Ihre Cookie-Auswahl, 12 Monate

Misst, welche Anzeige zu einem Besuch oder einer Bestellung führt, damit wir nicht für Anzeigen zahlen, die nichts bringen.

Welche Cookies?
  • Google Ads über Google Tag Manager (_gcl_au, _gcl_aw), bis zu 90 Tage
  • OpenAI Ads, Anzeigen in ChatGPT
  • wok_aff: über welchen Partner Sie zu uns kamen (Partnerprogramm), 60 Tage

4,6

Land und Sprache

Jedes Land hat seine eigene Website, mit Preisen und MwSt. dieses Landes.

Anzeigen

Modul 5 · 5.2

Eine Firewall mit ufw und nftables

Modul 5: Das Netzwerk abschirmen · Lesezeit: 12 Minuten

Lernziel: Nach dieser Lektion können Sie eine Firewall einrichten, die nur das Nötige zulässt, für IPv4 und IPv6, ohne sich selbst auszusperren. Außerdem wissen Sie, wovor eine Firewall auf Ihrem Server nicht schützt.

Kernbegriffe: Paketfilter, netfilter, nftables, iptables-nft, ufw, Standardrichtlinie, allow, deny, reject, limit, IPv6 in ufw, Firewall des Anbieters, firewalld, Docker und die Firewall

Was eine Firewall macht

Eine Firewall auf Ihrem Server ist ein Paketfilter: Für jedes eingehende Netzwerkpaket prüft sie eine Liste von Regeln und entscheidet, ob es passieren darf. Unter Linux sitzt dieser Filter im Kernel und heißt netfilter. Sie konfigurieren ihn mit einem Programm:

  • nftables (Befehl nft) ist das aktuelle Werkzeug. Debian verwendet es seit Debian 10 standardmäßig.
  • iptables ist das alte Werkzeug. Auf modernen Systemen ist iptables meist eine Übersetzung nach nftables (iptables-nft), damit alte Anleitungen weiterhin funktionieren.
  • ufw (Uncomplicated Firewall) ist eine einfache Schicht darüber, unter Ubuntu standardmäßig vorhanden und unter Debian mit einem Befehl installierbar. Für einen einzelnen Server ist ufw die einfachste Wahl. Diese Lektion verwendet ufw und zeigt anschließend, wie dieselben Regeln in nftables aussehen.

Eine Firewall ist Ihre zweite Verteidigungslinie. Die erste besteht darin, dass Dienste nur auf der richtigen Adresse lauschen (Lektion 5.1). Zusammen sorgen sie dafür, dass ein Fehler in einer Schicht nicht sofort eine offene Tür ist.

Zuerst: Wie kommen Sie zurück, wenn etwas schiefgeht?

Der klassische Fehler: Sie schalten die Firewall ein, vergessen, SSH zuzulassen, und Ihre Verbindung bricht ab. Per SSH kommen Sie dann nicht mehr auf den Server. Bevor Sie beginnen:

  1. Wissen Sie, wie Sie die Konsole Ihres Anbieters öffnen (Lektion 1.2). Sie funktioniert am Netzwerk vorbei, also auch dann, wenn die Firewall alles sperrt. Dort melden Sie sich an und geben ufw disable ein.
  2. Erstellen Sie im Zweifel einen Snapshot.
  3. Lassen Sie Ihre aktuelle SSH-Sitzung offen und testen Sie mit einer zweiten Sitzung.

ufw in fünf Schritten

Schritt 1: installieren und den Standard wählen.

anna@web1:~$ sudo apt install ufw
anna@web1:~$ sudo ufw default deny incoming
Default incoming policy changed to 'deny'
anna@web1:~$ sudo ufw default allow outgoing
Default outgoing policy changed to 'allow'

Die Standardrichtlinie gilt für alles, wofür es keine Regel gibt. "Deny incoming" bedeutet: Alles, was hereinkommt, ist verboten, außer dem, was Sie anschließend erlauben. Das ist die einzige sichere Grundlage. Ausgehenden Datenverkehr (Ihr Server, der Updates abruft) lassen Sie zu.

Schritt 2: SSH zulassen, bevor Sie die Firewall einschalten.

anna@web1:~$ sudo ufw allow OpenSSH
Rules updated
Rules updated (v6)

OpenSSH ist ein Anwendungsprofil, das ufw kennt (es steht für Port 22/tcp). Läuft SSH auf einem anderen Port, verwenden Sie die Nummer: sudo ufw allow 2222/tcp. Achten Sie auf "Rules updated (v6)": ufw legt die Regel auch für IPv6 an. Das geschieht, weil in /etc/default/ufw die Zeile IPV6=yes steht, was der Standard ist. Prüfen Sie das kurz; steht dort no, gilt Ihre Firewall nur für IPv4.

Schritt 3: was Sie sonst noch brauchen.

anna@web1:~$ sudo ufw allow 80/tcp
anna@web1:~$ sudo ufw allow 443/tcp
anna@web1:~$ sudo ufw allow 443/udp       # nur wenn Sie HTTP/3 verwenden

Sie können eine Regel auf eine einzelne Quelladresse beschränken, zum Beispiel einen Verwaltungsport, der nur von Ihrem Büro aus erreichbar sein soll:

anna@web1:~$ sudo ufw allow from 198.51.100.20 to any port 9090 proto tcp

Schritt 4: einschalten.

anna@web1:~$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Schritt 5: prüfen. Öffnen Sie ein zweites Fenster und melden Sie sich erneut an. Klappt das, ist SSH richtig eingerichtet. Sehen Sie sich danach die Regeln an:

anna@web1:~$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp (OpenSSH)           ALLOW IN    Anywhere
80/tcp                     ALLOW IN    Anywhere
443/tcp                    ALLOW IN    Anywhere
22/tcp (OpenSSH (v6))      ALLOW IN    Anywhere (v6)
80/tcp (v6)                ALLOW IN    Anywhere (v6)
443/tcp (v6)               ALLOW IN    Anywhere (v6)

Eine Regel entfernen Sie über ihre Nummer: sudo ufw status numbered und dann sudo ufw delete 3.

deny, reject und limit

  • deny verwirft das Paket stillschweigend: Von außen sehen Sie "gefiltert" (Lektion 5.1).
  • reject schickt eine Ablehnung zurück: Von außen sehen Sie "geschlossen". Das ist sauberer für Ihre eigenen Dienste, verrät aber, dass dort ein Server ist.
  • limit lässt eine Verbindung zu, blockiert aber eine Adresse, die innerhalb von 30 Sekunden sechsmal oder öfter eine Verbindung aufzubauen versucht. Praktisch für SSH: sudo ufw limit OpenSSH statt allow. Das ist grob (es zählt Verbindungen, nicht fehlgeschlagene Anmeldungen); fail2ban (Lektion 5.3) ist genauer.

Dieselben Regeln in nftables

ufw schreibt unter der Haube netfilter-Regeln. Wenn Sie ohne ufw arbeiten möchten, schreiben Sie selbst eine nftables-Datei. Unter Debian liegt sie in /etc/nftables.conf und wird über den Dienst nftables geladen:

#!/usr/sbin/nft -f
flush ruleset

table inet filter {
    chain input {
        type filter hook input priority 0; policy drop;
        ct state established,related accept
        ct state invalid drop
        iif "lo" accept
        meta l4proto { icmp, ipv6-icmp } accept
        tcp dport { 22, 80, 443 } accept
    }
    chain forward {
        type filter hook forward priority 0; policy drop;
    }
    chain output {
        type filter hook output priority 0; policy accept;
    }
}

So lesen Sie das. Die Tabelle heißt filter und gehört zur Familie inet: eine Tabelle für IPv4 und IPv6 zugleich, sodass Sie IPv6 nicht vergessen können. In der Kette input ist die Richtlinie drop. Danach gilt: Antworten auf bereits bestehende Verbindungen dürfen zurück (established,related), alles auf Loopback ist erlaubt, ICMP ist erlaubt (unter anderem nötig für IPv6 und für Fehlermeldungen zur Paketgröße), und die Ports 22, 80 und 443 sind erlaubt.

anna@web1:~$ sudo nft -c -f /etc/nftables.conf    # prüfen, ohne zu laden
anna@web1:~$ sudo systemctl enable --now nftables
anna@web1:~$ sudo nft list ruleset

Verwenden Sie entweder ufw oder eine eigene nftables-Datei, nicht beides: Beide schreiben in dasselbe netfilter und können sich gegenseitig in die Quere kommen.

Wovor Ihre Firewall nicht schützt

  • Dienste, die Sie selbst zulassen. Port 443 ist für Ihre Website offen; eine Sicherheitslücke in Ihrer Website ist also ganz normal erreichbar. Die Firewall schützt nur die Ports, die geschlossen sind.
  • Docker. Wenn Sie mit Docker einen Port veröffentlichen (-p 5432:5432), setzt Docker eigene netfilter-Regeln, die den Datenverkehr umleiten, bevor die Regeln von ufw greifen. Die Docker-Dokumentation sagt wörtlich, dass Docker und ufw nicht gut zusammenpassen. Ein Container-Port kann also von außen offen sein, obwohl ufw status ihn nicht anzeigt. Die Lösung (Veröffentlichen auf 127.0.0.1) lernen Sie in Lektion 9.3.
  • Ausgehender Datenverkehr. Mit "allow outgoing" kann ein gehacktes Programm überallhin. Für die meisten kleinen Server ist das eine vertretbare Entscheidung; strenge Umgebungen beschränken auch den ausgehenden Datenverkehr.

Die Firewall Ihres Anbieters

Viele Anbieter haben zusätzlich eine Firewall im Netzwerk, vor Ihrem Server, die Sie im Kundenbereich konfigurieren (manchmal "Cloud Firewall" oder "Security Group" genannt). Sie ist eine gute zusätzliche Schicht und wirkt auch dann, wenn Sie auf dem Server selbst etwas falsch einstellen. Sie ersetzt die Firewall auf dem Server aber nicht: Wenn Sie den Server umziehen oder den Anbieter wechseln, kommt sie nicht mit, und nicht jeder Anbieter bietet sie an. Betreiben Sie deshalb immer auch eine Firewall auf dem Server selbst.

Unter AlmaLinux und Rocky Linux

Dort ist firewalld standardmäßig aktiv, mit Zonen. Die wichtigsten Befehle:

[root@web1 ~]# firewall-cmd --list-all
[root@web1 ~]# firewall-cmd --permanent --add-service=http --add-service=https
[root@web1 ~]# firewall-cmd --reload

Ohne --permanent gilt eine Änderung nur bis zum nächsten Neustart; mit --permanent erst nach --reload. SSH ist in der Standardzone bereits offen.

In der Praxis

Sperren Sie sich bei einem VPS von WebOké trotzdem aus, öffnen Sie im VPS-Bereich die Konsole, melden sich an und schalten die Firewall aus (ufw disable) oder nehmen die letzte Regel zurück. Bei anderen Anbietern heißt dieser Notzugang ebenfalls Konsole, VNC oder Rescue. Wissen Sie, wo sich diese Schaltfläche befindet, bevor Sie sie brauchen.

Zusammenfassung

  • Eine Firewall ist Ihre zweite Schicht nach "nur dort lauschen, wo es nötig ist"; nftables ist das Werkzeug im Kernel, ufw eine einfache Schicht darüber.
  • Beginnen Sie mit default deny incoming, erlauben Sie SSH vor ufw enable, testen Sie mit einer zweiten Sitzung und kennen Sie die Konsole Ihres Anbieters.
  • Prüfen Sie, dass ufw auch IPv6 abdeckt (IPV6=yes); in nftables erledigt das die Familie inet in einem Schritt.
  • deny ergibt von außen "gefiltert", reject ergibt "geschlossen"; limit bremst wiederholte Verbindungen.
  • Docker-Ports gehen an ufw vorbei (Lektion 9.3); die Firewall Ihres Anbieters ist eine zusätzliche Schicht, kein Ersatz.

Quiz

1. In welcher Reihenfolge schalten Sie ufw zum ersten Mal auf einem Server ein, auf dem Sie per SSH angemeldet sind?



2. Nach ufw enable funktioniert Ihre Website über IPv4 nicht mehr, SSH aber schon. Was ist die wahrscheinlichste Ursache?



3. Sie veröffentlichen mit Docker Port 5432 eines Datenbank-Containers. ufw status zeigt keine Regel für 5432. Ist die Datenbank von außen erreichbar?



4. Warum verwendet das nftables-Beispiel eine Tabelle der Familie inet?



5. Ihr Anbieter hat eine Netzwerk-Firewall im Kundenbereich. Brauchen Sie dann noch eine Firewall auf dem Server?



Aufgabe

Aufgabe O5.2: Ihre Firewall einrichten. Schalten Sie auf Ihrem Server eine Firewall mit ufw ein (oder nftables, oder firewalld unter AlmaLinux/Rocky): standardmäßig alles Eingehende gesperrt, SSH erlaubt und dazu nur, was Sie wirklich brauchen. Testen Sie mit einer zweiten Sitzung, prüfen Sie, ob IPv6 abgedeckt ist, und kontrollieren Sie von außen mit nc, ob ein nicht erlaubter Port geschlossen oder gefiltert ist. Füllen Sie die Checkliste aus und fügen Sie Ihr ufw status verbose (oder nft list ruleset) ein; geben Sie bei jedem offenen Port an, wofür er gedacht ist.

Aufgabe O5.2: Ihre Firewall einrichten

Diese Aufgabe machen Sie selbst; niemand prüft sie nach. Haken Sie ab, was Sie erledigt haben, und markieren Sie die Aufgabe als erledigt.



Ihre Haken und Notizen bleiben nur in diesem Browser; wir senden sie nirgendwohin. Sind Sie angemeldet, speichern wir in Meine Kurse nur, dass Sie die Aufgabe erledigt haben.

Weiterführende Informationen

Einen Moment bitte…

Richten Sie Ihre Domains ein

Legen Sie für jede Domain die Nameserver, die Verknüpfung mit Ihrem Hosting und den künftigen Inhaber fest.

Ihre Domains werden geladen…