Super Ebpf
Eine kuratierte Liste großartiger Projekte im Zusammenhang mit EBPF.
BPF ist wie im Berkeley-Paketfilter ein in Kernel virtueller Maschine, das Programme aus dem Benutzerraum übergeben. Ursprünglich auf BSD implementiert, dann wird Linux, der (jetzt Legacy) "Classic BPF" oder CBPF -Computer mit Tools wie TCPDump zum Filterpaketen im Kernel verwendet, um nutzlose Kopien des Benutzerraums zu vermeiden. In jüngerer Zeit wurde die BPF-Infrastruktur in Linux komplett überarbeitet und dem "erweiterten BPF" oder EBPF das Leben verleiht, das neue Funktionen (Sicherheits- und Abschlussüberprüfungen, JIT-COMPILIEN für Programme, persistente Karten, eine Standardbibliothek, Hardware-Ablast-Support usw.) gewonnen hat und jetzt für viele Aufgaben verwendet wird. Die Verarbeitung von Paketen auf einem sehr niedrigen Niveau (XDP), der Verfolgung und Überwachung von Ereignissen auf dem System oder der Durchsetzung der Zugriffskontrolle über CGroups sind jedoch einige Beispiele, für die EBPF Leistung, Programmierbarkeit und Flexibilität bringt.
Kürzlich hat Cilium eine großartige Website über EBPF namens EBPF.IO gestartet. Es dient einem ähnlichen Zweck dieser Liste mit einer Einführung in EBPF und Links zu verwandten Projekten.
Hinweis: EBPF ist ein aufregendes Stück Technologie, und sein Ökosystem entwickelt sich ständig weiter. Wir würden Ihnen die Hilfe von Ihnen lieben, um diese großartige Liste auf dem neuesten Stand zu halten und das Signal-Rausch-Verhältnis in trotzdem zu verbessern. Bitte hinterlassen Sie Feedback.
Inhalt
- Referenzdokumentation
- Artikel und Präsentationen
- Tutorials
- Beispiele
- EBPF -Workflow: Tools und Dienstprogramme
- Projekte im Zusammenhang mit EBPF
- EBPF in Sicherheit
- Der Code
- Entwicklung und Gemeinschaft
- Andere Ressourcenlisten auf EBPF
- Anerkennung
Referenzdokumentation
EBPF Essentials
- EBPF.io - Ein Tor, um alle Grundlagen von EBPF zu entdecken, einschließlich einer Auflistung der wichtigsten Projekte und der Community -Ressourcen.
- Ciliums BPF- und XDP -Referenzhandbuch - eingehende Dokumentation zu den meisten Funktionen und Aspekten von EBPF.
Kerneldokumentation
- BPF -Dokumentation - Index für die BPF -bezogene Dokumentation mit dem Linux -Kernel.
- Linux/Dokumentation/Netzwerk/Filter.RST - EBPF -Spezifikation (etwas veraltet; Informationen sollten weiterhin gültig, aber nicht erschöpfend sein).
- BPF -Design Q & A - Häufig gestellte Fragen zu den Entscheidungen hinter der BPF -Infrastruktur.
- Howa to Interact mit dem BPF -Subsystem - häufig gestellte Fragen zum Beitrag zur EBPF -Entwicklung.
Handbuchseiten
-
bpf(2) - Manuelle Seite zum bpf() -Systemanruf, der zum Verwalten von BPF -Programmen und -Karten von UserSpace verwendet wird. -
tc-bpf(8) - Manuelle Seite zur Verwendung von BPF mit TC, einschließlich Beispielbefehlen und Code. -
bpf-helpers(7) MAN PAGE-Beschreibung der In-Kernel-Helferfunktionen, die die BPF-Standardbibliothek bilden.
Andere
Inoffizielle EBPF -Spezifikation von IO Visor - Zusammenfassung der EBPF -Syntax- und Betriebscodes.
Die Dokumentation von Jesper Dangaard Brouer - Arbeiten, Beiträge willkommen.
E-Mails von David Miller an die XDP-Newbies-Mailingliste:
- BPF.h und du ...
- Kontextuell gesprochen ...
- BPF -Übersicht
Liste der BPF -Funktionen pro Kernelversion
Artikel und Präsentationen
Generische EBPF -Präsentationen und -artikel
Wenn Sie neu in EBPF sind, möchten Sie möglicherweise die als "Einführungen" beschriebenen Links in diesem Abschnitt ausprobieren.
Eine kurze Einführung in XDP und EBPF - eine zugängliche Einführung, die Kontext, Geschichte und Details zur Funktionsweise von EBPF bietet.
Eine EBPF -Übersicht - Blog -Serie von Adrian Ratiu, die viele Aspekte der EBPF -Infrastruktur abdeckt:
- Teil 1: Einführung
- Teil 2: Maschine & Bytecode
Ferris Ellis 'Blog -Beiträge über EBPF - Sie haben einige Beiträge zu EBPF:
- Teil 1: Vergangenheit, Gegenwart und Zukunft
- Teil 2: System- und Kartentypen
A BPF Reference Guide - Über BPF C- und BCC -Python -Helfer aus dem BCC -Repository.
Machen Sie den Netzwerkdatenpfad des Kernels mit BPF und XDP programmierbar - eine Reihe von Folien, die alle Grundlagen über EBPF und XDP abdecken (hauptsächlich für die Netzwerkverarbeitung).
Der BSD -Paketfilter - eine Einführung, die hauptsächlich die Tracing -Aspekte abdeckt.
BPF: Verfolgung und mehr - Eine Einführung, die hauptsächlich die Tracing -Aspekte abdeckt.
Linux BPF -Superkräfte - Eine Einführung, die hauptsächlich die Tracing -Aspekte abdeckt, erster Teil mit Flammengraphen.
IO Visor - stellt auch ein IO Visor -Projekt vor.
BPF - Virtuelle Maschine in Kernel - Präsentation des Autors von EBPF.
Erweiterung erweiterter BPF - Ein Blog -Beitrag aus dem Jahr 2014 zur Entwicklung von BPF und dem Nachweis, was damit zu demonstrieren, was damit getan werden kann, unter Verwendung eines Beispiels für die staatliche Sockelfilterung durch Anbringen eines EBPF -Programms an einen Socket.
Greg Marsden machte eine Dokumentation über EBPF:
- Eine Tour durch Programmtypen - Eine Beschreibung aller vorhandenen Hooks für BPF -Programmtypen und von ihrem Interesse.
- BPF -Helferfunktionen - Eine Überprüfung der Kernelfunktionen, die aus EBPF -Programmen aufgerufen werden können.
- Kommunikation mit UserSpace - Wie BPF mit UserSpace kommuniziert - BPF -Karten, Perf Events, BPF_TRACE_PRINTK.
- Erstellen von BPF -Programmen - Einrichten Ihrer Umgebung zum Erstellen von BPF -Programmen.
- Der BPF -Bytecode und der BPF -Verifizierer - Wie stellt BPF sicher, dass Programme sicher sind?
- Verwenden von BPF zur Durchführung von Pakettransformation - eine EBPF -Verwendung über die Pakettransformation.
Linux -Kernel -Beobachtbarkeit durch EBPF - Ein Blog -Beitrag, der die Grundlagen von EBPF sowie Code -Beispiele für das Erstellen und Laden eines minimalen EBPF -Programms in den Kernel abdeckt.
EBPF - Aus der Sicht eines Programmierers - ein kurzes Papier, das die Grundlagen von EBPF beschreibt und wie man mit dem Schreiben von EBPF -Programmen beginnt.
Die Blog -Beiträge von Cloudflare zu EBPF - Verschiedene Blog -Beiträge zu Networking -Anwendungsfällen und Aspekten von EBPF auf niedriger Ebene.
LINUX Extended BPF (EBPF) -Scharness -Tools - Eine eingehende Sammlung von Informationen zu Beispielen für Leistungsanalyse -Tools unter Verwendung von EBPF. Enthält auch einen Abschnitt am Ende der Seite über andere Ressourcen.
Anfängerleitfaden zu EBPF - eine Reihe von Live -Coding -Gesprächen und die dazugehörigen Codebeispiele, die die EBPF -Programmierung mit einer Vielzahl von Bibliotheken und Programmtypen einführen.
BPF -Interna
Daniel Borkmann hat mehrere Präsentationen und Papiere über die Interna von EBPF gemacht, insbesondere über die Verwendung mit TC.
- EBPF- und XDP -Walkthrough und aktuelle (2017) Updates
- Erweiterte Programmierbarkeit und aktuelle Updates mit CLS_BPF von TC - Details zu EBPF, deren Verwendung für Tunneling und Kapselung, Direktpaketzugriff und vieles mehr.
- CLS_BPF/EBPF -Updates seit NetDEV 1.1 - Teil dieses TC -Workshops.
- Bei der vollständigen programmierbaren TC -Klassifizierung mit CLS_BPF - Einführung in EBPF, einschließlich mehrerer Funktionen (Kartenverwaltung, Tail -Anrufe, Verifier). Das vollständige Papier ist auch hier erhältlich.
- Linux TC und EBPF
IO Visor Blog
Linux Networking erklärte - Linux -Networking -Interna, mit einem Teil von EBPF.
Kernelverfolgung
- Dynamische Verfolgung des Vollsystems auf Linux unter Verwendung von EBPF und BPFTRACE - Eine detaillierte Einführung in die Verfolgung mit EBPF, von der Auflistung der verfügbaren Trace -Punkte bis hin zum Ausführen von BPFTrace -Programmen.
- Treffen zwischen EBPF und Kernelverfolgung - KPROBES, Vorroben, Ftrace.
- Linux-Kernelverfolgung-Systemtap, Kernelshark, Trace-CMD, Lttng, Perf-Tool, Ftrace, HIST-Trigger, Perf, Funktion Tracer, TracePoint, Kprobe/Uprobe und mehr.
- Brendan Greggs Blog und insbesondere Linux BPF Superpowers -Artikel.
XDP
Der Express -Datenpfad - eine sehr zugängliche Einführung in XDP, die Beispielcode bereitstellt, um zu zeigen, wie Pakete verarbeitet werden.
Alle XDP-Details in einem technischen Papier: Der Express-Datenpfad: Schnellprogrammierbare Paketverarbeitung im Betriebssystem Kernel, von Toke Høiland-Jørgensen, Jesper Dangaard Brouer, Daniel Borkmann, John Fastabend, Tom Herbert, David Ahern und David Miller, alle wesentlichen Ebpf- und XDP-Faktoren.
Arbeit in der Progress-Dokumentation für XDP
BPF- und XDP -Referenzhandbuch - Leitfaden aus dem Cilium -Projekt.
XDP -Projektübersicht
Express Data Path (XDP) - Die erste Präsentation über XDP.
BOF - Was kann BPF für Sie tun?
Express -Datenpfad - enthält einige Benchmark -Ergebnisse, die mit dem MLX4 -Treiber erhalten wurden.
Jesper Dangaard Brouer hat mehrere Folien, die die Interna von XDP beschreiben:
- XDP - Expressdatenpfad, Intro und zukünftige Anwendungsfälle - Linux -Kernel -Kampf gegen DPDK. Zukünftige Pläne (zum Zeitpunkt dieser Schrift) für XDP und Vergleich mit DPDK.
- Netzwerkleistung Workshop - Zusätzliche Hinweise auf XDP -Interna und erwartete Evolution.
- XDP - Express Data Pfad, der für DDOS -Schutz verwendet wird - Details und Anwendungsfälle zu XDP, mit Benchmark -Ergebnissen und Code -Snippets für das Benchmarking sowie für den grundlegenden DDOS -Schutz mit EBPF/XDP (basierend auf einem IP -Blacklisting -Schema).
- Speicher vs. Networking-, Provoking- und Behebung von Speicher Engpässen - Erweiterte Details zu aktuellen Speicherproblemen der XDP -Entwickler.
- XDP für den Rest von uns - wie man mit EBPF und XDP für normale Menschen beginnt. Auch von Julia Evans in ihrem Blog zusammengefasst.
- XDP jetzt mit Redirect - Update auf XDP und insbesondere zu den Umleitungsaktionen.
XDP Workshop - Einführung, Erfahrung und zukünftige Entwicklung (Video)
Hochgeschwindigkeitspaketfilterung auf Linux - Über Paketfilterung auf Linux, DDOS -Schutz, Paketverarbeitung im Kernel, Kernel -Bypass, XDP und EBPF.
So lassen Sie 10 Millionen Pakete pro Sekunde fallen - der Blog -Beitrag von Cloudflare, in dem Sie über den Umzug in die Verwendung von XDP für die Paketfilterung sprechen.
AF_XDP
- AF_XDP - Kernel -Dokumentation in der AF_XDP -Adressfamilie.
- Schnelle Paketverarbeitung unter Linux mit AF_XDP
BPFilter
- Warum ersetzt die Kernel -Community Iptables durch BPF? - Ein Blog -Beitrag von Cilium über die Motivationen hinter EBPF und BPFilter mit ein paar Beispielen und Links zu anderen Projekten mit EBPF und BPFilter.
- BPFilter: Linux -Firewall mit EBPF -Sauce - Folien aus einem Vortrag von Quentin Monnet mit einem Hintergrund auf EBPF und dem Vergleich von BPFilter mit Iptables.
Btf
- BPF -Typ Format (BTF) - Kernel -Dokumentation zu BTF, in dem erklärt wird, wie es verwendet wird.
- Verbesserung des Linux -Kernels mit BTF -Typinformationen - Eine Beschreibung der mit BTF geleisteten Arbeit, um Debugging -Informationen für BPF -Programme bereitzustellen.
- Was ist BTF (BPF-Typ-Format)-Ein von Community-authored Newsletter, der mit nützlichen Code-Illustrationen und praktischen Beispielen bereichert ist.
CBPF
- Der BSD -Paketfilter: Eine neue Architektur für Paketerfassung auf Benutzerebene - das Originalpapier über (klassisches) BPF.
- Die FreeBSD -Handbuchseite über BPF
- Linux 'Paket MMAP (2), BPF und Netsniff-ng
- TC und CLS BPF: Leichte Paketklassifizierung mit BPF
- Einführung der BPF -Tools von CloudFlare - Verwendung von BPF -Bytecode mit dem
xt_bpf -Modul für Iptables. - Libpcap filtersyntax
Hardware -Ausladung
- EBPF/XDP -Hardware -Offload zu SmartNics - Hardware -Offload für EBPF mit TC oder XDP (Linux -Kernel 4.9+), eingeführt von Netronome.
- Umfassende XDP-Offload --- Umgang mit den Edge-Fällen-Ein Update zum obigen Thema.
- HBPF - EBPF in Hardware - Eine für FPGAs geschriebene EBPF -CPU.
- OpenCSD EBPF SSD OUTLADING - CORTATIONAL STOR -SIMULATION (QEMU) -Plattform mit Fuse LFS -Dateisystem für zonierte Namespaces NVME SSDs mit UBPF für die Berechnung von Kernel -Offloading in UserPace.
- DELILAH: EBPF -OFF -OFF -OFF -OFF -OFF -OFF -OFF -OFF -OFF -OFF -OFF -OFF -OFF -OFF -OFF -OFF -OFF -OFF -OFF -OFF -OFF -OFF -OFF -OFF -OFF -OFF -OFF -OFF -OFF -OFF -OFF -OFF -OFF -OFF -OFF -OFF -OFF -OFF -OFF -OFF -OFF -OFF -OB -OFF -OFF -OFF -OFF -OBLOAD) - DELILAH ist ein Computerspeicherprozessor (CSP) für EBPF -Offload auf Speichergeräte.
Tutorials
- BCC -Referenzhandbuch - Viele inkrementelle Schritte zur Verwendung von BCC und EBPF, hauptsächlich auf Verfolgung und Überwachung.
- BCC Python Developer Tutorial - ist mit BCC ausgestattet, zielt jedoch auf die Python -Teile auf siebzehn "Lektionen" ab.
- Erstellen von BPF-Anwendungen mit LIBBPF-Bootstrap-Hilft, minimale oder erweiterte Vorlagen zu generieren, um Ihre eigenen Anwendungen (Kernel-Seite und Benutzerraumverwaltung für Karten und Programme) mit Funktionen wie Co-Re, globalen Variablen und Ringpuffer zu starten.
- Wie ich am Ende OpenSnoop in reinem C unter Verwendung von EBPF geschrieben habe - ein gründlicher Durchgang über das Schreiben von EBPF -Programmen, zuerst nur mit BPF () -Syskall und anschließender Bibliothek mit reproduzierbaren Code Beispielen.
- Linux -Tracing -Workshops -Materialien - beinhaltet die Verwendung mehrerer BPF -Werkzeuge zur Verfolgung.
- Verfolgen Sie eine Paketreise mit Linux -TracePoints, Perf und EBPF - Fehlerbehebung bei Ping -Anfragen und Antworten mit Perf- und BCC -Programmen.
- Öffnen Sie die NFP -Plattform - Betrieb von Netronome: Einige Tutorials für netzwerkbezogene EBPF -Anwendungsfälle, einschließlich eines EBPF -OFFL -Starthandbuchs.
- XDP für den Rest von uns - Erste Ausgabe eines Workshops, um mit XDP zu beginnen.
- XDP für den Rest von uns - zweite Ausgabe, mit neuen Inhalten.
- Laden Sie XDP -Programme mit dem Befehl IP (IPROUTE2)
- XDP Praxis -on Tutorial - Ein progressives (drei Schwierigkeitsgrad) Tutorial zum Verarbeiten von Paketen mit XDP.
- Alle Ihre Verfolgung gehört zu BPF-eine Schritt-für-Schritt-Vorgehensweise, um die Tracing-Funktionen in Ihre C ++-Anwendungen in die LLVM-Bibliotheken zu integrieren.
- Firewalling mit BPF/XDP: Beispiele und Deep Dive - eine einfache Anleitung zum Erstellen von Basisfeuerwalls mit TC und XDP.
- Ein tiefes Eintauchen in EBPF: Schreiben einer effizienten DNS -Überwachung. - Eine detaillierte Erläuterung von Methoden zum Erfassen von DNS -Anforderungen an der Socket -Filterschicht.
- EBPF Developer Tutorial - EBPF Lernen Sie anhand von Beispielen - Beginnen Sie mit EBPF -Grundlagen und Fortschritte auf erweiterte Themen mit mehr als 20 praktischen Tutorials und Beispielen. Deckt Leistung, Vernetzung und Sicherheit mit libbPF und Co-RE. Erhältlich in Chinesisch und Englisch.
- Fangen Sie Performance-Regressionen in EBPF-eine Schritt-für-Schritt-Anleitung zum Benchmarking sowohl des Client- als auch dem Kernel EBPF-Code in Rost.
- Loops und Iteratoren in EBPF - Newsletter über alle Möglichkeiten zum Schleifen und Iterieren in EBPF.
- Welche Erkenntnisse können EBPF in Echtzeit-SSL/TLS-verschlüsselte Verkehr und wie? -Eine Schritt-für-Schritt-Anleitung, wie EBPF verschlüsselten Netzwerkverkehr beobachten kann.
- Kann EBPF Redis -Nachrichtenmuster erkennen, bevor sie zu Problemen werden? -Eine Schritt-für-Schritt-Anleitung, wie EBPF die Redis-Kommunikation zwischen Client und Server beobachten kann.
- Transparente Proxy-Implementierung mit EBPF und Go-Eine Schritt-für-Schritt-Anleitung zum Implementieren eines transparenten Proxy mit EBPF.
- EBPF-Lastausgleich-Erfahren Sie, wie EBPF über die Option SO_RUSEport TCP ein benutzerdefiniertes Lastausgleich für Dienste abschließen kann.
- EBPF -Programme für Unit -Tests - Erfahren Sie, wie Sie Ihre EBPF -Programme mit LIBBPF testen können.
- Beschleunigung der lokalen Socket -Kommunikation mit EBPF - Erfahren Sie, wie EBPF die lokale Socket -Kommunikation auf 30%beschleunigen kann.
Beispiele
- Linux/Proben/BPF/ - Im Kernelbaum: Einige Beispiele für EBPF -Programme.
- Linux/Tools/Testen/Selbsttests/BPF - Im Kernelbaum: Linux BPF -Selbsttests mit vielen EBPF -Programmen.
- Prototyp-Kernel/Kernel/Proben/BPF-Das Prototyp-Kernel-Repository von Jesper Dangaarder Brouer enthält einige zusätzliche Beispiele, die außerhalb der Kernelinfrastruktur zusammengestellt werden können.
- IPROUTE2/Beispiele/BPF/ - Einige Netzwerkprogramme, die an die TC -Schnittstelle angehängt werden können.
- NETRONOME -Beispiel für Netzwerkanwendungen - Bietet grundlegende, aber vollständige Beispiele für EBPF -Anwendungen, die auch mit Hardware -Offload kompatibel sind.
- BCC/Beispiele - Beispiele mit den BCC -Werkzeugen, hauptsächlich über die Verfolgung.
- BCC/Tools - Diese Tools selbst können als beispielsweise Anwendungsfälle für BPF -Programme angesehen werden, hauptsächlich zur Verfolgung und Überwachung. BCC -Tools wurden für einige Linux -Verteilungen verpackt.
- MPLSINIP -Probe - Eine stark kommentierte Probe, die zeigt, wie MPLs in IP einkapseln und dekapuliert werden. Der Code wird für diejenigen kommentiert, die neu in der BPF -Entwicklung sind.
- EBPF -Samples - Eine Sammlung kompilierter (als ELF -Objektdateien), die aus mehreren Projekten gesammelt wurden und in erster Linie als Testfälle für Benutzerräume dienen sollen.
- EBPF-KILL-Exampe-Ein vollständig dokumentiertes und getestetes Beispiel einer EBPF-Sonde, die alle Kraftkills protokolliert und sie im Benutzerraum ausdruckt.
- RedbPF -Beispiele - Beispielprogramme für die Verwendung von RedBPF zum Schreiben von EBPF -Programmen in Rust.
- XDP/TC-EBPF-Beispiel-Programm, das XDP/TC-EBPF verwendet, um eine staatliche Firewalling und Socket-Umleitung bereitzustellen.
EBPF -Workflow: Tools und Dienstprogramme
BCC
- BCC - Framework und Tools - Eine Möglichkeit, BPF -Programme zu verarbeiten, insbesondere für die Verfolgung und Überwachung. Enthält auch einige Versorgungsunternehmen, die dazu beitragen können, Karten oder Programme im System zu inspizieren.
- Lua Front -End für BCC - eine weitere Alternative zu C und sogar zu den meisten in BCC verwendeten Python -Code.
IPROUTE2
- IPROUTE2 - Paket mit Tools für die Netzwerkverwaltung unter Linux. Insbesondere enthält es
tc , das zur Verwaltung von EBPF -Filtern und -aktionen sowie ip verwendet wird, um XDP -Programme zu verwalten. Der größte Teil des Codes im Zusammenhang mit BPF ist in lib/bpf.c. - IPROUTE2-NEXT-Der Entwicklungsbaum, synchronisiert mit Net-Next.
Llvm
libbpf
- LIBBPF - Wechselstrombibliothek zum Umgang mit BPF -Objekten (Programmen und Karten) und zum Manipulieren von Elf -Objektdateien, die sie enthalten. Es wird mit dem Kernel versendet und auf Github gespiegelt.
- libbPf-Bootstrap-Gerüst für die BPF-Anwendungsentwicklung mit LIBBPF und BPF Co-RE.
Gehen Sie Bibliotheken
- Cilium/EBPF - Pure -Go -Bibliothek zum Lesen, Ändern und Laden von EBPF -Programmen und an verschiedenen Haken im Linux -Kernel.
- libbpfgo - EBPF -Bibliothek für Go, betrieben von libbpf.
- GOBPF - GO -Bindungen für BCC zum Erstellen von EBPF -Programmen.
Aya
- AYA - Eine reine Rostbibliothek zum Schreiben, Laden und Verwalten von EBPF -Objekten mit Schwerpunkt auf Entwicklererfahrungen und -betriebsfähigkeit. Es unterstützt das Schreiben von EBPF -Programmen in Rust und vertreibt Bibliothekscode über crate.io, um es zwischen EBPF -Programmen zu teilen. Aya hängt nicht von libbpf ab.
- AYA -Template - Vorlagen zum Schreiben von BPF -Anwendungen in AYA, die mit
cargo generate verwendet werden können. - EBPFGuard - Rust Library zum Schreiben von Linux -Sicherheitsrichtlinien mit EBPF.
ZBPF
- ZBPF - Ein reines Zig -Framework zum Schreiben von Cross -Plattform -EBPF -Programmen, die von Libbbf und Zig Toolchain betrieben werden.
Eunomia-BPF
- Eunomia-BPF-Ein Kompilierungsrahmen und eine Laufzeitbibliothek zum Erstellen, Verteilern, Dynamikladungen und Ausführen von Co-RE-EBPF-Anwendungen in mehreren Sprachen und WebAssembly. Es unterstützt das Schreiben von EBPF-Kernel-Code nur (um einfache Co-Re-libbpf-Anwendungen zu erstellen), das Schreiben des Kernel-Teils sowohl in BCC- als auch in Libbpf-Stilen und das Schreiben von Benutzerspace in mehreren Sprachen in einem WASM-Modul und Verteilung mit einfachen JSON-Daten oder WASM-OCI-Bildern. Die Laufzeit basiert nur auf LIBBPF und bietet CO-RE für EBPF-Programme im BCC-Stil, ohne von der LLVM-Bibliothek abhängig zu sein.
Oxidebpf
- OXIDEBPF - Eine reine Rostbibliothek für die Verwaltung von EBPF -Programmen, die für Sicherheitsanwendungsfälle ausgelegt sind. Der FeatureSet ist begrenzter als andere Bibliotheken, betont jedoch die Stabilität in einer Vielzahl von Kernel und rückwärtskompatiblen Kompilieren-Once-Run-Places.
Bpftool und andere Werkzeuge aus dem Kernelbaum
Benutzerraum EBPF
- UBPF - geschrieben in C. enthält einen Dolmetscher, einen JIT -Compiler für x86_64 Architektur, einen Assembler und einen Disassembler.
- Eine generische Implementierung - mit Unterstützung für FreeBSD -Kernel, FreeBSD -Benutzerraum, Linux -Kernel, Linux -Benutzerraum und MacOS -Benutzerraum. Wird für das BPF -Erweiterungsmodul des Vale Software Switch verwendet.
- RBPF - in Rost geschrieben. Interpreter für Linux, MacOS und Windows sowie JIT-Compiler für x86_64 unter Linux.
- Prevail - Ein Benutzerraum für EBPF unter Verwendung einer abstrakten Interpretationsschicht mit Unterstützung für Schleifen.
- Oster - geschrieben in Go. Ein Tool zur Verfolgung der Ausführung von GO -Programmen, indem EBPF an Vorroben angeschlossen wird.
- Wachy - Ein Verfolgungsprofiler, der das Debugging von EBPF -Basis erleichtert. Dies geschieht durch Anzeigen von Spuren in einer Benutzeroberfläche neben dem Quellcode und der Ermöglichung einer interaktiven Drilldown -Analyse.
EBPF auf anderen Plattformen
- EBPF für Windows-Dieses Projekt ist eine Arbeit, mit der vorhandene EBPF-Toolchains und APIs, die im Linux-Ökosystem bekannt sind, über Windows verwendet werden.
Tests in virtuellen Umgebungen
- Ein Vagrant -Setup - So problemlos XDP testen. Weniger nützlich, da generisches XDP (fahrerunabhängig, hauptsächlich zum Testen) existiert.
- BCC in einem Docker -Container
Projekte im Zusammenhang mit EBPF
Networking
P4 hat einige Interaktionen mit EBPF:
- P4 am Rand - P4 mit EBPF, um programmierbare Hochleistungsschalter zu erstellen.
- OVS Orbit -Episode (#11), P4 am Rande - bezogen auf den früheren Gegenstand. Audio -Interview von John Fastabend von Ben Pfaff, einem der Kernbetreuer von Open vswitch.
- P4, EBPF und Linux TC Offload - P4 mit einigen Elementen im Zusammenhang mit der EBPF -Hardware -Offload in der NFP -Architektur (Network Flow Processor) von Netronome.
- Alte Dokumentation zur P4 -Verwendung mit EBPF - vom BCC -Repository; durch das unten verlinkte P4_16 -Backend veraltet.
- P4_16 Backend für EBPF
Das Cilium Project (Github Repository) ist eine Technologie, die sich auf BPF und XDP stützt, um "schnelle In-Kernel-Netzwerk- und Sicherheitsrichtlinien durchzusetzen für Container basierend auf EBPF-Programmen, die im laufenden Fliegen generiert werden". Viele verfügbare Präsentationen (mit Überlappung):
- Cilium: Networking & Sicherheit für Container mit BPF & XDP - auch einen Lastausgleichs -Anwendungsfall enthält
- Cilium: Netzwerk & Sicherheit für Container mit BPF & XDP - Video
- Cilium: Schnelles IPv6 -Container -Netzwerk mit BPF und XDP
- Cilium: BPF & XDP für Behälter
- OVS Orbit -Episode (#4) - Interview von Thomas Graf von Ben Pfaff.
- Eine generische Einführung in Cilium
- Ein Podcast -Interview mit Thomas Graf - Ivan Pepelnjak, der Thomas, Oktober 2016, über EBPF, P4, XDP und Cilium interviewt.
Open VSWITCH (OVS) und sein zugehöriges Projekt Open Virtual Network (OVN, eine Open -Source -Netzwerkvirtualisierungslösung) erwägen die Verwendung von EBPF auf verschiedenen Ebenen:
- OVS -Durchflussverarbeitung mit EBPF abladen
- Kopplung der Flexibilität von OVN mit der Effizienz von Iovisor
KATRAN-Ein auf XDP basierender Layer 4-Load-Balancer, Open-Sourcing von Facebook.
XDP in der Praxis: Integration von XDP in unsere DDOS -Minderungspipeline - Schutz gegen DDOs mit XDP bei CloudFlare.
Tröpfchen: DDOS -Gegenmaßnahmen von BPF + XDP - Schutz gegen DDOs mit XDP bei Facebook.
DPDK hat einen Poll-Mode-Treiber (PMD) basierend auf AF_XDP
CETH für XDP - Common Ethernet -Treiber -Framework für schnellere Netzwerk -I/O, eine von Mellanox initiierte Technologie.
Suricata, ein Open -Source -Intrusion Detection -System, basiert auf EBPF -Komponenten für seine Funktionen "Capture Bypass":
- Abschnitt "EBPF und XDP" der Suricata -Dokumentation
- Septun -mark -II - Extreme Performance Tuning Guide - Mark II.
- Ein Blog -Beitrag, in dem die Funktion eingeführt wird
- Die Abenteuer eines Surikates im EBPF -Land
- EBPF und XDP aus den Augen eines Erdmänges gesehen
Project Calico - Calico ist eine Open -Source -Netzwerk- und Netzwerksicherheitslösung für Container, virtuelle Maschinen und native Host -basierte Workloads. Die EBPF -Datenebene von Calico liefert eine Datenebene mit hoher Latenzdaten mit hohem Durchsatz mit einem reichhaltigen Netzwerk -Sicherheitsrichtlinienmodell.
- Aktivierung der EBPF -Datenebene mit Calico
Merbridge - Verwenden Sie EBPF, um Ihr Service -Netz zu beschleunigen. Merbridge ersetzt iptables Regeln durch EBPF, um den Verkehr abzufangen. Es kombiniert auch msg_redirect, um die Latenz mit einem verkürzten Datenapathen zwischen SIDECARS und Diensten zu verringern.
PCAPPLUSPLUS - Eine Open -Source -C ++ - Bibliothek zum Erfassen, Parsen und Herstellen von Netzwerkpaketen. Es verfügt über eine C ++ - Schnittstelle zum Erstellen von AF_XDP -Steckdosen, sodass sie einfach über sie gesendet und empfangen können.
Beobachtbarkeit
- INKEV: In-Kernel-verteilte Netzwerkvirtualisierung für DCN
- Deep-mon-hilft bei der Messung des Stromverbrauchs für Server und verwendet EBPF-Programme für die In-Kernel-Aggregation von Daten.
- Pixie - Beobachtbarkeit für Kubernetes mit EBPF. Zu den Funktionen gehören Protokollverfolgung, Anwendungsprofilerstellung und Unterstützung für verteilte BPFTrace -Bereitstellungen.
- Skywalking Rover-Apache Skywalking ist eine APM-Plattform (Open-Source Application Performance Monitoring), die speziell für verteilte Systeme mit Microservices, Cloud-nativen und containerbasierten Architekturen (Kubernetes) entwickelt wurde. Skywalking Rover ist ein EBPF-basierter Profiler- und Messkollektor für C-, C ++, Golang und Rostanwendungen.
- Parca-Agent-EBPF-Basis für immer kontinuierliche Profiler zur Analyse der CPU und der Speicherverwendung, bis zur Liniennummer und im Laufe der Zeit.
- RBPERF - Probenahmeprofiler und Tracer für Ruby.
- Hubble - Netzwerk-, Service- und Sicherheitsbeobachtbarkeit für Kubernetes mit EBPF.
- CARETTA - Instant Kubernetes Service -Abhängigkeitskarte, die von EBPF generiert wurde, Recht auf eine Grafana -Instanz.
- Deepflow - Sofortige Beobachtbarkeit für Cloud -native und KI -Anwendungen basierend auf EBPF.
Sicherheit
- FALCO - Ein Cloud -natives Laufzeit -Sicherheitsprojekt, das als Kubernetes -Bedrohungserkennungsmaschine verwendet wird.
- Sysmon für Linux - Ein Sicherheitsüberwachungstool. Es hängt von SysinternalseBPF ab.
- Red Canary Linux Agent - Red Canary hat begonnen, EBPF in den Linux -Sicherheitssensor einzubeziehen.
- Tracee - Ein Tool zur Laufzeitsicherheit und Forensik für Linux, das die EBPF -Technologie zur Laufzeit verfolgt und gesammelte Ereignisse analysiert, um verdächtige Verhaltensmuster zu erkennen.
- Redcanary-EBPF-Sensor-Eine Reihe von BPF-Programmen, die Sicherheitsrelevante Ereignisdaten aus dem Linux-Kernel sammeln. Die BPF -Programme werden zu einer einzelnen ELF -Datei kombiniert, aus der einzelne Sonden abhängig vom laufenden Betriebssystem und der Kernelversion selektiv geladen werden können.
- BPFlock - Lock Linux -Maschinen - Ein EBPF -Sicherheitstool zum Verschließen und Auditing von Linux -Maschinen.
- Tetragon-Kubernetes-bewusstes, EBPF-basierter Sicherheitsbeobachtbarkeit und Durchsetzung von Laufzeit.
- Harpoon - Verfolgung von Syscalls aus Benutzer -Raum -Funktionen mit EBPF.
Werkzeuge
- PLY - Ein kleiner, aber flexibler dynamischer Tracer für Linux mit den BCC -Tools, jedoch mit einer einfacheren Sprache, die von AWK und DTRACE inspiriert ist.
- BPFTRACE - Ein Werkzeug zur Verfolgung mit einer eigenen hochrangigen Verfolgung. Es ist flexibel genug, sich als Linux -Ersatz für Dtrace und SystemTap vorzustellen.
- BPFTRACE Cheat Sheet - Zusammenfassung und Cheat Sheet für die Programmierung in BPFTRACE. Enthält Informationen zu Syntax, Sondentypen, Variablen und Funktionen.
- Kubectl Trace - Ein Kubectl -Plug -In zur Ausführung von BPFTrace -Programmen in einem Kubernetes -Cluster.
- Inspirektor-Gadget-Eine Sammlung von EBPF-basierten Tools zum Debuggen und Inspizieren von Kubernetes-Ressourcen und -Anwendungen.
- BPFD - Framework zum Ausführen von BPF -Programmen mit Regeln unter Linux als Daemon. Container bewusst.
- BPFD - Ein eigenständiger BPF -Daemon, der versucht, die Flexibilität der BCC -Tools zu nutzen, um Remote -Ziele zu verfolgen und zu debuggen, und insbesondere Geräte mit Android.
- ADEB - Eine Linux -Shell -Umgebung zur Verwendung von Tracing -Tools auf Android mit BPFD.
- Greggd - System -Daemon zum Kompilieren und Laden von EBPF -Programmen in den Kernel und die Ausgabe des Programms für die metrische Aggregation in die Socket.
- FUSE - Nachdenkt der Verwendung von EBPF.
- UPF-BPF-Eine In-Kernel-Lösung basierend auf XDP für 5G UPF.
- RedbPF - Werkzeug und Framework zum effizienten Schreiben von EBPF -Code in Rost.
- EBPF -Explorer - Eine Weboberfläche zur Erforschung der Karten und Programme des Systems.
- EBPFMON - Eine TUI -Anwendung (Terminal User Interface) zur Echtzeitüberwachung von EBPF -Programmen.
- BPFMAN - Ein EBPF -Manager für Linux und Kubernetes. Enthält einen integrierten Programmlader, der die Programmzusammenarbeit für XDP- und TC-Programme unterstützt, sowie die Bereitstellung von EBPF-Programmen aus OCI-Bildern.
- PTCPDUMP-Ein prozessbewusstes, EBPF-basiertes TCPDump-ähnliches Tool.
EBPF in Sicherheit
- Umarme The Red: Offensive BPF! - Eine Reihe von Beiträgen rund um die Einführung in BPF mit einem Schwerpunkt auf einer offensiven Umgebung und wie sein Missbrauch erkannt werden kann. Beiträge enthalten Diskussionen über die RootKit -Funktionen von EBPF oder auf welchen Tracing -Typ für verschiedene Anwendungsfälle benötigt wird.
- EBPF: Block Linux Fileless Nutzlast "Malware" mit BPF LSM - Blog -Beitrag darüber, wie BPF die Erkennung und Blockierung von fillosen Malware helfen kann.
- Blackhat 2021: Mit Freunden wie EBPF, wer braucht Feinde? - Sprechen Sie über ein EBPF Rootkit und darüber, wie die Fähigkeiten von EBPF missbraucht werden könnten. Der Rootkit war auch Gegenstand eines Vortrags bei Defcon, EBPF, ich dachte, wir wären Freunde!
- EBPFKIT - Ein Rootkit, das mehrere EBPF -Funktionen nutzt, um offensive Sicherheitstechniken zu implementieren.
- EBPFKit -Monitor - Ein Dienstprogramm zur stenten Analyse von EBPF -Bytecode oder Überwachung verdächtiger EBPF -Aktivität zur Laufzeit. Es wurde speziell entwickelt, um EBPFKit zu erkennen.
- Bad BPF - Eine Sammlung böswilliger EBPF -Programme, die die Fähigkeit von EBPF verwenden, Benutzerdaten zwischen dem Usmode -Programm und dem Kernel zu lesen und zu schreiben.
- Triplecross - Ein Linux EBPF Rootkit mit Backdoor, C2, Bibliotheksinjektion, Ausführungsentführungen, Persistenz- und Stealth -Fähigkeiten.
Der Code
linux/include/linux/bpf.h - mit Linux/include/uapi/bpf.h: Definitionen mit EBPF, die jeweils im Kernel verwendet werden sollen, und um mit UserSpace -Programmen Schnittstelle zu bringen.
Linux/include/linux/filter.h - mit Linux/include/uapi/filter.h: Informationen, mit denen die BPF -Programme selbst ausgeführt wurden.
Linux/Kernel/BPF/ - Dieses Verzeichnis enthält den größten Teil des BPF -bezogenen Code. Insbesondere sind diese Dateien Interesse:
-
syscall.c - Unterschiedliche Vorgänge, die durch den Systemaufruf zulässig sind, wie z. B. Programmladen oder Kartenverwaltung. -
core.c - BPF -Interpreter. -
verifier.c - BPF Verifier.
Linux/net/core/filter.c - Funktionen und EBPF -Helfer im Zusammenhang mit der Netzwerk (TC, XDP usw.); Enthält auch den Code, um CBPF -Bytecode in EBPF zu migrieren (alle CBPF -Programme werden in jüngsten Kerneln in EBPF übersetzt).
Linux/Kernel/Trace/BPF_TRACE.C - Funktionen und EBPF -Helfer im Zusammenhang mit der Verfolgung und Überwachung (KPROBES, TracePoints usw.).
Die JIT -Compiler stehen unter dem Verzeichnis ihrer jeweiligen Architekturen, wie z. Die Ausnahme wird für JIT -Compiler ausgelegt, die für Hardware -Offload verwendet werden und in ihren Treibern sitzen, z.
Linux/net/afer/ - und insbesondere in Dateien act_bpf.c (Aktion) und cls_bpf.c (Filter): Code in Bezug auf BPF -Aktionen und Filter mit TC.
Linux/Kernel/Seccomp.C
linux/net/core/dev.c - enthält die Funktion dev_change_xdp_fd() , die über einen NetLink -Befehl aufgerufen wird, um ein XDP -Programm an ein Gerät anzuschließen, danach wurde aus dem Benutzerraum in den Kernel geladen. In dieser Funktion wird der zuständige Treiber abzüglich ein Rückruf verwendet.
Entwicklung und Gemeinschaft
- Der BPF -Next -Baum - BPF -Patches landen in diesem Baum. Es wird regelmäßig in das Net-Next zusammengefasst, das selbst für jede Freisetzung mit Linus 'Baum verschmolzen wird.
- Kernel -Dokumentation - Über Beiträge zu BPF.
- Die NetDev Mailing -Liste - Mailingliste für Linux -Kernel -Networking -Stapelentwicklung. Alle Patches werden dort zur Überprüfung und Aufnahme gesendet.
- XDP -Newbies - Eine Mailingliste, die speziell für die XDP -Programmierung gewidmet ist (sowohl für die Architektur als auch für die Bitten um Hilfe).
- IO Visor Mailingliste - BPF steht im Mittelpunkt des Projekts und wird regelmäßig in der Mailingliste besprochen.
- @Iovisor Twitter -Konto
- Das XDP -Kollaborationsprojekt - ein Github -Repository mit Notizen und Ideen zu den zukünftigen Entwicklungen von XDP.
Andere Ressourcenlisten auf EBPF
- BCC -Dokumentation von IO Visor
- BPF-Docs-Repository von IO Visor
- Tauchen Sie in BPF ein: eine Liste von Lesematerialien
Anerkennung
Thank you to Quentin Monnet and Daniel Borkmann for their original work on Dive into BPF: A List of Reading Material which became the basis for this list.
Beitragen
Contributions welcome! Read the contribution guidelines first.
Lizenz
To the extent possible under law, zoidbergwill has waived all copyright and related or neighboring rights to this work.