EBPF incrível
Uma lista com curadoria de projetos incríveis relacionados ao EBPF.
O BPF, como no filtro de pacotes de Berkeley , é um programa de execução da máquina virtual no kernel passada do espaço do usuário. Inicialmente implementado no BSD, o Linux, a máquina (agora Legacy) "Classic BPF" ou CBPF seria usada com ferramentas como o TCPDUMP para filtrar pacotes no kernel para evitar cópias inúteis no espaço do usuário. Mais recentemente, a infraestrutura do BPF no Linux foi completamente reformulada e deu vida ao "BPF estendido", ou EBPF, que ganhou novos recursos (verificações de segurança e rescisão, compilação de jit para programas, mapas persistentes, um suporte de biblioteca padrão, suporte de descarga de hardware etc.) e agora é usado para muitas tarefas. Pacotes de processamento em um nível muito baixo (XDP), rastreamento e monitoramento de eventos no sistema ou aplicando o controle de acesso sobre os cgroups são apenas alguns exemplos aos quais o EBPF traz desempenho, programação e flexibilidade.
Recentemente, o Cílio lançou um ótimo site sobre o EBPF chamado EBPF.IO. Ele serve a um objetivo semelhante a esta lista, com uma introdução ao EBPF e vincula a projetos relacionados.
Nota: O EBPF é uma peça emocionante de tecnologia e seu ecossistema está em constante evolução. Adoraríamos a ajuda sua para manter essa lista incrível atualizada e melhorar sua relação sinal-ruído de qualquer maneira que pudermos. Por favor, sinta -se à vontade para deixar qualquer feedback.
Conteúdo
- Documentação de referência
- Artigos e apresentações
- Tutoriais
- Exemplos
- Fluxo de trabalho do EBPF: ferramentas e utilitários
- Projetos relacionados ao EBPF
- EBPF em segurança
- O código
- Desenvolvimento e comunidade
- Outras listas de recursos no EBPF
- Reconhecimento
Documentação de referência
EBPF Essentials
- EBPF.IO - Uma porta de entrada para descobrir todos os conceitos básicos do EBPF, incluindo uma listagem dos principais projetos relacionados e dos recursos da comunidade.
- Guia de referência BPF e XDP da CILIUM - documentação aprofundada sobre a maioria dos recursos e aspectos do EBPF.
Documentação do kernel
- Documentação do BPF - Índice para documentação relacionada ao BPF com o kernel Linux.
- Linux/Documentation/Networking/Filter.RST - Especificação EBPF (um pouco desatualizada; as informações ainda devem ser válidas, mas não exaustivas).
- Perguntas e respostas ao design do BPF - Perguntas frequentes sobre as decisões por trás da infraestrutura do BPF.
- Howto Interagir com o subsistema BPF - Perguntas frequentes sobre a contribuição para o desenvolvimento do EBPF.
Páginas manuais
-
bpf(2) - Página manual sobre a chamada do sistema bpf() , usada para gerenciar programas e mapas BPF do UsuáriosPace. -
tc-bpf(8) - Página manual sobre o uso do BPF com TC, incluindo comandos de exemplo e amostras de código. -
bpf-helpers(7) Página do homem-Descrição das funções auxiliares no kernel que formam a biblioteca padrão do BPF.
Outro
IO do EBPF não oficial da Visor - Resumo da sintaxe e operação EBPF.
Documentação de Jesper Dangaard Brouer - Trabalho em andamento, as contribuições são bem -vindas.
E-mails de David Miller para a lista de discussão do XDP-Newbies:
- bpf.h e você ...
- Contextualmente falando ...
- Visão geral do verificador BPF
Lista de recursos bpf por versão do kernel
Artigos e apresentações
Apresentações e artigos genéricos do EBPF
Se você é novo no EBPF, pode experimentar os links descritos como "introduções" nesta seção.
Uma breve introdução ao XDP e EBPF - uma introdução acessível que fornece contexto, histórico e detalhes sobre o funcionamento do EBPF.
Uma visão geral do EBPF - série de blogs de Adrian Ratiu, cobrindo muitos aspectos da infraestrutura do EBPF:
- Parte 1: Introdução
- Parte 2: Machine & ByteCode
Postagens de blog de Ferris Ellis sobre o EBPF - eles têm alguns posts sobre o EBPF:
- Parte 1: passado, presente e futuro
- Parte 2: Tipos de syscall e mapa
Um guia de referência BPF - Sobre os ajudantes de BPF C e BCC Python, do repositório BCC.
Tornando o caminho de dados de rede do kernel programável com BPF e XDP - um conjunto de slides que cobrem todos os princípios básicos sobre EBPF e XDP (principalmente para processamento de rede).
O filtro de pacote BSD - uma introdução que cobre principalmente os aspectos de rastreamento.
BPF: rastreamento e muito mais - uma introdução que cobre principalmente os aspectos de rastreamento.
Superpowers Linux BPF - Uma introdução que cobre principalmente os aspectos de rastreamento, primeira parte com gráficos de chama.
IO Visor - também apresenta o Projeto de Visor de IO.
BPF - Máquina Virtual In -Kernel - Apresentação pelo autor do EBPF.
Estendendo o BPF estendido - uma postagem no blog de 2014 sobre o desenvolvimento do BPF e demonstrando o que pode ser feito com ele, usando um exemplo de filtragem de soquete com estado, anexando um programa EBPF a um soquete.
Greg Marsden fez alguma documentação sobre o EBPF:
- Um passeio pelos tipos de programa - uma descrição de todos os ganchos existentes para tipos de programas BPF e de seu interesse.
- Funções Helper BPF - Uma revisão das funções do kernel que podem ser chamadas nos programas do EBPF.
- Comunicação com o UsuáriosPace - Como o BPF se comunica com o UsuáriosPace - BPF Maps, Perf Events, BPF_TRACE_PRINTK.
- Construindo programas BPF - Configurando seu ambiente para criar programas BPF.
- O bytecode BPF e o verificador BPF - como o BPF garante que os programas estejam seguros?
- Usando o BPF para fazer transformação de pacotes - um uso do EBPF sobre a transformação de pacotes.
Observabilidade do kernel do Linux através do EBPF - Uma postagem no blog que cobre o básico do EBPF, bem como amostras de código, como criar e carregar um programa mínimo de EBPF no kernel.
EBPF - Da perspectiva de um programador - um pequeno artigo que descreve os fundamentos do EBPF e como começar a escrever programas EBPF.
Postagens do blog do CloudFlare no EBPF - diferentes postagens de blog sobre casos de uso de rede e aspectos de baixo nível do EBPF.
Ferramentas de rastreamento BPF (EBPF) do Linux - uma coleção detalhada de informações sobre exemplos de ferramentas de análise de desempenho usando o EBPF. Contém também uma seção no final da página sobre outros recursos.
Guia para iniciantes para o EBPF - Um conjunto de palestras de codificação ao vivo e exemplos de código que o acompanham, introduzindo a programação do EBPF usando uma variedade de bibliotecas e tipos de programas.
BPF Internals
Daniel Borkmann fez várias apresentações e trabalhos cobrindo os internos da EBPF, em particular sobre seu uso com o TC.
- APRESECIMENTO DE EBPF E XDP E ATIVADORES RECUTIVAS (2017)
- Programabilidade avançada e atualizações recentes com o CLS_BPF do TC - Detalhes sobre o EBPF, seu uso para tunelamento e encapsulamento, acesso direto em pacotes e muito mais.
- CLS_BPF/EBPF Atualizações desde o NetDev 1.1 - parte deste workshop TC.
- Ao obter o classificador TC totalmente programável com CLS_BPF - Introdução ao EBPF, incluindo vários recursos (gerenciamento de mapas, chamadas de cauda, verificador). O papel completo também está disponível aqui.
- Linux TC e EBPF
IO Visor Blog
Linux Networking explicou - Linux Networking Internals, com uma parte sobre o EBPF.
Rastreamento do kernel
- O rastreamento dinâmico do sistema completo no Linux usando o EBPF e o BPFTRACE - Uma introdução detalhada ao rastreamento com o EBPF, da listando os pontos de rastreamento disponíveis até a execução de programas BPFTrace.
- Encontre -se entre EBPF e rastreamento do kernel - KProbes, Uprobes, Ftrace.
- Rastreamento do kernel Linux-Systemtap, kernelshark, Trace-CMD, LTTNG, perfis de perfis, Ftrace, Histntrace, Perf, Função Tracer, Tracepoint, KProbe/Uprobe e muito mais.
- O blog de Brendan Gregg e, em particular, o artigo do Linux BPF Superpowers.
XDP
O caminho de dados Express - uma introdução muito acessível ao XDP, fornecendo código de amostra para mostrar como processar pacotes.
Todos os detalhes do XDP em um documento técnico: o caminho de dados expresso: processamento rápido de pacotes programáveis no kernel do sistema operacional, por Toke Høiland-Jørgensen, Jesper Dangaard Brouer, Daniel Borkmann, John Fastabend, Tom Herbert, David Ahern e David Miller, todos os essenciais e essenciais e XDP.
Documentação de trabalho em andamento para XDP
Guia de referência BPF e XDP - Guia do Projeto Cílio.
Visão geral do projeto XDP
Express Data Path (XDP) - A primeira apresentação sobre XDP.
BOF - O que o BPF pode fazer por você?
Caminho de dados Express - contém alguns resultados de referência obtidos com o driver MLX4.
Jesper Dangaard Brouer tem vários conjuntos de slides que descrevem os internos do XDP:
- XDP - Express Data Path, Intro e Future Use -Cases - Luta do kernel Linux contra o DPDK. Planos futuros (até o momento da redação) para XDP e comparação com o DPDK.
- Workshop de desempenho de rede - dicas adicionais sobre o XDP e a evolução esperada.
- XDP - Express Data Path, usado para proteção DDoS - detalhes e casos de uso sobre XDP, com resultados de benchmark e trechos de código para benchmarking, bem como para proteção básica de DDoS com EBPF/XDP (com base em um esquema de lista negra IP).
- Memória vs. Redes, provocação e fixação de gargalos de memória - detalhes avançados sobre os problemas atuais de memória enfrentados pelos desenvolvedores do XDP.
- XDP para o resto de nós - como começar com o EBPF e o XDP para humanos normais. Também resumido por Julia Evans em seu blog.
- XDP agora com Redirect - Atualizar no XDP e, em particular, nas ações de redirecionamento.
Workshop XDP - Introdução, experiência e desenvolvimento futuro (vídeo)
Filtragem de pacotes de alta velocidade no Linux - sobre filtragem de pacotes no Linux, proteção DDoS, processamento de pacotes no kernel, desvio do kernel, XDP e EBPF.
Como lançar 10 milhões de pacotes por segundo - a postagem do blog da Cloudflare falando sobre sua mudança para usar o XDP para filtragem de pacotes.
Af_xdp
- AF_XDP - Documentação do kernel na família de endereços AF_XDP.
- Processamento rápido de pacotes no Linux com AF_XDP
bpfilter
- Por que a comunidade do kernel está substituindo os iptables pelo BPF? - Uma postagem no blog da Cilium sobre as motivações por trás do EBPF e BPFilter, com alguns exemplos e links para outros projetos usando o EBPF e o BPFilter.
- BPFilter: Linux Firewall com molho EBPF - desliza de uma palestra de Quentin Monnet com um fundo no EBPF e comparando o BPFilter com os iptables.
Btf
- Formato do tipo BPF (BTF) - Documentação do kernel sobre BTF, explicando como usá -lo.
- Aprimorando o kernel Linux com informações do tipo BTF - uma descrição do trabalho realizado com o BTF para fornecer informações de depuração para os programas BPF.
- O que é BTF (formato do tipo BPF)-Um boletim informativo com autoridade de comunidade enriquecido com ilustrações de código úteis e exemplos práticos.
CBPF
- O filtro de pacote BSD: uma nova arquitetura para captura de pacotes no nível do usuário - o papel original sobre o bpf (clássico).
- A página manual do FreeBSD sobre BPF
- Pacote linux 'mmap (2), bpf e netsniff-ng
- TC e CLS BPF: Classificação de pacotes leves com BPF
- Apresentando as ferramentas BPF do CloudFlare - Uso do BPF Bytecode com o módulo
xt_bpf para iptables. - Filtros libpcap Sintaxe
Descarga de hardware
- OFLOLHO DE HARDWARE DE EBPF/XDP para Smartnics - OffLoad de hardware para EBPF com TC ou XDP (Linux Kernel 4.9+), introduzido pelo Netronome.
- Offload do XDP abrangente-lidando com os casos de borda-uma atualização sobre o tópico acima.
- HBPF - EBPF em hardware - uma CPU EBPF escrita para FPGAs.
- OpenCSD EBPF SSD OfLOBLEGUENO - Plataforma de simulação de armazenamento computacional (QEMU) com o sistema de arquivos LFS FUSE para nomes zonados NVME SSDs usando o UBPF para o descarregamento do kernel de computação, tudo no espaço do usuário.
- Delilah: EBPF -Offload no armazenamento computacional - O Delilah é um processador de armazenamento computacional (CSP) criado para descarga de EBPF para dispositivos de armazenamento.
Tutoriais
- Guia de referência do BCC - Muitas etapas incrementais para começar a usar o BCC e o EBPF, principalmente centradas no rastreamento e monitoramento.
- O tutorial do BCC Python Developer - vem com o BCC, mas tem como alvo os bits Python em dezessete "lições".
- Construindo aplicativos BPF com LIBBPF-Bootstrap-Ajuda a gerar modelos mínimos ou avançados para inicializar seus próprios aplicativos (gerenciamento de espaço lateral e do usuário para mapas e programas) com recursos como co-re, variáveis globais e buffer de anel.
- Como acabei escrevendo o OpenNoop em P Pure C usando o EBPF - uma apresentação completa de como escrever programas EBPF, primeiro usando apenas bpf () syscall e depois biblioteca libbpf, com exemplos de código reproduzível.
- Oficinas de rastreamento do Linux Materiais - envolve o uso de várias ferramentas BPF para rastreamento.
- Rastrear uma jornada de pacotes usando o Linux Tracepoints, Perf e EBPF - Solução de problemas de solicitações de ping e respostas com programas Perf e BCC.
- Aberto da plataforma NFP - operada pelo Netronome: alguns tutoriais para casos de uso do EBPF relacionados à rede, incluindo um guia de partida de descarga do EBPF.
- XDP para o resto de nós - Primeira edição de um workshop para começar com o XDP.
- XDP para o resto de nós - segunda edição, com novo conteúdo.
- Carregar programas XDP usando o comando ip (iproute2)
- Tutorial prático do XDP - um tutorial progressivo (três níveis de dificuldade) para aprender a processar pacotes com XDP.
- Todo o seu rastreamento pertence ao BPF-um passo a passo passo a passo para integrar recursos de rastreamento em seus aplicativos C ++ com as bibliotecas LLVM.
- Firewalling com bpf/xdp: exemplos e mergulho profundo - um guia simples para construir firewalls básicos com TC e XDP.
- Um mergulho profundo no EBPF: escrevendo um monitoramento DNS eficiente. - Uma explicação detalhada dos métodos usados para capturar solicitações DNS na camada de filtro de soquete.
- Tutorial do desenvolvedor do EBPF - Aprenda EBPF por exemplos - Comece com o básico do EBPF e progride para tópicos avançados usando mais de 20 tutoriais e exemplos práticos. Abrange o desempenho, a rede e a segurança com LibBPF e Co-Re. Disponível em chinês e inglês.
- Pegue regressões de desempenho no EBPF-Um guia passo a passo para comparar o código do cliente e do kernel eBPF escrito em Rust.
- Loops e iteradores no EBPF - Newsletter sobre todas as maneiras de fazer loop e iterar no EBPF.
- Quais idéias o EBPF pode fornecer no tráfego criptografado SSL/TLS em tempo real e como? -Um guia passo a passo como o EBPF pode observar o tráfego de rede criptografado.
- O EBPF pode detectar padrões de mensagem Redis antes que eles se tornem problemas? -Um guia passo a passo como o EBPF pode observar a comunicação redis entre cliente e servidor.
- Implementação de proxy transparente usando o EBPF e GO-um guia passo a passo sobre como implementar um proxy transparente usando o EBPF.
- Balanceamento de carga movido a EBPF-Saiba como o EBPF pode inferir o balanceamento de carga personalizado para serviços que estão ouvindo a mesma porta, através da opção SO_REUSEPORT TCP.
- Programas de teste de unidade EBPF - Saiba como você pode testar seus programas EBPF usando libbpf.
- Acelerando a comunicação de soquete local usando o EBPF - Saiba como o EBPF pode acelerar a comunicação local do soquete até 30%.
Exemplos
- Linux/Amostras/BPF/ - Na árvore do kernel: alguns programas de EBPF de amostra.
- Linux/Tools/Testing/SelfTests/BPF - Na árvore do kernel: Linux BPF Selftests, com muitos programas EBPF.
- Prototype-Kernel/Kernel/Amostras/BPF-O repositório protótipo-kernel de Jesper Dangaard Brouer contém alguns exemplos adicionais que podem ser compilados fora da infraestrutura do kernel.
- iproute2/exemplos/bpf/ - Alguns programas de rede a serem anexados à interface TC.
- Aplicações de rede de amostra do Netronome - fornece exemplos básicos, mas completos de aplicativos EBPF, também compatíveis com descarga de hardware.
- BCC/Exemplos - Exemplos vindo junto com as ferramentas do BCC, principalmente sobre o rastreamento.
- BCC/Ferramentas - Essas próprias ferramentas podem ser vistas como exemplos de casos de uso para programas BPF, principalmente para rastreamento e monitoramento. As ferramentas do BCC foram embaladas para algumas distribuições do Linux.
- MPLSInip Sample - Uma amostra fortemente comentada demonstrando como encapsular e decapular MPLs dentro do IP. O código é comentado para aqueles novos no desenvolvimento do BPF.
- EBPF -SAMPES - Uma coleção de amostras compiladas (como arquivos de objeto ELF) coletadas em vários projetos, destinados principalmente a servir como casos de teste para verificadores de espaço do usuário.
- EBPF-Kill-Exemplo-Um exemplo totalmente documentado e testado de uma sonda EBPF que registra todas as matas de força e as imprime no espaço do usuário.
- Exemplos RedBPF - Exemplo de programas para usar o RedBPF para escrever programas EBPF no Rust.
- Exemplo XDP/TC-EBPF-Programa que usa o XDP/TC-EBPF para fornecer o firewalling Statefull e o redirecionamento do soquete.
Fluxo de trabalho do EBPF: ferramentas e utilitários
BCC
- BCC - Framework e conjunto de ferramentas - Uma maneira de lidar com os programas BPF, em particular para rastrear e monitoramento. Também inclui alguns utilitários que podem ajudar a inspecionar mapas ou programas no sistema.
- Lua Front -end para BCC - Outra alternativa a C e até para a maioria do código Python usado no BCC.
iProute2
- IPROUTE2 - Pacote que contém ferramentas para gerenciamento de rede no Linux. Em particular, ele contém
tc , usado para gerenciar filtros e ações do EBPF, e ip , usado para gerenciar programas XDP. A maior parte do código relacionada ao BPF está em lib/bpf.c. - iProute2-next-A árvore de desenvolvimento, sincronizada com o Net-Next.
Llvm
libbpf
- LIBBPF - Biblioteca AC usada para lidar com objetos BPF (programas e mapas) e manipular arquivos de objeto ELF que os contêm. Ele é enviado com o kernel e espelhado no Github.
- libbpf-bootstrap-andaimes para desenvolvimento de aplicativos BPF com libbpf e bpf co-re.
Vá bibliotecas
- Biblioteca de Cilium/EBPF - Pure -Go para ler, modificar e carregar os programas EBPF e conectá -los a vários ganchos no kernel Linux.
- LIBBPFGO - Biblioteca EBPF para GO, alimentada por libbpf.
- GOBPF - GO LINHEIRAS PARA BCC para criar programas EBPF.
Aya
- AYA - Uma biblioteca Pure Rust para escrever, carregar e gerenciar objetos EBPF, com foco na experiência e operabilidade do desenvolvedor. Ele suporta a gravação de programas EBPF em Rust e distribuição de código da biblioteca sobre Crates.io para compartilhá -lo entre os programas EBPF. Aya não depende do libbpf.
- Aya -Template - Modelos para escrever aplicativos BPF no AYA que podem ser usados com
cargo generate . - EBPFGUARD - Biblioteca Rust para escrever políticas de segurança Linux usando o EBPF.
ZBPF
- ZBPF - Uma estrutura ZIG pura para escrever programas EBPF de plataforma cruzada, alimentados pelo LIBBPF e ZIG Toolchain.
Eunomia-bpf
- EUNOMIA-BPF-Uma estrutura de compilação e biblioteca de tempo de execução para criar, distribuir, carregar dinamicamente e executar aplicativos EBPF co-RE em vários idiomas e semestre. Ele suporta apenas o código do kernel do EBPF (para criar aplicativos simples de co-re libbpf ebpf), escrevendo a parte do kernel nos estilos BCC e LIBBPF e escrevendo o espaço de usuários em vários idiomas em um módulo WASM e distribuindo-o com dados simples de JSON ou OCI. O tempo de execução é baseado apenas no LIBBPF e fornece programas de EBPF no estilo BCC sem depender da biblioteca LLVM.
OxideBPF
- OxideBPF - Uma biblioteca de ferrugem pura para gerenciar programas EBPF, projetados para casos de uso de segurança. O recurso é mais limitado do que outras bibliotecas, mas enfatiza a estabilidade em uma ampla gama de kernels e placas compilantes com compilamento com compilamento para trás.
bpftool e outras ferramentas da árvore do kernel
BPFTOOL - Também algumas outras ferramentas na árvore do kernel, sob Linux/Tools/Net/para versões mais cedo, 4,15, ou Linux/Tools/BPF/depois disso:
-
bpftool - Um utilitário genérico que pode ser usado para interagir com programas e mapas do EBPF do Usuários Space, por exemplo, para mostrar, despejar, carregar, desmontar programas, PIN ou mostrar, criar, fixar, atualizar, excluir mapas ou anexar e separar programas aos cgrupos. -
bpf_asm - um conjunto mínimo de CBPF. -
bpf_dbg - Um pequeno depurador para programas CBPF. -
bpf_jit_disasm - Um desmontador para os dois sabores do BPF e pode ser altamente útil para a depuração do JIT.
Espaço do usuário EBPF
- UBPF - escrito em C. contém um intérprete, um compilador JIT para a arquitetura x86_64, um assembler e um desmontador.
- Uma implementação genérica - com suporte para kernel FreeBSD, espaço do usuário do FreeBSD, kernel Linux, espaço do usuário do Linux e espaço do usuário do MacOS. Usado para o módulo de extensão BPF do Switch de software Vale.
- RBPF - escrito em ferrugem. Intérprete para Linux, MacOS e Windows e JIT-Compiler para x86_64 no Linux.
- Prevalente - Um verificador de espaço do usuário para EBPF usando uma camada de interpretação abstrata, com suporte para loops.
- Oster - escrito em Go. Uma ferramenta para rastrear a execução de programas GO anexando o EBPF a Uprobes.
- Wachy - Um perfilador de rastreamento que visa facilitar o uso da depuração baseada em UPROBE do EBPF. Isso é feito exibindo rastreios em uma interface do usuário ao lado do código -fonte e permitindo a análise interativa de perfuração.
EBPF em outras plataformas
- EBPF para Windows-Este projeto é um trabalho em andamento que permite o uso de cadeias de ferramentas EBPF existentes e APIs familiares no ecossistema Linux a ser usado na parte superior do Windows.
Testes em ambientes virtuais
- Uma configuração vagante - para testar facilmente XDP. Menos útil agora que o XDP genérico (independente do motorista, principalmente para testes).
- BCC em um contêiner do Docker
Projetos relacionados ao EBPF
Networking
P4 tem algumas interações com o EBPF:
- P4 Na borda - P4 com EBPF para criar comutadores programáveis de alto desempenho.
- O OVS Orbit Episódio (#11), chamado P4 no limite - relacionado ao item anterior. Entrevista em áudio de John Fastabend, de Ben Pfaff, um dos principais mantenedores do VSWitch aberto.
- P4, EBPF e Linux TC OFFLOAD - P4 Com alguns elementos relacionados à descarga de hardware do EBPF na arquitetura NFP (processador de fluxo de rede) da Netronome.
- Documentação antiga para uso de P4 com EBPF - do repositório BCC; Conseguido pelo back -end P4_16 vinculado abaixo.
- P4_16 Back -end para EBPF
O Cilium Project (GitHub Repository) é uma tecnologia que depende do BPF e do XDP para fornecer "rede de rede de redes e segurança de rede rápida para contêineres com base nos programas EBPF gerados na mosca". Muitas apresentações disponíveis (com sobreposição):
- Cilium: Networking & Security for Reckers com BPF & XDP - também com uma caixa de uso de balanceador de carga
- Cílio: rede e segurança para contêineres com BPF & XDP - Vídeo
- Cílio: Rede de contêiner IPv6 rápido com BPF e XDP
- Cílio: BPF e XDP para contêineres
- OVS Orbit Episódio (#4) - Entrevista de Thomas Graf por Ben Pfaff.
- Uma introdução genérica ao cílio
- Um podcast entrevistando Thomas Graf - Ivan Pepelnjak entrevistando Thomas, outubro de 2016, em EBPF, P4, XDP e Cílio.
Open VSwitch (OVS) e seu projeto relacionado Rede Virtual Open (OVN, uma solução de virtualização de rede de código aberto) estão considerando o uso do EBPF em vários níveis:
- Descarregando OVS Processamento de fluxo usando EBPF
- Acoplando a flexibilidade do OVN com a eficiência do IoVisor
KATRAN-Um balanceador de carga da camada 4 com base no XDP, de origem aberta pelo Facebook.
XDP Na prática: Integração do XDP em nosso DDoS Mitigation Pipeline - Proteção contra DDOs com XDP no CloudFlare.
Gotada: DDoS contramedidas alimentadas pelo BPF + XDP - Proteção contra DDOs com XDP no Facebook.
O DPDK possui um driver de pesquisa (PMD) baseado em AF_XDP
CETH PARA XDP - Estrutura de driver Ethernet comum para E/S mais rápida de rede, uma tecnologia iniciada pela Mellanox.
A Suricata, um sistema de detecção de intrusões de código aberto, conta com componentes do EBPF para seus recursos "Capture Bypass":
- Seção "EBPF e XDP" da documentação de Suricata
- Septun -Mark -II - Guia de ajuste de desempenho extremo - Marcos II.
- Uma postagem no blog que apresenta o recurso
- As aventuras de um suricado em EBPF Land
- EBPF e XDP vistos dos olhos de um Meerkat
Project Calico - O CALICO é uma solução de rede de rede e rede de código aberto para contêineres, máquinas virtuais e cargas de trabalho baseadas em host. O plano de dados do EBPF da Calico oferece um plano de dados de baixa latência e alto rendimento com um modelo de política de segurança de rede rico.
- Ativando o plano de dados do EBPF com Calico
Merbridge - Use EBPF para acelerar sua malha de serviço. A Merbridge substitui as regras do iptables pelo EBPF para interceptar o tráfego. Ele também combina msg_redirect para reduzir a latência com um datapath reduzido entre carcares e serviços.
PCAPPLUSPLUS - Uma biblioteca C ++ de código aberto para capturar, analisar e criar pacotes de rede. Possui uma interface C ++ para criar soquetes AF_XDP, facilitando o envio e o recebimento de pacotes através deles.
Observabilidade
- INKEV: Virtualização de rede distribuída no kernel para DCN
- Deep-Mon-Ajuda a medir o consumo de energia para servidores e usa programas EBPF para agregação de dados no kernel.
- Pixie - Observabilidade para Kubernetes usando EBPF. Os recursos incluem rastreamento de protocolo, perfil de aplicativos e suporte para implantações de bpftrace distribuídas.
- Skywalking Rover-Apache Skywalking é uma plataforma de monitoramento de desempenho de aplicativos de código aberto (APM) projetado especialmente para sistemas distribuídos com microsserviços, arquiteturas nativas de nuvem e baseadas em contêineres (Kubernetes). A Skywalking Rover é um coletor de perfil e métricas baseado em EBPF para aplicações de C, C ++, Golang e Rust.
- PARCA-AGENT-Profiler contínuo sempre ativo baseado em EBPF para análise da CPU e uso de memória, até o número da linha e ao longo do tempo.
- RBPERF - Profiler de amostragem e traçador para Ruby.
- Hubble - Observabilidade de rede, serviço e segurança para Kubernetes usando o EBPF.
- CARETTA - Mapa de dependência do serviço Kubernetes instantâneo gerado pelo EBPF, diretamente para uma instância de Grafana.
- Deepflow - Observabilidade instantânea para aplicativos nativos da nuvem e AI com base no EBPF.
Segurança
- FALCO - Um projeto de segurança de tempo de execução nativo da nuvem usado como um mecanismo de detecção de ameaças Kubernetes.
- Sysmon for Linux - uma ferramenta de monitoramento de segurança. Depende do SysinternalSeBPF.
- Agente do Linux Red Canary - o Red Canary começou a incorporar o EBPF ao seu sensor de segurança Linux.
- Tracee - Uma ferramenta de segurança e forense de tempo de execução do Linux, que usa a tecnologia EBPF para rastrear o sistema e os aplicativos em tempo de execução e analisar eventos coletados para detectar padrões comportamentais suspeitos.
- Redcanary-EBPF-Sensor-Um conjunto de programas BPF que coletam dados de eventos relevantes para a segurança do kernel Linux. Os programas BPF são combinados em um único arquivo ELF, do qual as sondas individuais podem ser carregadas seletivamente, dependendo do sistema operacional em execução e da versão do kernel.
- BPFLOCK - Máquinas Linux de bloqueio - Uma ferramenta de segurança acionada por EBPF para travar e auditar máquinas Linux.
- Tetragon-observabilidade de segurança baseada em Kubernetes, observabilidade de segurança baseada em EBPF e execução de tempo de execução.
- Harpoon - Trace Syscalls das funções do espaço do usuário, usando o EBPF.
Ferramentas
- PLY - Um traçador dinâmico de código aberto pequeno, mas flexível, para Linux, com recursos semelhantes às ferramentas do BCC, mas com uma linguagem mais simples inspirada no AWK e DTRACE.
- BPFTRACE - Uma ferramenta para rastrear com sua própria linguagem de rastreamento de alto nível. É flexível o suficiente para ser previsto como uma substituição do Linux para DTRACE e Systemtap.
- BPFTRACE Cheat Sheet - Resumo e folha de dicas para programação no BPFTRACE. Contém informações sobre sintaxe, tipos de sonda, variáveis e funções.
- KUBECTL Trace - Um plug -in Kubectl para executar programas BPFTRACE em um cluster Kubernetes.
- Inspektor-Gadget-Uma coleção de ferramentas baseadas em EBPF para depurar e inspecionar os recursos e aplicativos da Kubernetes.
- BPFD - Framework para executar programas BPF com regras no Linux como um daemon. Contêiner ciente.
- BPFD - Um daemon BPF distinto, tentando alavancar a flexibilidade das ferramentas do BCC para rastrear e depurar alvos remotos e, em particular, dispositivos em execução com o Android.
- Adeb - Um ambiente de shell Linux para usar ferramentas de rastreamento no Android com BPFD.
- Greggd - Daemon System para compilar e carregar os programas EBPF no kernel e a saída do programa encaminhar para o soquete para a agregação métrica.
- Fusível - considera usar o EBPF.
- UPF-BPF-Uma solução no kernel baseada no XDP para 5G UPF.
- RedBPF - Ferramentas e estrutura para gravar o código EBPF em ferrugem com eficiência.
- EBPF -Explorer - Uma interface da Web para explorar os mapas e programas do sistema.
- EBPFMON - Um aplicativo TUI (interface do usuário do terminal) para monitoramento em tempo real dos programas EBPF.
- BPFMAN - Um gerente de EBPF para Linux e Kubernetes. Inclui um carregador de programas interno que suporta a cooperação do programa para programas XDP e TC, bem como a implantação de programas EBPF a partir de imagens OCI.
- PTCPDUMP-Uma ferramenta com reconhecimento de processo, baseada em EBPF, tipo TCPDUMP.
EBPF em segurança
- Abrace o vermelho: BPF ofensivo! - Uma série de postagens sobre a introdução no BPF com foco em um ambiente ofensivo e também como seu uso indevido pode ser detectado. As postagens incluem discussões sobre os recursos de rootkit do EBPF ou no qual o tipo de rastreamento é necessário para diferentes casos de uso.
- EBPF: Execução de "malware" do Block Linux Fillowless "Malware" com BPF LSM - Postagem de blog sobre como o BPF pode ajudar a detecção e bloqueio de malware sem arquivo.
- Blackhat 2021: Com amigos como o EBPF, quem precisa de inimigos? - Fale sobre um EBPF Rootkit e como os recursos do EBPF podem ser abusados. O rootkit também foi objeto de uma palestra no Defcon, EBPF, pensei que éramos amigos!
- EBPFKIT - Um rootkit que utiliza vários recursos do EBPF para implementar técnicas de segurança ofensivas.
- EBPFKIT -Monitor - Um utilitário para analisar estaticamente o EBPF BYTECODE ou monitorar a atividade suspeita do EBPF no tempo de execução. Foi projetado especificamente para detectar o EBPFKIT.
- Bad BPF - Uma coleção de programas maliciosos do EBPF que utilizam a capacidade da EBPF de ler e escrever dados do usuário entre o programa Usermode e o kernel.
- TRIPLECROSS - Um Linux EBPF Rootkit com uma backdoor, C2, injeção de biblioteca, seqüestro de execução, persistência e recursos furtivos.
O código
Linux/incluir/linux/bpf.h - com linux/incluir/uapi/bpf.h: definições relacionadas ao EBPF, a serem usadas respectivamente no kernel e para interagir com os programas do UsuáriosPace.
linux/incluir/linux/filter.h - com linux/incluir/uapi/filter.h: informações usadas para executar os próprios programas BPF.
Linux/kernel/bpf/ - Este diretório contém a maior parte do código relacionado ao BPF. Em particular, esses arquivos valem de interesse:
-
syscall.c - Diferentes operações permitidas pela chamada do sistema, como carregamento de programas ou gerenciamento de mapas. -
core.c - Intérprete BPF. -
verifier.c - Verificador BPF.
linux/net/core/filter.c - funções e ajudantes EBPF relacionados à rede (TC, XDP etc.); Também contém o código para migrar o bytecode CBPF para o EBPF (todos os programas CBPF são traduzidos para o EBPF nos kernels recentes).
Linux/kernel/Trace/bpf_trace.c - funções e ajudantes do EBPF relacionados ao rastreamento e monitoramento (KProbes, Tracepoints, etc.).
Os compiladores JIT estão sob o diretório de suas respectivas arquiteturas, como o arquivo linux/arch/x86/net/bpf_jit_comp.c para x86. A exceção é feita para compiladores JIT usados para descarga de hardware, sentados em seus drivers, como Linux/Drivers/Net/Ethernet/Netronome/NFP/BPF/JIT.C para NFP Netronome.
Linux/net/scheding/ - e, em particular, em arquivos act_bpf.c (ação) e cls_bpf.c (filtro): código relacionado às ações e filtros do BPF com TC.
Linux/kernel/seccomp.c
Linux/net/core/dev.c - contém a função dev_change_xdp_fd() que é chamada por meio de um comando NetLink para conectar um programa XDP a um dispositivo, depois que o IM foi carregado no kernel do espaço do usuário. Esta função, por turnos, usa um retorno de chamada do driver relevante.
Desenvolvimento e comunidade
- A árvore BPF -NEXT - BPF Patches aterrissa nesta árvore. É regularmente mesclado no Net-Next, que é mesclado para cada liberação na árvore de Linus.
- Documentação do kernel - sobre contribuições para o BPF.
- A lista de discussão da NetDev - Lista de discussão para o desenvolvimento da pilha de rede do kernel Linux. Todos os patches são enviados para revisão e inclusão.
- XDP -Newbies - Uma lista de discussão especialmente dedicada à programação XDP (tanto para arquitetura quanto para pedir ajuda).
- Lista de discussão de Visor IO - O BPF está no centro do projeto e é discutido regularmente na lista de discussão.
- @Iovisor conta no Twitter
- O projeto de colaboração XDP - um repositório do GitHub com notas e idéias sobre as futuras evoluções do XDP.
Outras listas de recursos no EBPF
- Documentação do BCC da IO Visor
- Repositório BPF-DOCS da IO Visor
- Mergulhe no BPF: uma lista de material de leitura
Reconhecimento
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.
Contribuindo
Contributions welcome! Read the contribution guidelines first.
Licença
To the extent possible under law, zoidbergwill has waived all copyright and related or neighboring rights to this work.