eBPF (extended Berkeley Packet Filter) ist eine Technologie des Linux-Kernels, mit der sich kleine Programme sicher im Kernel ausführen lassen – ohne Kernel-Modul, ohne Neukompilierung und ohne das System zu gefährden. eBPF gilt als eine der wichtigsten Kernel-Entwicklungen der letzten Jahre und steckt heute in Hochleistungs-Netzwerk, Observability und Sicherheitslösungen.
Vom Paketfilter zur Kernel-VM
Der Ursprung liegt im klassischen BPF (Berkeley Packet Filter), den Steven McCanne und Van Jacobson 1992 für das BSD-System entwickelten – er steckt bis heute in tcpdump und libpcap. Der entscheidende Schritt kam 2014: Alexei Starovoitov und Daniel Borkmann führten mit Linux 3.18 das erweiterte eBPF ein, das den simplen Paketfilter zu einer universellen, sandboxartigen Laufzeitumgebung im Kernel ausbaute (64-Bit-Register, reicherer Befehlssatz).
Wie eBPF funktioniert
Ein eBPF-Programm wird als Bytecode geladen und durchläuft zwei Sicherheitsstufen: Der Verifier prüft das Programm vor dem Laden statisch – Endlosschleifen, unerlaubte Speicherzugriffe und gefährliche Operationen werden abgelehnt. Danach kompiliert ein JIT das Bytecode in nativen Maschinencode, sodass es fast so schnell läuft wie regulärer Kernel-Code. Für den Austausch mit dem Userspace dienen Maps, gemeinsame Datenstrukturen zwischen Kernel- und Userspace-Prozessen.
Einsatzgebiete
- Netzwerk: XDP (eXpress Data Path) verarbeitet Pakete direkt an der Netzwerkkarte und wird für DDoS-Abwehr und Hochleistungs-Load-Balancing genutzt; TC-Hooks filtern und steuern Traffic an klassischen Netzwerk-Pfaden.
- Observability: Mit kprobes und uprobes lassen sich Kernel- und Userspace-Funktionen dynamisch beobachten – die Basis moderner Tracing-Werkzeuge.
- Sicherheit: Laufzeit-Erkennung (zum Beispiel Falco) überwacht Systemaufrufe, ohne den Kernel zu patchen.
- Container-Netzwerk: Das Kubernetes-CNI Cilium ersetzt klassische Komponenten wie iptables-basiertes kube-proxy durch eBPF und verarbeitet Service-Traffic direkt im Kernel-Datenpfad.
Typische Werkzeuge sind bpftool, bcc und libbpf; mit CO-RE (Compile Once, Run Everywhere) und BTF-Informationen laufen eBPF-Programme portabel über Kernel-Versionen hinweg. Im Kubernetes-Umfeld hängt auch die CoreDNS-DNS-Auflösung – früher kube-dns – am selben Netzwerk-Datenpfad, den eBPF-basierte CNIs beschleunigen.
Verwandte Grundlagen: CNI, Kubernetes, Container.