|
ebpf-blocker 1.0.0
XDP-based packet blocker using eBPF
|
XDP BPF-программа фильтрации пакетов по whitelist/blacklist. More...
#include <bpf/bpf_endian.h>#include <bpf/bpf_helpers.h>#include <linux/bpf.h>#include <linux/if_ether.h>#include <linux/ip.h>Go to the source code of this file.
Data Structures | |
| struct | lpm_key |
| Ключ для LPM trie-карт: длина префикса + IP в network byte order. More... | |
Functions | ||
| struct { | ||
| } | SEC (".maps") | |
| LPM trie чёрного списка: IP-адреса источников для немедленного сброса. | ||
| __uint (type, BPF_MAP_TYPE_LPM_TRIE) | ||
| __uint (max_entries, 65536) | ||
| __type (key, struct lpm_key) | ||
| __type (value, __u32) | ||
| __uint (map_flags, BPF_F_NO_PREALLOC) | ||
| __uint (type, BPF_MAP_TYPE_HASH) | ||
| __type (key, __u32) | ||
| __type (value, __u64) | ||
| int | xdp_blocker_func (struct xdp_md *ctx) | |
| char _license[] | SEC ("license") | |
| Лицензия BPF-программы (требуется верификатором ядра). | ||
XDP BPF-программа фильтрации пакетов по whitelist/blacklist.
Компилируется clang -target bpf и встраивается в userspace-бинарник в виде C-массива байткода (через xxd).
Обработка пакета:
Definition in file blocker_kern.c.
| @2::__type | ( | key | , |
| __u32 | ) |
| __type | ( | key | , |
| struct lpm_key | ) |
| __type | ( | value | , |
| __u32 | ) |
| @2::__type | ( | value | , |
| __u64 | ) |
| __uint | ( | map_flags | , |
| BPF_F_NO_PREALLOC | ) |
| __uint | ( | max_entries | , |
| 65536 | ) |
| @2::__uint | ( | type | , |
| BPF_MAP_TYPE_HASH | ) |
| __uint | ( | type | , |
| BPF_MAP_TYPE_LPM_TRIE | ) |
| struct @2 SEC | ( | ".maps" | ) |
LPM trie чёрного списка: IP-адреса источников для немедленного сброса.
Хэш-карта счётчиков дропов: количество отброшенных пакетов по source IP.
LPM trie белого списка: IP-адреса источников, пропускаемые без проверки чёрного списка.
| char _license[] SEC | ( | "license" | ) |
Лицензия BPF-программы (требуется верификатором ядра).
| int xdp_blocker_func | ( | struct xdp_md * | ctx | ) |
Точка входа XDP: фильтрует пакеты по картам whitelist и blacklist.
| [in] | ctx | Метаданные XDP (указатели на данные пакета). |
Definition at line 58 of file blocker_kern.c.
References lpm_key::ip, and lpm_key::prefixlen.