Benutzer-Werkzeuge

Webseiten-Werkzeuge


sammlung:netfilter

netfilter

Kurzfassung: netfilter ist das Firewall-Framework im Linux-Kernel, das Paketfilterung, NAT und Port-Weiterleitung ermöglicht. Es bildet die Grundlage für Tools wie iptables, nftables und UFW. Zielgruppe: Systemadministratoren zur Netzwerksicherheit und -verwaltung.

Übersicht

netfilter ist ein Framework im Linux-Kernel (seit Kernel 2.4), das Hooks zur Paketmanipulation bereitstellt. Es ermöglicht das Filtern, Modifizieren und Weiterleiten von Netzwerkpaketen auf verschiedenen Ebenen des Netzwerk-Stacks. netfilter arbeitet im Kernel-Space, während die Verwaltungstools (iptables, nftables, UFW) im User-Space laufen und Regeln an netfilter übergeben.

Voraussetzungen

  • Linux-Kernel mit netfilter-Unterstützung (Standard seit 2.4)
  • Root-Privilegien für Konfiguration
  • Verständnis von TCP/IP-Netzwerken
  • Kenntnis von Paket-Flow und Routing

Anleitung

Architektur und Komponenten

netfilter besteht aus mehreren Subsystemen:

Hauptkomponenten:

  • ip_tables: IPv4-Paketfilterung
  • ip6_tables: IPv6-Paketfilterung
  • arp_tables: ARP-Paketfilterung
  • ebtables: Ethernet-Bridge-Filterung
  • nf_tables: Modernes, vereinheitlichtes Framework

Kernel-Module:

# Geladene netfilter-Module anzeigen
lsmod | grep -E "nf_|ip_tables|iptable_|nf_conntrack"
 
# Häufige Module:
# nf_conntrack      - Connection Tracking
# nf_nat            - Network Address Translation
# iptable_filter    - Paketfilterung
# iptable_nat       - NAT-Tabelle
# iptable_mangle    - Paketmanipulation
# nf_tables         - Modernes nftables Backend

netfilter Hooks (Einhängepunkte)

netfilter bietet 5 Hook-Punkte im Paket-Flow:

                    ┌──────────┐
                    │ PREROUTING│ ← Eingehende Pakete (vor Routing)
                    └──────────┘
                         ↓
                    Routing-
                    Entscheidung
                    ↙         ↘
           ┌───────┐         ┌────────┐
           │ INPUT │         │FORWARD │ ← Weiterleitungspakete
           └───────┘         └────────┘
                ↓                 ↓
         Lokaler Prozess    ┌──────────┐
                ↓           │POSTROUTING│ ← Ausgehende Pakete (nach Routing)
           ┌────────┐       └──────────┘
           │ OUTPUT │
           └────────┘

Hook-Beschreibungen:

  • PREROUTING: Pakete bevor Routing-Entscheidung (NAT, Portweiterleitung)
  • INPUT: Pakete für lokale Prozesse
  • FORWARD: Pakete, die weitergeleitet werden (Router)
  • OUTPUT: Lokal erzeugte Pakete
  • POSTROUTING: Pakete nach Routing-Entscheidung (Source NAT)

Tabellen und Chains

netfilter organisiert Regeln in Tabellen:

filter (Standard-Tabelle):

# Filterung von Paketen
# Chains: INPUT, FORWARD, OUTPUT
sudo iptables -t filter -L -v

nat (Network Address Translation):

# NAT und Port-Weiterleitung
# Chains: PREROUTING, OUTPUT, POSTROUTING
sudo iptables -t nat -L -v

mangle (Paketmanipulation):

# Ändern von TOS, TTL, MARK
# Chains: PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING
sudo iptables -t mangle -L -v

raw (Vor Connection Tracking):

# Bypass Connection Tracking
# Chains: PREROUTING, OUTPUT
sudo iptables -t raw -L -v

security (SELinux):

# Mandatory Access Control
# Chains: INPUT, FORWARD, OUTPUT
sudo iptables -t security -L -v

Connection Tracking (conntrack)

Connection Tracking verfolgt Verbindungszustände:

# Aktive Verbindungen anzeigen
sudo conntrack -L
 
# Verbindungsstatus:
# NEW        - Neue Verbindung
# ESTABLISHED - Bestehende Verbindung
# RELATED    - Verwandte Verbindung (z.B. FTP-Data)
# INVALID    - Ungültiges Paket
 
# Conntrack-Tabelle leeren
sudo conntrack -F
 
# Maximale Conntrack-Einträge
cat /proc/sys/net/netfilter/nf_conntrack_max
 
# Aktuelle Anzahl
cat /proc/sys/net/netfilter/nf_conntrack_count
 
# Timeout-Werte anzeigen
cat /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established

netfilter Module verwalten

# Alle netfilter-Module anzeigen
find /lib/modules/$(uname -r) -type f -name '*netfilter*' -o -name 'nf_*' -o -name 'xt_*' | sort
 
# Modul manuell laden
sudo modprobe nf_conntrack
sudo modprobe nf_nat
 
# Modul entfernen
sudo modprobe -r nf_conntrack
 
# Permanente Module in /etc/modules
echo "nf_conntrack" | sudo tee -a /etc/modules
 
# Modul-Parameter setzen
sudo modprobe nf_conntrack hashsize=32768

netfilter Log-System

# Log-Regel mit iptables
sudo iptables -A INPUT -j LOG --log-prefix "NETFILTER: " --log-level 4
 
# Logs anzeigen (Kernel-Log)
sudo dmesg | grep NETFILTER
sudo journalctl -k | grep NETFILTER
 
# Systemlogs
sudo tail -f /var/log/kern.log | grep NETFILTER
 
# nftables Logging
sudo nft add rule ip filter input log prefix \"NFT-LOG: \"

Statistiken und Monitoring

# netfilter Statistiken
cat /proc/net/netfilter/nf_conntrack
 
# Kernel-Statistiken
cat /proc/net/stat/nf_conntrack
 
# Performance-Metriken
sudo iptables -t filter -L -v -n -x
# -v: verbose (Paket/Byte-Zähler)
# -n: numerisch (keine DNS-Auflösung)
# -x: exakte Zahlen
 
# Zähler zurücksetzen
sudo iptables -Z
 
# nftables Statistiken
sudo nft list ruleset -a

Debugging und Troubleshooting

# netfilter Debug-Modus (raw-Tabelle)
sudo iptables -t raw -A PREROUTING -p tcp --dport 80 -j TRACE
sudo iptables -t raw -A OUTPUT -p tcp --dport 80 -j TRACE
 
# Trace-Logs anzeigen (erfordert iptables-extensions)
sudo xtables-monitor --trace
 
# Connection Tracking Events monitoren
sudo conntrack -E
 
# Kernel-Parameter für Debugging
echo 1 | sudo tee /proc/sys/net/netfilter/nf_log_all_netns
 
# Performance-Probleme analysieren
sudo perf record -a -g -e 'nf:*'
sudo perf report

Kernel-Parameter optimieren

# Conntrack-Tabellengröße erhöhen
sudo sysctl -w net.netfilter.nf_conntrack_max=131072
 
# Hashsize anpassen (nf_conntrack_buckets)
echo 32768 | sudo tee /sys/module/nf_conntrack/parameters/hashsize
 
# TCP Timeouts anpassen
sudo sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established=7200
 
# Permanente Änderungen in /etc/sysctl.conf
sudo tee -a /etc/sysctl.conf <<EOF
net.netfilter.nf_conntrack_max = 131072
net.netfilter.nf_conntrack_tcp_timeout_established = 7200
EOF
 
sudo sysctl -p

Tools zur Verwaltung

User-Space-Tools:

# iptables - Klassisches Tool
sudo iptables -L -v
 
# nftables - Modernes Tool
sudo nft list ruleset
 
# UFW - Benutzerfreundlich
sudo ufw status
 
# firewalld - Dynamische Firewall
sudo firewall-cmd --list-all
 
# conntrack - Connection-Tracking-Tool
sudo conntrack -L

Hinweise

Best Practices: - netfilter ist Kernel-Framework, nicht direkt konfigurierbar - immer Tools nutzen - Connection Tracking erhöht Overhead - bei Bedbedarf deaktivierbar - nf_conntrack_max an verfügbaren RAM anpassen (128MB pro 64k Einträge) - Hashsize = nf_conntrack_max / 4 (Faustregel) - Module lazy-loading - nur benötigte Module laden - Log-Regeln sparsam einsetzen (Performance!)
Häufige Probleme vermeiden: - nf_conntrack: table fullnf_conntrack_max erhöhen - Zu kleine Hashsize → Performance-Einbußen bei vielen Connections - TRACE-Regeln in Produktion → massive Log-Flut! - Connection Tracking für High-Traffic-Server → kann Bottleneck sein - Module-Reihenfolge wichtig: nf_conntrack vor nf_nat laden - IPv4/IPv6 getrennt behandeln (ip_tables vs ip6_tables)

Siehe auch

Quellen

sammlung/netfilter.txt · Zuletzt geändert: von 127.0.0.1