===== UFW Firewall =====
**Kurzfassung:** UFW (Uncomplicated Firewall) ist eine benutzerfreundliche Schnittstelle zur iptables/netfilterl Firewall unter Linux. Sie ermöglicht das einfache Erstellen von Firewall-Regeln, Freigaben von Ports und Kontrolle des Netzwerkverkehrs. Zielgruppe: Systemadministratoren zur Netzwerksicherheit.
==== Übersicht ====
UFW ist ein vereinfachtes Frontend für iptables/netfilter oder nftables, das besonders auf Ubuntu standardmäßig mitgeliefert wird. Im Gegensatz zu direkter iptables-Bearbeitung bietet UFW eine intuitive Befehlszeilenschnittstelle. UFW arbeitet nach dem Prinzip "alles blockieren, außer explizit erlaubt" und ist daher sehr sicher für Anfänger geeignet.
==== iptables vs. nftables Backend ====
UFW kann auf zwei verschiedenen Firewall-Backends arbeiten:
**iptables (klassisch):**
* Traditionelles Linux-Firewall-System seit Kernel 2.4
* Besteht aus mehreren Tools: iptables, ip6tables, arptables, ebtables
* Weit verbreitet und bewährt
* Performance-Nachteile bei vielen Regeln
**nftables (modern):**
* Nachfolger von iptables seit Kernel 3.13
* Vereinheitlichte Syntax für IPv4, IPv6, ARP, Bridge
* Bessere Performance und Skalierbarkeit
* Wird zum neuen Standard
=== Backend feststellen ===
# Aktives Firewall-Backend erkennen
sudo update-alternatives --display iptables
# Ausgabe zeigt:
# iptables - auto mode
# link best version is /usr/sbin/iptables-nft → nftables Backend
# link currently points to /usr/sbin/iptables-nft
# Alternativen:
# /usr/sbin/iptables-legacy → klassisches iptables
# /usr/sbin/iptables-nft → nftables Backend
# Alternative Prüfung via Regeln
sudo iptables -V # Version anzeigen
sudo nft list ruleset # nftables Regeln (wenn leer, kein nftables aktiv)
# Welche Kernel-Module geladen sind
lsmod | grep -E "ip_tables|nf_tables"
# ip_tables → iptables Backend
# nf_tables → nftables Backend
=== Backend wechseln ===
# Zu nftables-Backend wechseln (empfohlen für neue Systeme)
sudo update-alternatives --set iptables /usr/sbin/iptables-nft
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-nft
# Zu klassischem iptables zurück
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
# Nach dem Wechsel UFW neu starten
sudo systemctl restart ufw
**Hinweis:** UFW funktioniert mit beiden Backends transparent. Ein Backend-Wechsel ändert nichts an den UFW-Befehlen.
==== Voraussetzungen ====
* UFW installiert (meist auf Ubuntu/Debian standard)
* Root-Privilegien oder Sudo-Zugriff
* Kenntnis von Ports und Protokollen (TCP/UDP)
* SSH sollte vor UFW-Aktivierung freigegeben werden!
==== Anleitung ====
=== Installation und Aktivierung ===
# UFW installieren (wenn nicht vorhanden)
sudo apt install ufw
# UFW Status prüfen
sudo ufw status
# WICHTIG: SSH vor Aktivierung erlauben
sudo ufw allow 22/tcp
# UFW aktivieren
sudo ufw enable
# UFW deaktivieren
sudo ufw disable
# UFW und alle Regeln zurücksetzen
sudo ufw reset
**KRITISCH:** Bevor UFW aktiviert wird, IMMER SSH (Port 22) freigeben! Sonst verliert man Zugriff auf Remote-Systeme.
=== Ports und Services freigeben ===
# Spezifischen Port freigeben
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# Port mit UDP freigeben
sudo ufw allow 53/udp
# Port-Bereich freigeben
sudo ufw allow 6000:6007/tcp
# Service nach Namen freigeben
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
sudo ufw allow dns
# Service auf spezifischem Interface
sudo ufw allow in on eth0 to any port 22
=== Regeln blockieren und löschen ===
# Port blockieren
sudo ufw deny 23/tcp
# Regel löschen
sudo ufw delete allow 80/tcp
# Regel nach Nummer löschen
sudo ufw delete 3
# Alle Regeln mit Nummern anzeigen
sudo ufw status numbered
# Eingehenden Traffic blockieren (default)
sudo ufw default deny incoming
# Ausgehenden Traffic erlauben
sudo ufw default allow outgoing
=== IP-Adressen und Netzwerke ===
# Traffic von bestimmter IP erlauben
sudo ufw allow from 192.168.1.100
# Traffic von IP mit spezifischem Port
sudo ufw allow from 192.168.1.100 to any port 22
# Traffic vom ganzen Netzwerk erlauben
sudo ufw allow from 192.168.1.0/24
# IPv6-Adresse
sudo ufw allow from 2001:db8::1
# Traffic von Netzwerk auf Port
sudo ufw allow in on eth0 from 192.168.1.0/24 to any port 22
# Traffic blockieren
sudo ufw deny from 192.168.1.50
=== Firewall-Richtlinien ===
# Standardrichtlinie anzeigen
sudo ufw status verbose
# Richtlinie ändern
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw default reject routed
# Detaillierte Anzeige mit Nummern
sudo ufw status numbered
=== Logging und Debugging ===
# Logging aktivieren
sudo ufw logging on
# Logging Level ändern
sudo ufw logging high
# Logs anzeigen
sudo tail -f /var/log/ufw.log
# Systemd-Logs
sudo journalctl -u ufw -n 50
# Raw iptables Regeln
sudo iptables -L -n -v
# Wenn nftables Backend, auch nftables Regeln prüfen
sudo nft list ruleset
=== Häufige Anwendungsszenarien ===
**Web-Server (HTTP + HTTPS):**
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
sudo ufw enable
**SSH mit beschränktem Zugriff:**
sudo ufw allow from 192.168.1.0/24 to any port 22
sudo ufw deny 22/tcp
sudo ufw enable
**Mail-Server:**
sudo ufw allow 25/tcp # SMTP
sudo ufw allow 465/tcp # SMTPS
sudo ufw allow 110/tcp # POP3
sudo ufw allow 143/tcp # IMAP
sudo ufw allow 993/tcp # IMAPS
sudo ufw allow 995/tcp # POP3S
**DNS-Server:**
sudo ufw allow 53/tcp
sudo ufw allow 53/udp
**Rate Limiting gegen Brute-Force:**
sudo ufw limit ssh
sudo ufw limit http
==== Hinweise ====
**Best Practices:**
- SSH immer vor Aktivierung auf Remote-Systemen freigeben
- Logging aktivieren zur Fehlersuche: ''sudo ufw logging on''
- Regeln mit Nummern anzeigen: ''sudo ufw status numbered''
- ''limit'' für Port-Scanning-Schutz nutzen: ''sudo ufw limit ssh''
- ''allow'' vor ''deny'' setzen (Reihenfolge matters)
- Regeln testen, bevor UFW aktiviert wird
**Häufige Fehler vermeiden:**
- **Kritisch:** SSH MUSS freigegeben sein, bevor UFW aktiviert wird!
- ''ufw reset'' löscht ALLE Regeln - es gibt kein Backup!
- ''default deny incoming'' ist restriktiv - alle Services einzeln erlauben
- Port-Bereich-Syntax: ''6000:6007'' nicht ''6000-6007''
- Interface-Namen checken (eth0, wlan0, enp0s3, docker0)
- Keine Unterscheidung: ''allow from IP'' erlaubt auf allen Ports
==== Siehe auch ====
* [[sammlung:iptables|iptables]]
* [[sammlung:netfilter|netfilter]]
* [[sammlung:firewall|Firewall]]
* [[sammlung:ssh|SSH]]
==== Quellen ====
* [[https://wiki.ubuntu.com/UncomplicatedFirewall|Ubuntu UFW Wiki]]
* [[https://manpages.ubuntu.com/manpages/focal/man8/ufw.8.html|UFW Manual Page]]
* [[https://www.digitalocean.com/community/tutorials/ufw-essentials-common-firewall-rules-and-commands|DigitalOcean UFW Guide]]
----
{{tag>firewall ufw security iptables netzwerk}}
----