Benutzer-Werkzeuge

Webseiten-Werkzeuge


sammlung:nftables

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
sammlung:nftables [2026/01/06 10:31] – [Weitere Informationen] Branislav Zeljaksammlung:nftables [2026/01/31 09:15] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 ===== nftables ===== ===== nftables =====
  
-nftables ist der moderne Nachfolger von iptables und bietet eine einheitliche Syntax für Paketfilterung und NAT.+**Kurzfassung:** nftables ist der moderne Nachfolger von iptables und vereinheitlicht die Firewall-Verwaltung für IPv4, IPv6, ARP und Bridge-Filterung. Es bietet bessere Performance, vereinfachte Syntax und ist seit Kernel 3.13 verfügbar. Zielgruppe: Systemadministratoren für moderne Firewall-Konfiguration.
  
-==== Merkmale ====+==== Übersicht ==== 
 +nftables ist das moderne Firewall-Framework, das iptables, ip6tables, arptables und ebtables in einem einzigen Tool vereint. Es nutzt das netfilter-Framework im Kernel, bietet aber eine neue Infrastruktur mit besserer Performance und flexiblerer Syntax. nftables verwendet ein neues Kernel-Modul (nf_tables) und das Userspace-Tool ''nft''. Es ist der designierte Nachfolger und wird in modernen Linux-Distributionen zum Standard.
  
-  Flexibler und effizienter als iptables +==== Voraussetzungen ==== 
-  * Einfache Syntax, zentrale Konfiguration+  * Linux-Kernel 3.13 oder höher (empfohlen: 4.14+) 
 +  * nftables-Paket installiert 
 +  Root-Privilegien oder Sudo-Zugriff 
 +  * Grundkenntnisse in Netzwerk-Protokollen
  
-==== Wichtige Befehle ====+==== Anleitung ====
  
-<code>+=== Installation und Grundkonfiguration === 
 +<code bash> 
 +# nftables installieren 
 +sudo apt install nftables        # Debian/Ubuntu 
 +sudo dnf install nftables        # Fedora/RHEL 
 +sudo pacman -S nftables          # Arch Linux 
 + 
 +# Service aktivieren und starten 
 +sudo systemctl enable nftables 
 +sudo systemctl start nftables 
 + 
 +# Status prüfen 
 +sudo systemctl status nftables 
 + 
 +# Aktuelle Regeln anzeigen
 sudo nft list ruleset sudo nft list ruleset
 +
 +# Alle Regeln löschen (flush)
 +sudo nft flush ruleset
 +</code>
 +
 +=== Grundlegende Konzepte ===
 +
 +nftables organisiert sich in:
 +  * **Tables** (Tabellen): Container für Chains
 +  * **Chains** (Ketten): Container für Rules
 +  * **Rules** (Regeln): Filteranweisungen
 +
 +**Tabellen-Familien:**
 +<code bash>
 +# ip     - IPv4
 +# ip6    - IPv6
 +# inet   - IPv4 + IPv6 (dual-stack)
 +# arp    - ARP
 +# bridge - Ethernet-Bridge
 +# netdev - Ingress (frühe Filterung)
 +</code>
 +
 +=== Tabellen und Chains erstellen ===
 +
 +<code bash>
 +# Tabelle erstellen (inet = IPv4 + IPv6)
 +sudo nft add table inet filter
 +
 +# Chain für eingehenden Traffic erstellen
 +# type filter: Filterung
 +# hook input: Am INPUT-Hook
 +# priority 0: Priorität (0 = default)
 +# policy drop: Standard-Aktion
 +sudo nft add chain inet filter input { type filter hook input priority 0 \; policy drop \; }
 +
 +# Chain für ausgehenden Traffic
 +sudo nft add chain inet filter output { type filter hook output priority 0 \; policy accept \; }
 +
 +# Chain für weitergeleiteten Traffic
 +sudo nft add chain inet filter forward { type filter hook forward priority 0 \; policy drop \; }
 +
 +# Alle Tabellen anzeigen
 +sudo nft list tables
 +
 +# Spezifische Tabelle anzeigen
 +sudo nft list table inet filter
 +</code>
 +
 +=== Regeln hinzufügen ===
 +
 +<code bash>
 +# SSH erlauben (Port 22)
 sudo nft add rule inet filter input tcp dport 22 accept sudo nft add rule inet filter input tcp dport 22 accept
-sudo nft delete rule inet filter input handle <handle>+ 
 +# HTTP und HTTPS erlauben 
 +sudo nft add rule inet filter input tcp dport { 80, 443 } accept 
 + 
 +# DNS erlauben (TCP und UDP) 
 +sudo nft add rule inet filter input tcp dport 53 accept 
 +sudo nft add rule inet filter input udp dport 53 accept 
 + 
 +# Loopback-Interface erlauben 
 +sudo nft add rule inet filter input iif lo accept 
 + 
 +# Etablierte Verbindungen erlauben 
 +sudo nft add rule inet filter input ct state established,related accept 
 + 
 +# ICMP erlauben (Ping) 
 +sudo nft add rule inet filter input icmp type echo-request accept 
 +sudo nft add rule inet filter input icmpv6 type echo-request accept 
 + 
 +# Port-Bereich erlauben 
 +sudo nft add rule inet filter input tcp dport 6000-6007 accept
 </code> </code>
  
-==== BeispielFreigabe von FTPHTTP und SSH (reboot-fest) ==== +=== IP-Adressen und Netzwerke filtern === 
-<code> + 
-Beispiel-Regeln in /etc/nftables.conf eintragen:+<code bash> 
 +# Traffic von bestimmter IP erlauben 
 +sudo nft add rule inet filter input ip saddr 192.168.1.100 accept 
 + 
 +# Traffic von ganzen Netzwerk 
 +sudo nft add rule inet filter input ip saddr 192.168.1.0/24 accept 
 + 
 +# IPv6-Adresse 
 +sudo nft add rule inet filter input ip6 saddr 2001:db8::/32 accept 
 + 
 +# Mehrere IPs als Set 
 +sudo nft add rule inet filter input ip saddr { 192.168.1.10, 192.168.1.20, 192.168.1.30 } accept 
 + 
 +# IP-Adresse blockieren 
 +sudo nft add rule inet filter input ip saddr 10.0.0.5 drop 
 + 
 +# Traffic von Interface 
 +sudo nft add rule inet filter input iifname "eth0" accept 
 +</code> 
 + 
 +=== Named Sets (IP-Listen) === 
 + 
 +<code bash> 
 +# Set erstellen 
 +sudo nft add set inet filter blacklist { type ipv4_addr \; } 
 + 
 +# IPs zum Set hinzufügen 
 +sudo nft add element inet filter blacklist { 192.168.1.50192.168.1.51 } 
 + 
 +# Set in Regel verwenden 
 +sudo nft add rule inet filter input ip saddr @blacklist drop 
 + 
 +# Set anzeigen 
 +sudo nft list set inet filter blacklist 
 + 
 +# Elemente aus Set entfernen 
 +sudo nft delete element inet filter blacklist { 192.168.1.50 } 
 +</code> 
 + 
 +=== NAT-Konfiguration === 
 + 
 +**Source NAT (SNAT / Masquerading):** 
 +<code bash> 
 +# NAT-Tabelle erstellen 
 +sudo nft add table inet nat 
 + 
 +# POSTROUTING Chain 
 +sudo nft add chain inet nat postrouting { type nat hook postrouting priority 100 \; } 
 + 
 +# Masquerading für ausgehenden Traffic 
 +sudo nft add rule inet nat postrouting oifname "eth0" masquerade 
 + 
 +# SNAT mit fester IP 
 +sudo nft add rule inet nat postrouting oifname "eth0" snat to 203.0.113.1 
 +</code> 
 + 
 +**Destination NAT (DNAT / Port-Weiterleitung):** 
 +<code bash> 
 +# PREROUTING Chain 
 +sudo nft add chain inet nat prerouting { type nat hook prerouting priority -100 \; } 
 + 
 +# Port-Weiterleitung (80 → 192.168.1.10:8080) 
 +sudo nft add rule inet nat prerouting iifname "eth0" tcp dport 80 dnat to 192.168.1.10:8080 
 + 
 +# Port-Bereich weiterleiten 
 +sudo nft add rule inet nat prerouting tcp dport 8000-8100 dnat to 192.168.1.20 
 +</code> 
 + 
 +=== Logging und Counter === 
 + 
 +<code bash
 +Logging aktivieren 
 +sudo nft add rule inet filter input tcp dport 22 log prefix \"SSH-Access: \" accept 
 + 
 +# Counter für Regel 
 +sudo nft add rule inet filter input tcp dport 80 counter accept 
 + 
 +# Named Counter 
 +sudo nft add counter inet filter http_counter 
 +sudo nft add rule inet filter input tcp dport 80 counter name http_counter accept 
 + 
 +# Counter anzeigen 
 +sudo nft list counters 
 +</code> 
 + 
 +=== Regeln löschen und ändern === 
 + 
 +<code bash> 
 +# Regeln mit Handle-Nummern anzeigen 
 +sudo nft -a list ruleset 
 + 
 +# Regel per Handle löschen 
 +sudo nft delete rule inet filter input handle 5 
 + 
 +# Chain löschen 
 +sudo nft delete chain inet filter input 
 + 
 +# Tabelle löschen 
 +sudo nft delete table inet filter 
 + 
 +# Komplettes Ruleset löschen 
 +sudo nft flush ruleset 
 + 
 +# Nur eine Tabelle leeren 
 +sudo nft flush table inet filter 
 +</code> 
 + 
 +=== Konfiguration speichern und laden === 
 + 
 +<code bash> 
 +# Aktuelle Konfiguration speichern 
 +sudo nft list ruleset > /etc/nftables.conf 
 + 
 +# Konfiguration laden 
 +sudo nft -f /etc/nftables.conf 
 + 
 +# Beim Systemstart laden (über systemd) 
 +sudo systemctl enable nftables 
 + 
 +# Konfigurationsdatei-Pfad (Distribution abhängig) 
 +# Debian/Ubuntu/etc/nftables.conf 
 +# RHEL/Fedora: /etc/sysconfig/nftables.conf 
 + 
 +# Syntax prüfen ohne anzuwenden 
 +sudo nft -c -f /etc/nftables.conf 
 +</code> 
 + 
 +=== Beispiel: Komplette Firewall-Konfiguration === 
 + 
 +<code bash> 
 +#!/usr/sbin/nft -f 
 + 
 +# Alles löschen 
 +flush ruleset 
 + 
 +# Tabelle erstellen
 table inet filter { table inet filter {
-  chain input { +    # INPUT Chain 
-    type filter hook input priority 0; +    chain input { 
-    tcp dport {21,22,80} accept +        type filter hook input priority 0; policy drop
-  }+ 
 +        # Loopback erlauben 
 +        iif lo accept 
 + 
 +        # Etablierte Verbindungen 
 +        ct state established,related accept 
 + 
 +        # ICMP 
 +        icmp type echo-request limit rate 1/second accept 
 + 
 +        # SSH 
 +        tcp dport 22 accept 
 + 
 +        # HTTP/HTTPS 
 +        tcp dport { 80, 443 } accept 
 + 
 +        # Logging für blockierte Pakete 
 +        limit rate 5/minute log prefix "nftables-drop:
 +    } 
 + 
 +    # OUTPUT Chain 
 +    chain output { 
 +        type filter hook output priority 0; policy accept; 
 +    } 
 + 
 +    # FORWARD Chain 
 +    chain forward { 
 +        type filter hook forward priority 0; policy drop; 
 +    }
 } }
 +</code>
  
-Regeln laden und beim Booten aktivieren:+=== Rate Limiting (DDoS-Schutz) === 
 + 
 +<code bash> 
 +Rate Limit für SSH 
 +sudo nft add rule inet filter input tcp dport 22 ct state new limit rate 3/minute accept 
 + 
 +# Burst erlauben 
 +sudo nft add rule inet filter input tcp dport 80 limit rate over 100/second burst 200 packets drop 
 + 
 +# Pro Source-IP limitieren 
 +sudo nft add rule inet filter input tcp dport 22 meter ssh_meter { ip saddr limit rate 3/minute } accept 
 +</code> 
 + 
 +=== Verbindungsmanagement === 
 + 
 +<code bash> 
 +# Connection Tracking States 
 +# new         - Neue Verbindung 
 +# established - Bestehende Verbindung 
 +# related     - Verwandte Verbindung (z.B. FTP-Data) 
 +# invalid     - Ungültige Pakete 
 + 
 +# Nur neue und etablierte Verbindungen 
 +sudo nft add rule inet filter input ct state new,established accept 
 + 
 +# Invalide Pakete blockieren 
 +sudo nft add rule inet filter input ct state invalid drop 
 + 
 +# Related Verbindungen (z.B. FTP) 
 +sudo nft add rule inet filter input ct state related accept 
 +</code> 
 + 
 +=== Migration von iptables === 
 + 
 +<code bash> 
 +# iptables-Regeln nach nftables konvertieren 
 +sudo iptables-save > iptables-rules.txt 
 +sudo iptables-restore-translate -f iptables-rules.txt > nftables-rules.nft 
 + 
 +# Oder direkt: 
 +sudo iptables-save | iptables-restore-translate > /etc/nftables.conf 
 + 
 +# ip6tables auch konvertieren 
 +sudo ip6tables-save | ip6tables-restore-translate >> /etc/nftables.conf 
 + 
 +# Konvertierte Regeln prüfen und anwenden 
 +sudo nft -c -f /etc/nftables.conf
 sudo nft -f /etc/nftables.conf sudo nft -f /etc/nftables.conf
-sudo systemctl enable nftables 
 </code> </code>
  
-==== Weitere Informationen ====+=== Debugging und Troubleshooting ===
  
 +<code bash>
 +# Alle Regeln mit Details
 +sudo nft -a list ruleset
 +
 +# Nur eine Familie
 +sudo nft list ruleset inet
 +
 +# Mit Statistiken
 +sudo nft list table inet filter
 +
 +# Monitor-Modus (live)
 +sudo nft monitor
 +
 +# Trace aktivieren (Packet-Tracing)
 +sudo nft add rule inet filter input meta nftrace set 1
 +
 +# Trace-Log anzeigen
 +sudo nft monitor trace
 +
 +# Performance-Statistiken
 +time sudo nft -f /etc/nftables.conf
 +</code>
 +
 +==== Hinweise ====
 +
 +<note tip>
 +**Best Practices:**
 +- ''inet'' Familie nutzen für dual-stack (IPv4 + IPv6 gleichzeitig)
 +- Sets verwenden für große IP-Listen (bessere Performance)
 +- Konfiguration in Datei speichern: ''/etc/nftables.conf''
 +- Rate Limiting gegen Brute-Force: ''limit rate 3/minute''
 +- ''ct state established,related'' früh in Chain für Performance
 +- Named Counters für Monitoring und Statistiken nutzen
 +- Vor Produktiv-Deployment: ''nft -c -f'' zum Syntax-Check
 +</note>
 +
 +<note warning>
 +**Häufige Fehler vermeiden:**
 +- Semikolon in Chain-Definition maskieren: ''\;'' nicht '';''
 +- Sets müssen vor Nutzung definiert werden
 +- ''policy drop'' + ''ct state established'' = keine neue Verbindung möglich!
 +- Handle-Nummern ändern sich nach Löschen von Regeln
 +- ''flush ruleset'' löscht ALLES - auch SSH-Zugriff auf Remote-Systemen!
 +- nftables und iptables nicht parallel nutzen (Konflikte möglich)
 +- Ranges mit ''-'': ''6000-6007'' nicht '':''
 +</note>
 +
 +==== Siehe auch ====
 +  * [[sammlung:netfilter|netfilter]]
   * [[sammlung:iptables|iptables]]   * [[sammlung:iptables|iptables]]
-  * [[sammlung:firewalld|firewalld]]+  * [[sammlung:ufw|UFW]] 
 +  * [[sammlung:firewall|Firewall]] 
 +  * [[sammlung:conntrack|conntrack]] 
 + 
 +==== Quellen ==== 
 +  * [[https://wiki.nftables.org/|nftables Wiki]] 
 +  * [[https://netfilter.org/projects/nftables/|nftables auf netfilter.org]] 
 +  * [[https://wiki.archlinux.org/title/Nftables|Arch Linux nftables Guide]] 
 +  * [[https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/configuring_and_managing_networking/getting-started-with-nftables_configuring-and-managing-networking|RHEL nftables Documentation]] 
 + 
 +---- 
 + 
 +{{tag>nftables firewall netfilter iptables network security}}
  
-{{tag>cli firewall netzwerk advanced}}+----
  
sammlung/nftables.txt · Zuletzt geändert: von 127.0.0.1