Демонстрация возможности написания eBPF Firewall на Rust, оно же Proof Of Concept.
- Поддерживает
IPv4/v6,TCP/UDP. - Для обработки исходящих соединений используется
Classifiers. - Для обработки входящих -
eXpress Data Path. - Логирование целиком в
userspace. - HTTP REST API для управления фаерволом.
- Web UI.
- Поддержка архитектур:
x86_64,armv7,aarch64.
-
rbpf-common- Общие структуры, которыми компоненты обмениваются черезBPF_MAPSuser space <-> eBPF (kernel space) или control Unix Socket. -
rbpf-ebpf- eBPF модуль загружаемый в ядро. -
rbpf-http- HTTP REST API сервер, так какrbpf-loaderзапускается из-подrootчто бы иметь возможность загрузить eBPF модуль, то в самомrbpf-loaderмы не можем держать HTTP REST API сервер. Запускать HTTP сервер отroot- крайне плохая затея с точки зрения безопасности. -
rbpf-loader- Модуль загружающийrbpf-ebpf, и обеспечивающий связь между user space и eBPF (kernel space). Может создавать Unix Socket для приёма команд. -
rbpf-ui- WebUI (Single Page Application написанное на Vue.js v3). Служит для вывода информации и управления eBPF модулем.
(eBPF module in kernel) ->(RingBuf)->(loader module in root space)->(unix socket)->(HTTP module in user space)->(web socket)->(browser)
(browser)->(HTTP request)->(HTTP module in user space)->(unix socket)->(loader module in root space)->(BPF HASH MAP)->(eBPF module in kernel)