===== 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}} ----