Потрясающий EBPF
Куративный список замечательных проектов, связанных с EBPF.
BPF, как и в Berkeley Packet Filter , представляет собой виртуальную машину в клетке, запускающих программы, проходящие из пользовательского пространства. Первоначально реализованный на BSD, затем Linux, (теперь устаревший) «классический BPF» или машина CBPF будут использоваться с такими инструментами, как TCPDUMP для фильтрации пакетов в ядре, чтобы избежать бесполезных копий для пользователя. Совсем недавно инфраструктура BPF в Linux была полностью переработана и дала жизнь «расширенному BPF» или EBPF, который получил новые функции (проверки безопасности и завершения, JIT-компилирование для программ, постоянные карты, стандартная библиотека, поддержка для разгрузки оборудования и т. Д.) И в настоящее время используется для многих Tassks. Обработка пакетов на очень низком уровне (XDP), отслеживание и мониторинг событий в системе или обеспечение контроля доступа к CGROUPS - это всего лишь несколько примеров, в которые EBPF приносит производительность, программируемость и гибкость.
Недавно Cilium запустил отличный сайт о EBPF под названием EBPF.IO. Он служит аналогичной целью с этим списком с введением в EBPF и ссылками на соответствующие проекты.
Примечание: EBPF - это захватывающая технология, а его экосистема постоянно развивается. Мы хотели бы помочь вам , чтобы держать этот удивительный список в курсе и улучшить его отношение сигнал / шум в любом случае. Пожалуйста, не стесняйтесь оставлять любые отзывы.
Содержимое
- Справочная документация
- Статьи и презентации
- Учебные пособия
- Примеры
- Рабочий процесс EBPF: инструменты и утилиты
- Проекты, связанные с EBPF
- EBPF в безопасности
- Код
- Развитие и сообщество
- Другие списки ресурсов на EBPF
- Подтверждение
Справочная документация
EBPF Essentials
- ebpf.io - шлюз, чтобы открыть все основы EBPF, включая список основных связанных проектов и ресурсов сообщества.
- Справочное руководство Cilium BPF и XDP - подробная документация по большинству функций и аспектов EBPF.
Документация ядра
- Документация BPF - Индекс для документации, связанной с BPF, поступающей с ядром Linux.
- Linux/Documentation/Networking/Filter.rst - спецификация EBPF (несколько устарела; информация все еще должна быть действительной, но не исчерпывающей).
- BPF Design Q & A - часто задаваемые вопросы о решениях, стоящих за инфраструктурой BPF.
- Howto взаимодействует с подсистемой BPF - часто задаваемые вопросы о участии в разработке EBPF.
Ручные страницы
-
bpf(2) - Страница ручной системы о системном вызове bpf() , используемом для управления программами BPF и картами от пользователя. -
tc-bpf(8) - Ручная страница об использовании BPF с TC, включая примеры команд и образцы кода. -
bpf-helpers(7) Страница MAN-Описание вспомогательных функций, образующих стандартную библиотеку BPF.
Другой
Неофициальный спецификация EBPF IO козырька - Сводка синтаксиса EBPF и операционных кодов.
Документация Jesper Dangaard Brouer - работа в процессе, взносы приветствуются.
Электронные письма от Дэвида Миллера в список рассылки XDP-Newbies:
- bpf.h и вы ...
- Контекстуально говоря ...
- Обзор проверки BPF
Список функций BPF на версию ядра
Статьи и презентации
Общие презентации и статьи EBPF
Если вы новичок в EBPF, вы можете попробовать ссылки, описанные как «Введение» в этом разделе.
Краткое введение в XDP и EBPF - доступное введение, предоставляющее контекст, историю и подробности о функционировании EBPF.
Обзор EBPF - серия блогов Адриана Ратиу, охватывающая многие аспекты инфраструктуры EBPF:
- Часть 1: Введение
- Часть 2: машина и байт -код
Сообщения в блоге Ferris Ellis о EBPF - у них есть несколько сообщений о EBPF:
- Часть 1: прошлое, настоящее и будущее
- Часть 2: типы SYSCALL и MAP
Справочное руководство BPF - О помощниках BPF C и BCC Python, от репозитория BCC.
Создание программируемого сетевого пути данных ядра с помощью BPF и XDP - набор слайдов, охватывающих все основы, касающиеся EBPF и XDP (в основном для обработки сети).
Фильтр пакетов BSD - введение, в основном охватывающее аспекты трассировки.
BPF: отслеживание и многое другое - введение в основном охватывающее аспекты трассировки.
SuperPogers Linux BPF - введение, в основном охватывающее аспекты трассировки, первая часть с графами пламени.
IO Visor - также представляет проект IO Visor.
BPF - виртуальная машина In -Kernel - презентация автора EBPF.
Расширение расширенного BPF - пост в блоге от 2014 года о разработке BPF и демонстрации того, что можно сделать с ним, используя пример фильтрации сокетов, подключив программу EBPF к розетку.
Грег Марсден сделал некоторую документацию о EBPF:
- Тур по типам программ - описание всех существующих крючков для типов программ BPF и их интереса.
- Функции BPF Helper - обзор функций ядра, которые можно вызвать из программ EBPF.
- Общение с пользователями - как BPF общается с пользователями - карты BPF, события PERF, BPF_TRACE_PRINTK.
- Создание программ BPF - Настройка вашей среды для создания программ BPF.
- BPF Bytecode и Verifier BPF - как BPF гарантируют, что программы безопасны?
- Использование BPF для преобразования пакетов - одно использование EBPF о преобразовании пакетов.
Отставаемость ядра Linux через EBPF - сообщение в блоге, охватывающее основы EBPF, а также образцы кода в том, как построить и загрузить минимальную программу EBPF в ядро.
EBPF - С точки зрения программиста - короткая статья, описывающая основы EBPF и как начать работу с написания программ EBPF.
Сообщения в блоге Cloudflare на EBPF - разные сообщения в блоге о сетях использования и низкоуровневых аспектах EBPF.
Linux Extended BPF (EBPF) инструменты трассировки - подробная коллекция информации о примерах инструментов анализа производительности с использованием EBPF. Содержит также раздел в конце страницы о других ресурсах.
Руководство для начинающих по EBPF - набор разговоров в прямом эфире и примеры сопутствующего кода, внедрение программирования EBPF с использованием различных библиотек и типов программ.
BPF Internals
Даниэль Боркманн сделал несколько презентаций и документов, охватывающих внутреннюю часть EBPF, в частности, о его использовании с TC.
- Прохождение EBPF и XDP и недавние обновления (2017)
- Расширенная программируемость и последние обновления с TC CLS_BPF - Подробная информация о EBPF, его использование для туннелирования и инкапсуляции, прямой доступ к пакетам и многое другое.
- CLS_BPF/EBPF Обновления со времен NetDev 1.1 - Часть этого семинара TC.
- При получении TC Classifier полностью программируется с CLS_BPF - введение в EBPF, включая несколько функций (управление картой, хвостовые вызовы, проверка). Полная бумага также доступна здесь.
- Linux TC и EBPF
IO Visor Blog
Linux Networking объяснил - Linux Networking Internals, с частью EBPF.
Отслеживание ядра
- Полносистемная динамическая трассировка на Linux с использованием EBPF и BPFTRACE - подробное введение в трассировку с EBPF, от перечисления доступных точек трассировки до запуска программ BPFTrace.
- Встреча между EBPF и отслеживанием ядра - Kprobes, Uprobes, Ftrace.
- Отслеживание ядра Linux-SystemTap, Kernelshark, Trace-CMD, Lttng, Perf-Tool, Ftrace, Hist-Trigger, PRF, функциональный трассировщик, TracePoint, Kprobe/Uprobe и многое другое.
- Блог Брендана Грегга и, в частности, статья Linux BPF SuperPowers.
XDP
Экспресс -путь данных - очень доступное введение в XDP, предоставляющее пример кода, чтобы показать, как обрабатывать пакеты.
Все подробности XDP в технической статье: Путь экспресс-данных: быстрая программируемая обработка пакетов в ядре операционной системы, Токе Хойланд-Джоргенсен, Джеспер Дангаард Бруер, Даниэль Боркманн, Джон Фастабенд, Том Герберт, Дэвид Ахерн и Дэвид Миллер, все это важные участники EBPF и XDP.
Документация по работе с работой для XDP
Справочное руководство BPF и XDP - Руководство из проекта Cilium.
Обзор проекта XDP
Экспресс -путь данных (XDP) - первая презентация о XDP.
BOF - Что может сделать BPF для вас?
Express Data Path - содержит некоторые контрольные результаты, полученные с драйвером MLX4.
У Джеспер Дангаард Бруэр есть несколько наборов слайдов, описывающих внутренние XDP:
- XDP - экспресс -путь данных, вступления в силу и будущие сражения - борьба с ядром Linux с DPDK. Планы на будущее (на момент написания статьи) для XDP и сравнение с DPDK.
- Семинар по производительности сети - Дополнительные подсказки о внутренних органах XDP и ожидаемой эволюции.
- XDP - экспресс -путь данных, используемый для защиты DDOS - подробности и варианты использования о XDP, с результатами эталона и фрагментами кода для сравнительного анализа, а также для базовой защиты DDOS с помощью EBPF/XDP (на основе схемы IP -списка).
- Память против сети, провоцирование и исправление узких мест памяти - расширенные подробности о текущих проблемах памяти, с которыми сталкиваются разработчики XDP.
- XDP для остальных из нас - как начать с EBPF и XDP для нормальных людей. Также суммировано Джулией Эванс в ее блоге.
- XDP теперь с перенаправлением - обновление XDP и, в частности, на действия перенаправления.
Семинар XDP - введение, опыт и будущее развитие (видео)
Фильтрация высокоскоростных пакетов на Linux - о фильтрации пакетов на Linux, защите DDOS, обработке пакетов в ядре, байпане ядра, XDP и EBPF.
Как сбросить 10 миллионов пакетов в секунду - в блоге Cloudflare рассказывается об их переходе на использование XDP для фильтрации пакетов.
AF_XDP
- AF_XDP - Документация ядра по адресу AF_XDP Address Family.
- Быстрая обработка пакетов в Linux с AF_XDP
bpfilter
- Почему сообщество ядра заменяет iptables на BPF? - Сообщение в блоге от Cilium о мотивах EBPF и BPFilter, с несколькими примерами и ссылками на другие проекты с использованием EBPF и BPFILTER.
- BPFILTER: брандмауэр Linux с соусом EBPF - слайды из разговора Квентина Монне с фоном на EBPF и сравнением BPFilter с iptables.
BTF
- Формат типа BPF (BTF) - документация по ядрам о BTF, объясняющая, как его использовать.
- Улучшение ядра Linux с помощью информации о типе BTF - описание работы, выполненной с BTF для предоставления информации отладки для программ BPF.
- Что такое BTF (формат типа BPF)-информационный бюллетень, обогащенный сообществом, обогащенный полезными иллюстрациями кода и практическими примерами.
CBPF
- Фильтр пакетов BSD: новая архитектура для захвата пакетов на уровне пользователя - оригинальная статья о (классической) BPF.
- Страница FreeBSD Руководство о BPF
- Linux 'Packet MMAP (2), BPF и Netsniff-NG
- TC и CLS BPF: классификация легких пакетов с помощью BPF
- Представляем инструменты BPF CloudFlare - Использование BPF Bytecode с модулем
xt_bpf для iptables. - Синтаксис фильтров Libpcap
Аппаратное разгрузка
- EBPF/XDP аппаратная загрузка на Smartnics - аппаратная загрузка для EBPF с TC или XDP (Linux Kernel 4.9+), представленная Netronome.
- Комплексная разгрузка XDP --- Обработка случаев краев-обновление по теме выше.
- HBPF - EBPF в оборудовании - процессор EBPF, написанный для FPGA.
- OpenCSD EBPF SSD Разгрузка - платформа моделирования вычислительного хранилища (QEMU) с файловой системой FUSE LFS для зонированных имен NVME SSD с использованием UBPF для разгрузки ядра для вычисления ядра, все в пользовательском пространстве.
- Delilah: EBPF -загрузка на вычислительное хранилище - Delilah - это вычислительный процессор хранения (CSP), созданный для разгрузки EBPF на устройства хранения.
Учебные пособия
- Справочное руководство BCC - Много инкрементных шагов для начала использования BCC и EBPF, в основном сосредоточенных на трассировке и мониторинге.
- BCC Developer Developer - поставляется с BCC, но нацелена на биты Python на семнадцати «уроках».
- Создание приложений BPF с помощью LIBBPF-Bootstrap-помогает генерировать минимальные или передовые шаблоны для начала собственных приложений (управление стороной ядра и пользовательского пространства для карт и программ) с такими функциями, как Co-RE, глобальные переменные и кольцевой буфер.
- Как я в итоге написал OpenSnOoop в Pure C, используя EBPF - тщательное прохождение того, как писать программы EBPF, сначала с использованием только BPF () Syscall, а затем библиотеки LIBBPF, с воспроизводимыми примерами кода.
- Материалы Linux Tracing Materials - включает в себя использование нескольких инструментов BPF для трассировки.
- Отслеживание пути пакета с использованием Tracepoints Linux, PERF и EBPF - устранение неисправностей запросов PING и ответов с помощью программ PERF и BCC.
- Открыть платформу NFP - управляется Netronome: некоторые учебники для сетевых вариантов использования EBPF, включая руководство по запуске разгрузки EBPF.
- XDP для остальных из нас - первое издание семинара, чтобы начать работу с XDP.
- XDP для остальных из нас - второе издание, с новым содержанием.
- Загрузить программы XDP с использованием команды IP (iproute2)
- Практическое руководство XDP - прогрессивное (три уровня сложности), чтобы узнать, как обрабатывать пакеты с помощью XDP.
- Все ваши трассировки принадлежат BPF-пошаговое прохождение для интеграции возможностей трассировки в ваши приложения C ++ с библиотеками LLVM.
- Брандмауэр с BPF/XDP: примеры и глубокое погружение - простое руководство по созданию основных брандмауэров с TC и XDP.
- Глубокое погружение в EBPF: написание эффективного мониторинга DNS. - Подробное объяснение методов, используемых для захвата запросов DNS на слое фильтра сокета.
- Учебное пособие по разработчику EBPF - Учитесь EBPF по примерам - Начните с оснований EBPF и прогресса в расширенные темы, используя 20+ практических учебных пособий и примеров. Охватывает производительность, сеть и безопасность с помощью LIBBPF и co-re. Доступно на китайском и английском языке.
- Поймайте регрессии производительности в EBPF-пошаговое руководство по сравнению с кодом клиента и ядра EBPF, написанного в ржавчине.
- Петли и итераторы в EBPF - информационный бюллетень обо всех способах цикла и итерации в EBPF.
- Какие идеи могут предоставить EBPF в SSL/TLS в режиме реального времени зашифрованный трафик и как? -Пошаговое руководство, как EBPF может наблюдать зашифрованный сетевой трафик.
- Может ли EBPF обнаружить шаблоны сообщений Redis, прежде чем они станут проблемами? -Пошаговое руководство по тому, как EBPF может наблюдать за передачей Redis между клиентом и сервером.
- Прозрачная реализация прокси с использованием EBPF и GO-пошаговое руководство по реализации прозрачного прокси с использованием EBPF.
- Balancing на нагрузке с мощностью EBPF-узнайте, как EBPF может сделать вывод на пользовательскую балансировку нагрузки для служб, прослушивающих один и тот же порт, через опцию SO_Reuseport TCP.
- Модульные тестирование программ EBPF - Узнайте, как вы можете проверить свои программы EBPF с использованием LIBBPF.
- Ускорение общения локального сокета с использованием EBPF - узнайте, как EBPF может ускорить общение локальной розетки до 30%.
Примеры
- Linux/Samples/BPF/ - В дереве ядра: некоторые образец программ EBPF.
- Linux/Tools/Testing/SelfTests/BPF - в дереве ядра: Linux BPF Selftests, со многими программами EBPF.
- Прототип-кенл/ядро/образцы/BPF-Репозиторий прототипа-кенлея Jesper Dangaard Brouer содержит некоторые дополнительные примеры, которые можно собрать за пределами инфраструктуры ядра.
- IPROUTE2/Примеры/BPF/ - Некоторые сетевые программы для подключения к интерфейсу TC.
- Сетевые сетевые приложения Netronome - предоставляют основные, но полные примеры приложений EBPF, также совместимые с аппаратной загрузкой.
- BCC/примеры - примеры, поступающие вместе с инструментами BCC, в основном о трассировке.
- BCC/Tools - эти инструменты сами можно рассматривать как примеры вариантов использования программ BPF, в основном для отслеживания и мониторинга. Инструменты BCC были упакованы для некоторых распределений Linux.
- Образец Mplsinip - очень прокомментированный образец, демонстрирующий, как инкапсулировать и декапсулировать MPLS в IP. Код прокомментирован для тех, кто новичок в разработке BPF.
- EBPF -Samples - коллекция скомпилированных (как объектные файлы ELF), собранные из нескольких проектов, в основном предназначенные для того, чтобы служить тестовыми случаями для проверки пространства пользователя.
- EBPF-KILL-EXAMER-полностью задокументированный и протестированный пример зонда EBPF, который регистрирует все приказы и распечатывает их в пространстве пользователя.
- Примеры REDBPF - примеры программ для использования REDBPF для написания программ EBPF в Rust.
- Пример XDP/TC-EBPF-Программа, которая использует XDP/TC-EBPF для обеспечения фисленда-эдмауэра Statefull и перенаправления сокетов.
Рабочий процесс EBPF: инструменты и утилиты
BCC
- BCC - Framework и набор инструментов - один из способов обработки программ BPF, в частности для отслеживания и мониторинга. Также включает в себя некоторые утилиты, которые могут помочь осмотреть карты или программы в системе.
- Lua Front -End для BCC - еще одна альтернатива C, и даже большую часть кода Python, используемого в BCC.
iproute2
- Iproute2 - пакет, содержащий инструменты для управления сетью на Linux. В частности, он содержит
tc , используемый для управления фильтрами и действиями EBPF, а также ip , используемый для управления программами XDP. Большая часть кода, связанного с BPF, находится в lib/bpf.c. - Iproute2-next-дерево разработки, синхронизированное с Net-Next.
LLVM
libbpf
- LIBBPF - библиотека AC, используемая для обработки объектов BPF (программы и карты), и манипулирование объектными файлами ELF, содержащими их. Он поставляется с ядром и зеркально на GitHub.
- LIBBPF-BOOTSTRAP-ЛИЧНЫЕ ДЛЯ СОЗДАНИЕ ДЛЯ ЗАДЕЛЕНИЯ BPF с помощью LIBBPF и BPF CO-RE.
Go Библиотеки
- Cilium/EBPF - библиотека Pure -GO для чтения, модификации и загрузки программ EBPF и прикрепления их к различным крючкам в ядре Linux.
- LibBPFGO - библиотека EBPF для GO, основанная на LIBBPF.
- GOBPF - Go Bindings для BCC для создания программ EBPF.
Ая
- Aya - библиотека чистой ржавчины для написания, загрузки и управления объектами EBPF, с акцентом на опыт разработчика и работоспособность. Он поддерживает написание программ EBPF в Rust и распределение кода библиотеки по Crates.io, чтобы поделиться им между программами EBPF. Aya не зависит от LIBBPF.
- Aya -Template - Шаблоны для написания приложений BPF в AYA, которые можно использовать с
cargo generate . - EBPFGUARD - библиотека Rust для написания политик безопасности Linux с использованием EBPF.
ZBPF
- ZBPF - Pure Zig Framework для написания кросс -платформных программ EBPF, основанная на LIBBPF и Zig Toolchain.
Eunomia-bpf
- Eunomia-BPF-структура компиляции и библиотека времени выполнения для создания, распределения, динамической загрузки и запуска приложений Co-RE EBPF на нескольких языках и веб-ассемэмбиле. Он поддерживает только написание только кода ядра EBPF (для создания простых приложений Co-REBPF EBPF), написания части ядра в стилях BCC и LIBBPF, а также написание пользователей на нескольких языках в модуле WASM и распределяя его с помощью простых данных JSON или WASM OCI. Среда выполнения основана только на LIBBPF и обеспечивает программы EBPF в стиле BCC без в зависимости от библиотеки LLVM.
OxideBpf
- OxideBPF - чистая библиотека ржавчины для управления программами EBPF, разработанная для вариантов использования безопасности. Функция более ограничена, чем другие библиотеки, но подчеркивает стабильность в широком спектре ядер и обратно совместимых с компиляцией на сайте.
Bpftool и другие инструменты из дерева ядра
bpftool - также некоторые другие инструменты в дереве ядра, под Linux/Tools/Net/для версий ранее, чем 4.15, или Linux/Tools/BPF/после этого:
-
bpftool - общая утилита, которая может использоваться для взаимодействия с программами EBPF и картами из пользователя, например, для отображения, сбрасывания, загрузки, разбора, стимуляции программ или для отображения, создания, прикрепления, обновления, удаления карт или прикрепления и отсоединения программ к CGROUPS. -
bpf_asm - минимальный ассемблер CBPF. -
bpf_dbg - небольшой отладчик для программ CBPF. -
bpf_jit_disasm - разборщик для обоих ароматов BPF и может быть очень полезен для отладки JIT.
Пользовательский пространство EBPF
- UBPF - Записано в C. Содержит интерпретатора, компилятор JIT для архитектуры x86_64, ассемблер и разборщик.
- Общая реализация - с поддержкой ядра FreeBSD, пользовательского пространства FreeBSD, ядра Linux, пользовательского пространства Linux и пользовательского пространства MacOS. Используется для модуля расширения BPF Switch Switch Vale.
- RBPF - написано в ржавчине. Интерпретатор Linux, MacOS и Windows и JIT-компилятор для x86_64 под Linux.
- ПЕРЕСМОТРЕДА - Пользовательский проверятель для EBPF с использованием абстрактного уровня интерпретации, при поддержке петли.
- Остер - написано в Go. Инструмент для отслеживания выполнения программ GO путем прикрепления EBPF к Uprobes.
- Wachy - профилировщик отслеживания, который стремится упростить отладку на основе EBPF на основе Uprobe. Это делается путем отображения трассов в пользовательском интерфейсе рядом с исходным кодом и позволяя интерактивному анализу тренировки.
EBPF на других платформах
- EBPF для Windows-этот проект представляет собой рабочую неверную программу, которая позволяет использовать существующие инструменты EBPF и API, знакомые в экосистеме Linux, которые будут использоваться в верхней части Windows.
Тестирование в виртуальных средах
- Бродяга, чтобы легко проверить XDP. Менее полезны сейчас, когда существует общий XDP (не запланированный водителем, в основном для тестирования).
- BCC в контейнере Docker
Проекты, связанные с EBPF
Сеть
P4 имеет некоторое взаимодействие с EBPF:
- P4 на краю - P4 с EBPF для создания высокопроизводительных программируемых переключателей.
- Эпизод OVS Orbit (#11), называемый P4 на краю - связан с прежним предметом. Аудио интервью Джона Фастабенда Бена Пфаффа, одного из основных сопровождающих Open Vswitch.
- P4, EBPF и Linux TC SUTLOAD - P4 с некоторыми элементами, связанными с EBPF Adwange Road, на архитектуре Netronome NFP (сетевой процесс потока).
- Старая документация для использования P4 с помощью EBPF - из репозитория BCC; Установилось от бэкэнда P4_16, связанного ниже.
- P4_16 Бэкэнд для EBPF
Проект Cilium (Repository Github)-это технология, основанная на BPF и XDP, чтобы обеспечить «быстрое сетевые сети в клетке и обеспечение соблюдения политики безопасности для контейнеров на основе программ EBPF, генерируемых на лету». Многие презентации доступны (с перекрытием):
- Cilium: сеть и безопасность для контейнеров с BPF и XDP - также с вариантом использования балансировщика нагрузки
- Cilium: сеть и безопасность для контейнеров с BPF & XDP - Видео
- Cilium: Fast IPv6 Контейнерные сети с BPF и XDP
- Cilium: BPF и XDP для контейнеров
- Эпизод OVS Orbit (#4) - Интервью Томаса Графа Бена Пфаффа.
- Общее введение в ресничку
- Подкаст, взявший интервью у Томаса Графа - Иван Пепелняк, который проводит интервью с Томасом, октябрь 2016 года, на EBPF, P4, XDP и Cilium.
Open Vswitch (OVS) и связанный с ним проект Open Virtual Network (OVN, решение виртуализации сети с открытым исходным кодом) рассматривает возможность использования EBPF на различных уровнях:
- Разгрузка обработки потока OVS с использованием EBPF
- Соединение гибкости OVN с эффективностью Iovisor
KATRAN-балансер слоя 4 на основе XDP, открытый Facebook.
XDP на практике: интеграция XDP в наш трубопровод DDOS смягчения - защита от DDO с XDP в CloudFlare.
Капля: DDOS Contrameres, работающие на BPF + XDP - Защита от DDOS с XDP в Facebook.
DPDK имеет драйвер режима опроса (PMD) на основе AF_XDP
Ceth for XDP - общая структура драйвера Ethernet для более быстрого ввода -вывода сети, технология, инициированная Mellanox.
Suricata, система обнаружения вторжений с открытым исходным кодом, опирается на компоненты EBPF для его функций «обход по захвате»:
- Раздел «EBPF и XDP» документации Suricata
- Septun -Mark -II - Руководство по настройке Extreme Performance - Mark II.
- Пост в блоге, представляющий эту функцию
- Приключения неотъемлемой части в Ebpf Land
- EBPF и XDP видели с глаз сукачки
Project Calico - Calico - это сетевое решение с открытым исходным кодом для сети и сетевой безопасности для контейнеров, виртуальных машин и рабочих нагрузок на основе Host. Плона Data Calico EBPF обеспечивает низкую задержку, высокую плоскость данных с высокой пропускной способностью с богатой моделью политики безопасности сети.
- Включение плоскости данных EBPF с calico
Merbridge - используйте EBPF, чтобы ускорить вашу сервисную сетку. Мербридж заменяет правила iptables на EBPF для перехвата трафика. Он также объединяет msg_redirect, чтобы уменьшить задержку с сокращенным данных между колясками и службами.
PCAPPLUSPLUS - библиотека C ++ с открытым исходным кодом для захвата, анализа и создания сетевых пакетов. Он оснащен интерфейсом C ++ для создания розеток AF_XDP, что позволяет легко отправлять и получать пакеты через них.
Наблюдаемость
- Inkev: виртуализация сети распределенной сети In-Kernel для DCN
- Deep-Mon-Помогает из измерения энергопотребления для серверов и использует программы EBPF для агрегации данных в ккнеле.
- Pixie - Наблюдаемость для Kubernetes с использованием EBPF. Особенности включают отслеживание протокола, профилирование приложений и поддержку распределенных развертываний BPFTrace.
- SkyWalking Rover-Apache SkyWalking-это платформа мониторинга производительности приложений с открытым исходным кодом (APM), специально разработанная для распределенных систем с микросервисами, облачными и контейнельными (Kubernetes) архитектурами. SkyWalking Rover-это коллекционер и метрики на основе EBPF для приложений C, C ++, Golang и Rust.
- PARCA-AGENT-EBPF, базирующийся всегда на непрерывном профилировтеле для анализа процессора и использования памяти, вплоть до номера строки и в течение времени.
- rbperf - Профилировщик и трассировщик отбора проб и трассера для Ruby.
- Хаббл - Всемирная наблюдение за обслуживанием и безопасностью для Kubernetes с использованием EBPF.
- CARETTA - Мгновенная карта зависимости обслуживания Kubernetes, сгенерированная EBPF, справа от экземпляра Grafana.
- DeepFlow - Мгновенная наблюдение за облачными приложениями и AI -приложениями на основе EBPF.
Безопасность
- Falco - облачный проект безопасности среды выполнения, используемый в качестве двигателя обнаружения угроз Kubernetes.
- Sysmon для Linux - инструмент мониторинга безопасности. Это зависит от SysinternalSebpf.
- Красная Canary Linux Agent - Red Canary начал включать EBPF в свой датчик безопасности Linux.
- Tracee - инструмент безопасности и криминалистики для выполнения Linux, который использует технологию EBPF для отслеживания системы и приложений во время выполнения и анализа собранных событий для обнаружения подозрительных поведенческих моделей.
- Redcanary-EBPF-Sensor-набор программ BPF, которые собирают соответствующие данные о событиях безопасности из ядра Linux. Программы BPF объединяются в один файл ELF, из которого отдельные зонды могут быть избирательно загружены, в зависимости от работающей операционной системы и версии ядра.
- BPFlock - Brock Linux Machines - инструмент безопасности, управляемый EBPF, для блокировки и аудита машин Linux.
- Tetragon-Kubernetes-Aware, EBPF, наблюдаемая наблюдением безопасности и соблюдением времени выполнения.
- Harpoon - Trace Syscalls из функций пользовательского пространства с помощью EBPF.
Инструменты
- Ply - небольшой, но гибкий динамический трассировщик с открытым исходным кодом для Linux, с функциями, похожими на инструменты BCC, но с более простым языком, вдохновленным AWK и DTRACE.
- BPFTRACE - инструмент для отслеживания с собственным языком отслеживания высокого уровня. Он достаточно гибкий, чтобы рассматриваться как замена Linux для DTRACE и SystemTAP.
- Шпаргалка BPFTRACE - Сводка и шпаргалка для программирования в BPFTRACE. Содержит информацию о синтаксисе, типах зондов, переменных и функциях.
- Kubectl Trace - плагин Kubectl для выполнения программ BPFTrace в кластере Kubernetes.
- Inspektor-Gadget-коллекция инструментов на основе EBPF для отладки и осмотра ресурсов и приложений Kubernetes.
- BPFD - Framework для запуска программ BPF с правилами Linux в качестве демона. Контейнер осведомлен.
- BPFD - отличный демон BPF, пытающийся использовать гибкость инструментов BCC для отслеживания и отладки удаленных целей, а также, в частности, устройства, работающие с Android.
- ADEB - среда Shell Linux для использования инструментов трассировки на Android с BPFD.
- Greggd - Системный демон для компиляции и загрузки программ EBPF в ядро и вывод программы вперед в сокет для метрической агрегации.
- Предохранитель - рассматривает использование EBPF.
- UPF-BPF-решение в ккнеле, основанное на XDP для 5G UPF.
- REDBPF - инструмент и фреймворк для эффективного написания кода EBPF в Rust.
- EBPF -Explorer - веб -интерфейс для изучения карт и программ системы.
- EBPFMON - приложение TUI (пользовательский интерфейс терминала) для мониторинга программ EBPF в реальном времени.
- BPFMAN - менеджер EBPF для Linux и Kubernetes. Включает встроенный программный загрузчик, который поддерживает программы сотрудничества для программ XDP и TC, а также развертывание программ EBPF из OCI Images.
- PTCPDUMP-инструмент, похожий на процесс, на основе EBPF на основе EBPF.
EBPF в безопасности
- Примите красный: оскорбительный BPF! - Серия постов вокруг введения в BPF с акцентом на наступательную обстановку, а также то, как можно обнаружить его неправильное использование. Сообщения включают в себя обсуждения о возможностях Rootkit EBPF, или для которых необходим тип отслеживания для различных вариантов использования.
- EBPF: Block Linux File File -Fielate «Удовлетворительная программа» с помощью BPF LSM - сообщения в блоге о том, как BPF может помочь обнаружить и блокировать безлиевые вредоносные программы.
- Блэкхат 2021: С такими друзьями, как EBPF, кому нужны враги? - Поговорите о EBPF Rootkit и о том, как можно злоупотреблять возможности EBPF. Руткит также был объектом разговора в Defcon, EBPF, я думал, что мы друзья!
- EBPFKIT - rootkit, который использует несколько функций EBPF для реализации методов наступления безопасности.
- EBPFKIT -MONITOR - утилита для статического анализа BYTECODE EBPF или мониторинга подозрительной активности EBPF во время выполнения. Он был специально разработан для обнаружения EBPFKIT.
- Bad BPF - коллекция вредоносных программ EBPF, которые используют способность EBPF читать и записывать пользовательские данные между программой UserMode и ядром.
- Triplecross - Linux ebpf rootkit с бэкдором, C2, инъекцией библиотеки, захватом исполнения, настойчивостью и скрытными возможностями.
Код
Linux/include/linux/bpf.h - с Linux/include/uapi/bpf.h: определения, связанные с EBPF, будут использоваться соответственно в ядре и взаимодействовать с программами пользователя.
linux/include/linux/filter.h - с Linux/include/uapi/filter.h: информация, используемая для самостоятельного запуска программ BPF.
Linux/Kernel/BPF/ - Этот каталог содержит большую часть кода, связанного с BPF. В частности, эти файлы заинтересованы:
-
syscall.c - различные операции, разрешенные системным вызовом, например, загрузка программы или управление картой. -
core.c - BPF интерпретатор. -
verifier.c - BPF Verifier.
Linux/net/core/filter.c - функции и помощники EBPF, связанные с сетью (TC, XDP и т. Д.); Также содержит код для миграции Bytecode CBPF в EBPF (все программы CBPF переводятся в EBPF в недавних ядрах).
Linux/Kernel/Trace/BPF_TRACE.C - Функции и помощники EBPF, связанные с трассировкой и мониторингом (Kprobes, Tracepoints и т. Д.).
Компиляторы JIT находятся в каталоге их соответствующих архитектур, таких как File Linux/Arch/x86/Net/BPF_JIT_COMP.C для x86. Исключение сделано для компиляторов JIT, используемых для выгрузки аппаратного обеспечения, сидящих в своих драйверах, таких как Linux/Drivers/Net/Ethernet/Netronome/NFP/BPF/JIT.C для Netronome NFP.
Linux/net/share/ - и, в частности, в файлах act_bpf.c (action) и cls_bpf.c (фильтр): код, связанный с действиями BPF и фильтрами с TC.
Linux/kernel/seccomp.c
linux/net/core/dev.c - содержит функцию dev_change_xdp_fd() , которая вызывается через команду NetLink, чтобы подключить программу XDP к устройству, после того, как IS был загружен в ядро из пользовательского пространства. Эта функция, по очереди, использует обратный вызов соответствующего драйвера.
Развитие и сообщество
- Дерево BPF -NEXT - Пласти BPF приземляются в этом дереве. Он регулярно объединяется в сетевой Next, который сам по себе объединяется для каждого выпуска с деревом Линуса.
- Документация ядра - о вкладе в BPF.
- Список рассылки NetDev - список рассылки для разработки сети Linux Kernel Networking Stack. Все патчи отправляются туда для просмотра и включения.
- XDP -Newbies - список рассылки, специально посвященный программированию XDP (как для архитектуры, так и для просьбы о помощи).
- Список рассылки козырьков IO - BPF лежит в основе проекта и регулярно обсуждается в списке рассылки.
- @Iovisor Twitter Account
- Проект совместной работы XDP - репозиторий GitHub с заметками и идеями, касающимися будущих эволюций XDP.
Другие списки ресурсов на EBPF
- Документация BCC IO козырька
- Репозиторий BPF-DOCS IO козырька
- Погрузитесь в BPF: список материалов для чтения
Подтверждение
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.
Внося
Contributions welcome! Read the contribution guidelines first.
Лицензия
To the extent possible under law, zoidbergwill has waived all copyright and related or neighboring rights to this work.