Impresionante EBPF
Una lista curada de proyectos increíbles relacionados con EBPF.
BPF, como en Berkeley Packet Filter , es una máquina virtual en el kernel que ejecuta programas que se encuentran desde el espacio del usuario. Inicialmente implementado en BSD, luego Linux, la máquina (ahora Legacy) "Classic BPF" o CBPF se utilizaría con herramientas como TCPDUMP para filtrar paquetes en el núcleo para evitar copias inútiles al espacio de usuarios. Más recientemente, la infraestructura de BPF en Linux ha sido completamente reelaborada y dio vida al "BPF extendido", o EBPF, que obtuvo nuevas características (verificaciones de seguridad y terminación, compilación de programas, mapas persistentes, una biblioteca estándar, soporte de descarga de hardware, etc.) y ahora se usa para muchas tareas. Los paquetes de procesamiento de un nivel muy bajo (XDP), los eventos de rastreo y monitoreo en el sistema, o aplicar el control de acceso sobre los grupos C son solo algunos ejemplos a los que EBPF aporta rendimiento, programabilidad y flexibilidad.
Recientemente, Cilium lanzó un gran sitio web sobre EBPF llamado EBPF.io. Tiene un propósito similar a esta lista, con una introducción a EBPF y enlaces a proyectos relacionados.
Nota: EBPF es una pieza de tecnología emocionante, y su ecosistema evoluciona constantemente. Nos encantaría ayudar de usted para mantener esta increíble lista actualizada y mejorar su relación señal / ruido de todos modos, de todos modos podemos. No dude en dejar cualquier comentario.
Contenido
- Documentación de referencia
- Artículos y presentaciones
- Tutoriales
- Ejemplos
- Flujo de trabajo EBPF: herramientas y servicios públicos
- Proyectos relacionados con EBPF
- EBPF en seguridad
- El código
- Desarrollo y comunidad
- Otras listas de recursos en EBPF
- Reconocimiento
Documentación de referencia
EBPF Essentials
- EBPF.io: una puerta de entrada para descubrir todos los conceptos básicos de EBPF, incluida una lista de los principales proyectos relacionados y de los recursos comunitarios.
- Guía de referencia BPF y XDP de Cilium: documentación en profundidad sobre la mayoría de las características y aspectos de EBPF.
Documentación del núcleo
- Documentación de BPF: índice de documentación relacionada con BPF que viene con el núcleo de Linux.
- Linux/Documation/Networking/Filter.RST - Especificación EBPF (algo desactualizada; la información aún debe ser válida, pero no exhaustiva).
- Preguntas y respuestas de diseño de BPF: preguntas frecuentes sobre las decisiones detrás de la infraestructura de BPF.
- Cómo interactuar con el subsistema BPF: preguntas frecuentes sobre contribuir al desarrollo de EBPF.
Páginas manuales
-
bpf(2) - Página manual sobre la llamada del sistema bpf() , utilizado para administrar programas y mapas BPF desde UserSapace. -
tc-bpf(8) - Página manual sobre el uso de BPF con TC, incluidos comandos de ejemplo y muestras de código. -
bpf-helpers(7) Página del hombre-Descripción de las funciones auxiliares en el kernel que forman la biblioteca estándar BPF.
Otro
Especificación EBPF no oficial de IO Visor - Resumen de la sintaxis EBPF y los códigos de operación.
Documentación de Jesper Dangaard Brouer: trabajo en progreso, contribuciones bienvenidas.
Correos electrónicos de David Miller a la lista de correo XDP-Newbies:
- bpf.h y tu ...
- Contextualmente en hablar ...
- Descripción general del verificador de BPF
Lista de características de BPF por versión del núcleo
Artículos y presentaciones
Presentaciones y artículos genéricos de EBPF
Si es nuevo en EBPF, es posible que desee probar los enlaces descritos como "presentaciones" en esta sección.
Una breve introducción a XDP y EBPF: una introducción accesible que proporciona contexto, historia y detalles sobre el funcionamiento de EBPF.
Una descripción general de EBPF - Serie de blogs de Adrian Ratiu, que cubre muchos aspectos de la infraestructura EBPF:
- Parte 1: Introducción
- Parte 2: máquina y bytecode
Publicaciones de blog de Ferris Ellis sobre EBPF: tienen algunas publicaciones sobre EBPF:
- Parte 1: pasado, presente y futuro
- Parte 2: tipos de syscall y mapas
Una Guía de referencia de BPF: sobre ayudantes BPF C y BCC Python, del repositorio de BCC.
Hacer que la ruta de datos de redes del kernel sea programable con BPF y XDP, un conjunto de diapositivas que cubren todos los conceptos básicos sobre EBPF y XDP (principalmente para el procesamiento de redes).
El filtro de paquetes BSD: una introducción que cubre principalmente los aspectos del rastreo.
BPF: rastreo y más: una introducción que cubre principalmente los aspectos del rastreo.
Superpoderes de Linux BPF: una introducción que cubre principalmente los aspectos de rastreo, la primera parte con gráficos de llama.
IO Visor: también presenta el proyecto IO Visor.
BPF - Máquina virtual en el kernel - Presentación del autor de EBPF.
Extendiendo BPF extendido: una publicación de blog de 2014 sobre el desarrollo de BPF y demostrando lo que se puede hacer con él, utilizando un ejemplo de filtrado de socket con estado conectando un programa EBPF a un socket.
Greg Marsden hizo alguna documentación sobre EBPF:
- Un recorrido por los tipos de programas: una descripción de todos los ganchos existentes para los tipos de programas BPF y de su interés.
- Funciones de BPF Helper: una revisión de las funciones del núcleo que se pueden llamar desde los programas EBPF.
- Comunicación con UserSpace: cómo BPF se comunica con UserSpace - Maps BPF, Eventos PERF, BPF_TRACE_PRINTK.
- Creación de programas BPF: configurar su entorno para construir programas BPF.
- El ByTecode BPF y el verificador BPF: ¿cómo se asegura BPF que los programas sean seguros?
- Uso de BPF para hacer la transformación de paquetes: un uso de EBPF sobre la transformación de paquetes.
Observabilidad del núcleo de Linux a través de EBPF: una publicación de blog que cubre los conceptos básicos de EBPF, así como las muestras de código, continúan cómo construir y cargar un programa mínimo de EBPF en el núcleo.
EBPF: desde la perspectiva de un programador: un documento corto que describe los fundamentos de EBPF y cómo comenzar a escribir programas EBPF.
Publicaciones de blog de Cloudflare en EBPF: diferentes publicaciones de blog sobre casos de uso de redes y aspectos de bajo nivel de EBPF.
Linux Extended BPF (EBPF) Herramientas de rastreo: una recopilación en profundidad de información sobre ejemplos de herramientas de análisis de rendimiento utilizando EBPF. Contiene también una sección al final de la página sobre otros recursos.
Guía para principiantes para EBPF: un conjunto de charlas de codificación en vivo y los ejemplos de código que lo acompañan, que introduce la programación EBPF utilizando una variedad de bibliotecas y tipos de programas.
Bpf -internal
Daniel Borkmann ha hecho varias presentaciones y documentos que cubren las partes internas de EBPF, en particular sobre su uso con TC.
- Tutorial de EBPF y XDP y actualizaciones recientes (2017)
- Programabilidad avanzada y actualizaciones recientes con CLS_BPF de TC: detalles sobre EBPF, su uso para túneles y encapsulación, acceso directo a los paquetes y más.
- Actualizaciones de CLS_BPF/EBPF desde NetDev 1.1 - Parte de este taller TC.
- Al hacer que el clasificador TC sea totalmente programable con CLS_BPF - Introducción a EBPF, incluidas varias características (gestión de mapas, llamadas de cola, verificador). El papel completo también está disponible aquí.
- Linux TC y EBPF
Blog de visor IO
Linux Networking explicó - Linux Networking Internals, con una parte sobre EBPF.
Rastreo de núcleo
- El rastreo dinámico del sistema completo en Linux utilizando EBPF y BPFTRace: una introducción detallada al rastreo con EBPF, desde enumerar los puntos de trazas disponibles hasta ejecutar programas BPFTRACE.
- Encuentro con el rastreo de EBPF y el núcleo: Kprobes, uprobes, ftrace.
- Rastreo de núcleo de Linux: Systemtap, Kernelshark, Trace-CMD, LTTNG, PERF-Tool, FTrace, HISTROTGRE, PERF, Funcion Tracer, TracePoint, Kprobe/Uprobe y más.
- El blog de Brendan Gregg, y en particular el artículo de Linux BPF SuperPowers.
XDP
La ruta de datos Express: una introducción muy accesible a XDP, que proporciona un código de muestra para mostrar cómo procesar paquetes.
Todos los detalles de XDP en un documento técnico: la ruta de datos Express: procesamiento de paquetes programables rápidos en el núcleo del sistema operativo, por Toke Høiland-Jørgensen, Jesper Dangaard Brouer, Daniel Borkmann, John Fastabend, Tom Herbert, David Ahern y David Miller, todos los colaboradores esenciales de EBPF y XDP.
Documentación de trabajo en progreso para XDP
Guía de referencia BPF y XDP - Guía del proyecto Cilium.
Descripción general del proyecto XDP
Ruta de datos Express (XDP): la primera presentación sobre XDP.
BOF - ¿Qué puede hacer BPF por ti?
Ruta de datos Express: contiene algunos resultados de referencia obtenidos con el controlador MLX4.
Jesper Dangaard Brouer tiene varios juegos de diapositivas que describen las partes internas de XDP:
- XDP - Ruta de datos expresas, introducción y casos de uso futuros: la lucha del kernel de Linux contra DPDK. Planes futuros (a partir de este artículo) para XDP y comparación con DPDK.
- Taller de rendimiento de la red: sugerencias adicionales sobre las partes internas XDP y la evolución esperada.
- XDP - Ruta de datos expresos, utilizada para la protección DDoS - Detalles y casos de uso sobre XDP, con resultados de referencia y fragmentos de código para la evaluación comparativa, así como para la protección DDoS básica con EBPF/XDP (basado en un esquema de lista negra IP).
- Memoria versus redes, provocación y reparación de cuellos de botella de memoria: detalles avanzados sobre los problemas de memoria actuales que enfrentan los desarrolladores de XDP.
- XDP para el resto de nosotros: cómo comenzar con EBPF y XDP para humanos normales. También resumido por Julia Evans en su blog.
- XDP ahora con redirección: actualización en XDP, y en particular en las acciones de redirección.
Taller XDP - Introducción, experiencia y desarrollo futuro (video)
Filtrado de paquetes de alta velocidad en Linux: sobre el filtrado de paquetes en Linux, protección DDoS, procesamiento de paquetes en el núcleo, bypass del núcleo, XDP y EBPF.
Cómo soltar 10 millones de paquetes por segundo: la publicación de blog de Cloudflare hablando sobre su movimiento para usar XDP para el filtrado de paquetes.
AF_XDP
- AF_XDP - Documentación del kernel en la familia de direcciones AF_XDP.
- Procesamiento de paquetes rápidos en Linux con AF_XDP
bpfilter
- ¿Por qué la comunidad del núcleo está reemplazando iptables con BPF? - Una publicación de blog de Cilium sobre las motivaciones detrás de EBPF y BPFilter, con un par de ejemplos y enlaces a otros proyectos utilizando EBPF y BPFilter.
- BPFilter: Firewall de Linux con salsa EBPF: se desliza desde una charla de Quentin Monnet con antecedentes sobre EBPF y comparando BPFilter con iptables.
Btf
- Formato de tipo BPF (BTF) - Documentación del núcleo sobre BTF, explicando cómo usarlo.
- Mejora del kernel de Linux con información de tipo BTF: una descripción del trabajo realizado con BTF para proporcionar información de depuración para los programas BPF.
- ¿Qué es BTF (formato de tipo BPF)? Un boletín autorizado por la comunidad enriquecido con ilustraciones de código útiles y ejemplos prácticos.
CBPF
- El filtro de paquetes BSD: una nueva arquitectura para la captura de paquetes a nivel de usuario: el documento original sobre (clásico) BPF.
- La página del manual de FreeBSD sobre BPF
- Paquete de Linux 'MMAP (2), BPF y Netsniff-NG
- TC y CLS BPF: paquete liviano clasificando con BPF
- Presentación de las herramientas BPF de Cloudflare: uso de BPF bytecode con el módulo
xt_bpf para iptables. - Libpcap filtros sintaxis
Descarga de hardware
- Descarga de hardware EBPF/XDP para SmartNics - descarga de hardware para EBPF con TC o XDP (Linux Kernel 4.9+), introducido por NetRonome.
- Descarga completa de XDP --- Manejo de los casos de borde-una actualización sobre el tema anterior.
- HBPF - EBPF en hardware - una CPU EBPF escrita para FPGA.
- OpenCSD EBPF SSD Descarga - Plataforma de simulación de almacenamiento computacional (QEMU) con sistema de archivos FUSE LFS para espacios de nombres zonizados NVME SSDS utilizando UBPF para la descarga de kernel de cálculo, todo en el espacio de usuarios.
- Delilah: EBPF -Offload en el almacenamiento computacional: Delilah es un procesador de almacenamiento computacional (CSP) creado para la descarga EBPF a los dispositivos de almacenamiento.
Tutoriales
- Guía de referencia de BCC: muchos pasos incrementales para comenzar a usar BCC y EBPF, principalmente centrado en el rastreo y el monitoreo.
- BCC Python Developer Tutorial: viene con BCC, pero se dirige a los bits de Python en diecisiete "lecciones".
- Construyendo aplicaciones BPF con libbpf-bootstrap: ayuda a generar plantillas mínimas o avanzadas para arrancar sus propias aplicaciones (lado del kernel y gestión del espacio de usuarios para mapas y programas) con características como co-re, variables globales y búfer de anillo.
- Cómo terminé escribiendo OpenSnoop en Pure C usando EBPF, un recorrido exhaustivo de cómo escribir programas EBPF, primero usando solo bpf () syscall y luego biblioteca libbpf, con ejemplos de código reproducible.
- Materiales de talleres de rastreo de Linux: implica el uso de varias herramientas BPF para el rastreo.
- Rastreando un viaje de paquetes utilizando Linux TracePoints, PERF y EBPF - Solución de problemas de ping y respuestas con programas PERF y BCC.
- Open NFP Platform: operada por NetRonome: algunos tutoriales para casos de uso EBPF relacionados con la red, incluida una guía de inicio de descarga EBPF.
- XDP para el resto de nosotros - Primera edición de un taller para comenzar con XDP.
- XDP para el resto de nosotros - Segunda edición, con nuevos contenidos.
- Cargar programas XDP usando el comando IP (IProute2)
- Tutorial práctico de XDP: un tutorial progresivo (tres niveles de dificultad) para aprender a procesar paquetes con XDP.
- Todo su rastreo pertenece a BPF: un tutorial paso a paso para integrar las capacidades de rastreo en sus aplicaciones C ++ con las bibliotecas LLVM.
- Firewalling con BPF/XDP: ejemplos y buceo profundo: una guía simple para construir firewalls básicos con TC y XDP.
- Una inmersión profunda en EBPF: escribir un monitoreo de DNS eficiente. - Una explicación detallada de los métodos utilizados para capturar las solicitudes de DNS en la capa de filtro de socket.
- Tutorial de desarrolladores de EBPF - Aprenda EBPF por ejemplos: comience con los conceptos básicos de EBPF y el progreso a temas avanzados utilizando más de 20 tutoriales y ejemplos prácticos. Cubre el rendimiento, las redes y la seguridad con libbpf y co-re. Disponible en chino e inglés.
- Atrapa las regresiones de rendimiento en EBPF: una guía paso a paso para la evaluación comparativa del código EBPF del cliente y el núcleo escrito en Rust.
- Bucles e iteradores en EBPF - Boletín sobre todas las formas de recorrer e iterar en EBPF.
- ¿Qué ideas pueden proporcionar EBPF en el tráfico cifrado de SSL/TLS en tiempo real y cómo? -Una guía paso a paso de cómo EBPF puede observar el tráfico de red cifrado.
- ¿Puede EBPF detectar patrones de mensajes Redis antes de que se conviertan en problemas? -Una guía paso a paso de cómo EBPF puede observar la comunicación de Redis entre el cliente y el servidor.
- Implementación de proxy transparente utilizando EBPF y GO: una guía paso a paso sobre cómo implementar un proxy transparente usando EBPF.
- Balancio de carga con EBPF: aprenda cómo EBPF puede inferir el equilibrio de carga personalizado para los servicios que escuchan en el mismo puerto, a través de la opción SO_REUSEPORT TCP.
- PRUEBA UNIDAD DE LOS PROGRAMAS EBPF: aprenda cómo puede probar sus programas EBPF usando libbpf.
- Acelerar la comunicación de sockets local utilizando EBPF: aprenda cómo EBPF puede acelerar la comunicación de socket local hasta el 30%.
Ejemplos
- Linux/Muestras/BPF/ - En el árbol del núcleo: algunos programas EBPF de muestra.
- Linux/Herramientas/Testing/Selftests/BPF - En el árbol del núcleo: Linux BPF Selftests, con muchos programas EBPF.
- Prototype-kernel/kernel/samples/bpf-El repositorio de prototipo-kernel de Jesper Dangaard Brouer contiene algunos ejemplos adicionales que pueden compilarse fuera de la infraestructura del núcleo.
- IProute2/Ejemplos/BPF/ - Algunos programas de redes para adjuntar a la interfaz TC.
- Aplicaciones de red de muestras de Netronome: proporciona ejemplos básicos pero completos de aplicaciones EBPF también compatibles con la descarga de hardware.
- BCC/Ejemplos: ejemplos que vienen junto con las herramientas BCC, principalmente sobre el rastreo.
- BCC/Herramientas: estas herramientas en sí mismas pueden verse como casos de uso de ejemplo para programas BPF, principalmente para rastrear y monitorear. Las herramientas BCC han sido empaquetadas para algunas distribuciones de Linux.
- Muestra MPLSInip: una muestra muy comentada que demuestra cómo encapsular y decapsular MPLS dentro de IP. Se comenta el código para aquellos nuevos en el desarrollo de BPF.
- EBPF -Samples: una colección de muestras compiladas (como archivos de objetos ELF) recopiladas de varios proyectos, principalmente destinados a servir como casos de prueba para los verificadores de espacio de usuario.
- EBPF-Kill-Ejemplo: un ejemplo completamente documentado y probado de una sonda EBPF que registra todas las matas de fuerza e imprime en el espacio de usuario.
- Ejemplos REDBPF: programas de ejemplo para usar REDBPF para escribir programas EBPF en Rust.
- Ejemplo XDP/TC-EBPF: programa que utiliza XDP/TC-EBPF para proporcionar firewalling de estado y redirección de socket.
Flujo de trabajo EBPF: herramientas y servicios públicos
BCC
- BCC - Marco y conjunto de herramientas - Una forma de manejar los programas BPF, en particular para rastrear y monitorear. También incluye algunas utilidades que pueden ayudar a inspeccionar mapas o programas en el sistema.
- Lua front -end para BCC: otra alternativa a C, e incluso a la mayoría del código de Python utilizado en BCC.
iproute2
- IProute2: paquete que contiene herramientas para la administración de redes en Linux. En particular, contiene
tc , utilizado para administrar filtros e acciones EBPF, y ip , utilizados para administrar programas XDP. La mayor parte del código relacionado con BPF está en lib/bpf.c. - IProute2-Next: el árbol de desarrollo, sincronizado con Net-Next.
LLVM
libbpf
- LibBPF - Biblioteca de CA utilizada para manejar objetos BPF (programas y mapas) y manipular archivos de objetos ELF que los contienen. Se envía con el núcleo y se refleja en Github.
- LibBPF-Bootstrap-andamio para el desarrollo de aplicaciones BPF con LibBPF y BPF Co-RE.
Bibliotecas
- Cilium/EBPF: biblioteca de go puro para leer, modificar y cargar programas EBPF y adjuntarlos a varios ganchos en el núcleo de Linux.
- LibBPFGO - Biblioteca EBPF para GO, impulsada por LibBPF.
- GOBPF - Vaya Bindings para BCC para crear programas EBPF.
Aya
- AYA: una biblioteca de óxido puro para escribir, cargar y administrar objetos EBPF, con un enfoque en la experiencia y operabilidad del desarrollador. Admite escribir programas EBPF en Rust y distribuir el código de la biblioteca a través de Crates.io para compartirlo entre los programas EBPF. AYA no depende de LibBPF.
- AYA -Template: plantillas para escribir aplicaciones BPF en AYA que se pueden usar con
cargo generate . - EBPFGUARD - Biblioteca de Rust para escribir políticas de seguridad de Linux utilizando EBPF.
ZBPF
- ZBPF: un marco de zig puro para escribir programas EBPF de plataforma cruzada, impulsados por LibBPF y ZIG Toolchain.
eunomia-bpf
- Eunomia-BPF: un marco de compilación y una biblioteca de tiempo de ejecución para construir, distribuir, cargar dinámicamente y ejecutar aplicaciones CO-RE EBPF en múltiples idiomas y websembly. Admite escribir solo código EBPF (para construir aplicaciones EBPF de CO-RE SIMPF), escribir la parte del núcleo en Styles BCC y LibBPF, y escribir el espacio de usuario en múltiples idiomas en un módulo WASM y distribuirla con datos simples de JSON o imágenes WASM OCI. El tiempo de ejecución se basa solo en LibBPF y proporciona Co-RE a los programas EBPF de estilo BCC sin depender de la biblioteca LLVM.
óxido
- OxidebPF: una biblioteca de óxido puro para administrar programas EBPF, diseñados para casos de uso de seguridad. El conjunto de características es más limitado que otras bibliotecas, pero enfatiza la estabilidad en una amplia gama de núcleos y los lugares compilables compilables con la mayoría de los lugares.
bpftool y otras herramientas del árbol del núcleo
Espacio de usuario EBPF
- UBPF: escrito en C. contiene un intérprete, un compilador JIT para la arquitectura x86_64, un ensamblador y un desmontador.
- Una implementación genérica: con soporte para el kernel FreeBSD, el espacio de usuario de FreeBSD, el kernel de Linux, el espacio de usuario de Linux y el espacio de usuario de MacOS. Se utiliza para el módulo de extensión BPF de Vale Software Switch.
- RBPF - Escrito en Rust. Intérprete para Linux, MacOS y Windows, y JIT-Compiler para x86_64 en Linux.
- Prevalecer: un verificador de espacio de usuario para EBPF utilizando una capa de interpretación abstracta, con soporte para bucles.
- Oster - Escrito en Go. Una herramienta para rastrear los programas de ejecución de GO al conectar EBPF a UpRobes.
- Wachy: un perfilador de rastreo que tiene como objetivo hacer que la depuración basada en Uprobe EBPF sea más fácil de usar. Esto se realiza mostrando trazas en una interfaz de usuario junto al código fuente y permitiendo un análisis de desglose interactivo.
EBPF en otras plataformas
- EBPF para Windows: este proyecto es un trabajo en progreso que permite el uso de las cadenas de herramientas EBPF existentes y las API familiarizadas en el ecosistema de Linux que se utilizarán en la parte superior de Windows.
Prueba en entornos virtuales
- Una configuración vagabunda: para probar fácilmente XDP. Menos útil ahora que existe XDP genérico (independiente del conductor, principalmente para pruebas).
- BCC en un contenedor Docker
Proyectos relacionados con EBPF
Networking
P4 tiene algunas interacciones con EBPF:
- P4 en el borde - P4 con EBPF para crear interruptores programables de alto rendimiento.
- Episodio OVS Orbit (#11), llamado P4 en el borde, relacionado con el elemento anterior. Entrevista de audio de John Fastabend por Ben Pfaff, uno de los mantenedores principales de Open Vswitch.
- Descarga P4, EBPF y Linux TC - P4 con algunos elementos relacionados con la descarga de hardware EBPF en la arquitectura NFP (procesador de flujo de red de red) de NetRonome.
- Documentación anterior para el uso de P4 con EBPF - del repositorio BCC; Descargado por el backend P4_16 vinculado a continuación.
- P4_16 Backend para EBPF
Cilium Project (Repositorio de GitHub) es una tecnología que depende de BPF y XDP para proporcionar "redes de seguridad y redes de seguridad rápidas en el kernel. Muchas presentaciones disponibles (con superposición):
- Cilio: redes y seguridad para contenedores con BPF y XDP, que también presenta un caso de uso de equilibrio de carga
- Cilio: redes y seguridad para contenedores con BPF y XDP - Video
- Cilio: redes de contenedores IPv6 rápidos con BPF y XDP
- Cilio: BPF y XDP para contenedores
- Episodio OVS Orbit (#4) - Entrevista de Thomas Graf por Ben Pfaff.
- Una introducción genérica al cilio
- Un podcast que entrevista a Thomas Graf - Ivan Pepelnjak entrevistando a Thomas, octubre de 2016, en EBPF, P4, XDP y Cilium.
Open VSwitch (OVS) y su proyecto Open Virtual Network (OVN, una solución de virtualización de red de código abierto) están considerando usar EBPF en varios niveles:
- Descarga de procesamiento de flujo de OVS utilizando EBPF
- Acoplamiento de la flexibilidad de OVN con la eficiencia de iovisor
Katran: un balancer de carga de capa 4 basado en XDP, de código abierto por Facebook.
XDP en la práctica: Integración de XDP en nuestra tubería de mitigación DDOS - Protección contra DDoS con XDP en CloudFlare.
Gota: contramedidas de DDOS impulsadas por BPF + XDP - Protección contra DDoS con XDP en Facebook.
DPDK tiene un controlador de modo de votación (PMD) basado en AF_XDP
CETH para XDP - Marco de controlador de Ethernet común para E/S de red más rápida, una tecnología iniciada por Mellanox.
Suricata, un sistema de detección de intrusión de código abierto, se basa en los componentes EBPF para sus características de "bypass de captura":
- Sección "EBPF y XDP" de la documentación de Suricata
- Septun -Mark -II - Guía de ajuste de rendimiento extremo - Mark II.
- Una publicación de blog que presenta la función
- Las aventuras de un Suricate en la tierra EBPF
- EBPF y XDP visto desde los ojos de un sumar
Proyecto Calico: Calico es una solución de red y seguridad de red de código abierto para contenedores, máquinas virtuales y cargas de trabajo nativas basadas en host. El plano de datos EBPF de Calico ofrece un plano de datos de bajo rendimiento de latencia con un rico modelo de política de seguridad de red.
- Habilitar el plano de datos EBPF con Calico
Merbridge: use EBPF para acelerar su malla de servicio. Merbridge reemplaza las reglas iptables con EBPF para interceptar el tráfico. También combina MSG_REDIRECT para reducir la latencia con un data de datos acortado entre sidecars y servicios.
PCapplusplus: una biblioteca C ++ de código abierto para capturar, analizar y crear paquetes de red. Cuenta con una interfaz C ++ para crear enchufes AF_XDP, lo que facilita el envío y recibe paquetes a través de ellos.
Observabilidad
- Inkev: virtualización de red distribuida en el kernel para DCN
- Deep-Mon: ayuda a medir el consumo de energía para los servidores y utiliza programas EBPF para la agregación de datos en el kernel.
- Pixie - Observabilidad para Kubernetes usando EBPF. Las características incluyen el rastreo de protocolo, el perfil de aplicaciones y el soporte para implementaciones distribuidas de BPFTRACE.
- Skywalking Rover: Apache Skywalking es una plataforma de monitoreo de rendimiento de aplicaciones de código abierto (APM) especialmente diseñada para sistemas distribuidos con microservicios, nativas nativas y arquitecturas basadas en contenedores (Kubernetes). Skywalking Rover es un coleccionista de perfiladores y métricos basado en EBPF para aplicaciones C, C ++, Golang y Rust.
- Parca-Agent-EBPF basado en un perfilador continuo siempre encendido para el análisis de la CPU y el uso de la memoria, hasta el número de línea y el tiempo a lo largo del tiempo.
- RBPerf - Profilador de muestreo y trazador para Ruby.
- Hubble: observabilidad de red, servicio y seguridad para Kubernetes utilizando EBPF.
- Caretta - Mapa de dependencia del servicio de Kubernetes instantáneos generado por EBPF, derecho a una instancia de Grafana.
- Deepflow: observabilidad instantánea para aplicaciones nativas de nubes y IA basadas en EBPF.
Seguridad
- Falco: un proyecto de seguridad de tiempo de ejecución nativo de nube utilizado como motor de detección de amenazas de Kubernetes.
- Sysmon para Linux: una herramienta de monitoreo de seguridad. Depende de SysinternalSeBPF.
- Red Canary Linux Agent: Red Canary ha comenzado a incorporar EBPF a su sensor de seguridad de Linux.
- TRACEE: una herramienta de seguridad y seguridad forense de tiempo de ejecución para Linux que utiliza la tecnología EBPF para rastrear el sistema y las aplicaciones en tiempo de ejecución, y analizar eventos recopilados para detectar patrones de comportamiento sospechosos.
- RedCanary-EBPF-Sensor: un conjunto de programas BPF que recopilan datos de eventos relevantes de seguridad del núcleo de Linux. Los programas BPF se combinan en un solo archivo ELF desde el cual las sondas individuales se pueden cargar selectivamente, dependiendo del sistema operativo en ejecución y la versión del kernel.
- BPFLOCK - Máquinas Lock Linux - Una herramienta de seguridad impulsada por EBPF para bloquear y auditar las máquinas Linux.
- Tetragon: observabilidad de seguridad basada en Kubernetes, observabilidad de seguridad basada en EBPF y aplicación de tiempo de ejecución.
- Harpoon: traza syscalls de las funciones del espacio de usuario, utilizando EBPF.
Herramientas
- Capas: un trazador dinámico de código abierto pequeño pero flexible para Linux, con características similares a las herramientas BCC, pero con un lenguaje más simple inspirado en AWK y DTRACE.
- BPFTRACE: una herramienta para rastrear con su propio lenguaje de rastreo de alto nivel. Es lo suficientemente flexible como para imaginarse como un reemplazo de Linux para DTRACE y SystemTAP.
- Hoja de trucos de BPFTrace: resumen y hoja de trucos para programación en BPFTRACE. Contiene información sobre sintaxis, tipos de sondas, variables y funciones.
- Kubectl Trace: un complemento Kubectl para ejecutar programas BPFTrace en un clúster Kubernetes.
- Instpektor-Gadget: una colección de herramientas basadas en EBPF para depurar e inspeccionar los recursos y aplicaciones de Kubernetes.
- BPFD - Marco para ejecutar programas BPF con reglas sobre Linux como demonio. Contenedor consciente.
- BPFD: un demonio BPF distinto, que intenta aprovechar la flexibilidad de las herramientas BCC para rastrear y depurar objetivos remotos, y en particular los dispositivos que se ejecutan con Android.
- Adeb: un entorno de shell Linux para usar herramientas de rastreo en Android con BPFD.
- Greggd: demonio del sistema para compilar y cargar programas EBPF en el núcleo, y reenviar la salida del programa a Socket para la agregación métrica.
- Fusible: considera el uso de EBPF.
- UPF-BPF: una solución en el kernel basada en XDP para 5G UPF.
- REDBPF: herramientas y marco para escribir el código EBPF en óxido de manera eficiente.
- EBPF -Explorer: una interfaz web para explorar los mapas y programas del sistema.
- EBPFMON - Una aplicación TUI (interfaz de usuario terminal) para el monitoreo en tiempo real de los programas EBPF.
- BPFMAN: un administrador de EBPF para Linux y Kubernetes. Incluye un cargador de programas incorporado que admite la cooperación del programa para los programas XDP y TC, así como la implementación de programas EBPF de imágenes OCI.
- PTCPDUMP: una herramienta tipo TCPDUMP basada en EBPF, basada en EBPF.
EBPF en seguridad
- Abraza el rojo: BPF ofensivo! - Una serie de publicaciones alrededor de la introducción en BPF con un enfoque en un entorno ofensivo, y también cómo se puede detectar su mal uso. Las publicaciones incluyen discusiones sobre las capacidades de RootKit de EBPF, o en las cuales se necesita el tipo de rastreo para diferentes casos de uso.
- EBPF: BLOCK LINUX Ejecución de "malware" de carga fila Linux con BPF LSM - Publicación de blog sobre cómo BPF puede ayudar a detectar y bloquear el malware sin fila.
- Blackhat 2021: Con amigos como EBPF, ¿quién necesita enemigos? - Hable sobre un RootKit EBPF y cómo se podrían abusar de las capacidades de EBPF. El rootkit también fue el objeto de una charla en Defcon, EBPF, ¡pensé que éramos amigos!
- EBPFKIT: un RootKit que aprovecha múltiples características EBPF para implementar técnicas de seguridad ofensivas.
- EBPFKIT -Monitor: una utilidad para analizar estáticamente el bytecodo EBPF o monitorear la actividad sospechosa de EBPF en tiempo de ejecución. Fue diseñado específicamente para detectar EBPFKIT.
- Bad BPF: una colección de programas EBPF maliciosos que utilizan la capacidad de EBPF para leer y escribir datos de usuarios entre el programa USERMode y el kernel.
- Triplecross: un RootKit de Linux EBPF con una puerta trasera, C2, inyección de la biblioteca, secuestro de ejecución, persistencia y capacidades de sigilo.
El código
Linux/include/linux/bpf.h - con Linux/include/uapi/bpf.h: definiciones relacionadas con EBPF, que se utilizarán respectivamente en el kernel e para interactuar con los programas de espacio de usuarios.
Linux/include/linux/filter.h - con Linux/include/uapi/filter.h: información utilizada para ejecutar los programas BPF mismos.
Linux/Kernel/BPF/ - Este directorio contiene la mayor parte del código relacionado con BPF. En particular, esos archivos valen el interés:
-
syscall.c : diferentes operaciones permitidas por la llamada del sistema, como la carga del programa o la gestión de mapas. -
core.c - intérprete BPF. -
verifier.c - verificador BPF.
Linux/Net/Core/Filter.C - Funciones y ayudantes EBPF relacionados con la red (TC, XDP, etc.); También contiene el código para migrar el bytecodo CBPF al EBPF (todos los programas de CBPF se traducen a EBPF en los núcleos recientes).
Linux/Kernel/Trace/BPF_Trace.C - Funciones y ayudantes EBPF relacionados con el rastreo y el monitoreo (Kprobes, TracePoints, etc.).
Los compiladores JIT están bajo el directorio de sus respectivas arquitecturas, como el archivo Linux/Arch/x86/net/bpf_jit_comp.c para x86. Se realiza una excepción para los compiladores JIT utilizados para la descarga de hardware, sentados en sus controladores, como Linux/Drivers/Net/Ethernet/Netronome/NFP/BPF/JIT.C para NetRonome NFP.
Linux/net/sched/ - y en particular en los archivos act_bpf.c (acción) y cls_bpf.c (filtro): código relacionado con acciones y filtros BPF con TC.
Linux/kernel/seccomp.c
Linux/Net/Core/Dev.c - Contiene la función dev_change_xdp_fd() que se llama a través de un comando netlink para conectar un programa XDP a un dispositivo, después de que se ha cargado en el núcleo desde el espacio del usuario. Esta función en su vez usa una devolución de llamada del controlador relevante.
Desarrollo y comunidad
- El árbol BPF -Next - BPF los parches aterrizan en este árbol. Se fusiona regularmente en Net-Next, que se fusiona para cada lanzamiento al árbol de Linus.
- Documentación del núcleo: sobre contribuciones a BPF.
- La lista de correo de NetDev - Lista de correo para el desarrollo de la pila de redes del kernel de Linux. Todos los parches se envían allí para su revisión e inclusión.
- XDP -Newbies: una lista de correo especialmente dedicada a la programación XDP (tanto para arquitectura como para pedir ayuda).
- Lista de correo de visor IO: BPF está en el corazón del proyecto, y se discute regularmente en la lista de correo.
- @Iovisor cuenta de Twitter
- El Proyecto de Colaboración XDP: un repositorio de GitHub con notas e ideas sobre las evoluciones futuras de XDP.
Otras listas de recursos en EBPF
- Documentación BCC de IO Visor
- Repositorio de Docs BPF de IO Visor
- Sumergirse en BPF: una lista de material de lectura
Reconocimiento
Gracias a Quentin Monnet y Daniel Borkmann por su trabajo original en Dive into BPF: una lista de material de lectura que se convirtió en la base de esta lista.
Que contribuye
Contributions welcome! Read the contribution guidelines first.
Licencia
To the extent possible under law, zoidbergwill has waived all copyright and related or neighboring rights to this work.