BastionGuard/thirdparty/bastionguard-secure-connection/daemon/ebpf
specialworld83 f0f913a209 Release 2.0
2026-07-15 10:52:22 +02:00
..
bsc_ebpf.c Release 2.0 2026-07-15 10:52:22 +02:00
README.md Release 2.0 2026-07-15 10:52:22 +02:00

vmlinux.h — BTF kernel headers

Questo file NON è incluso nel repository perché dipende dalla versione esatta del kernel in esecuzione sulla macchina target.

Generazione automatica (preferita)

Il meson.build genera vmlinux.h automaticamente durante il build se bpftool è installato:

sudo apt install linux-tools-$(uname -r) linux-tools-generic
meson setup build --prefix=/usr
meson compile -C build

Generazione manuale

bpftool btf dump file /sys/kernel/btf/vmlinux format c > daemon/ebpf/vmlinux.h

Versione pre-generata

In alternativa, usa il vmlinux.h fornito da libbpf-bootstrap: https://github.com/libbpf/libbpf-bootstrap/blob/master/vmlinux/vmlinux.h

Copia il file corretto per la tua architettura (x86_64, arm64) in questa directory prima di eseguire meson compile.

Compatibilità kernel

  • Kernel >= 5.2: ring buffer disponibile (BPF_MAP_TYPE_RINGBUF)
  • Kernel >= 5.8: bpf_ringbuf_reserve/submit stabile, BPF_MAP_TYPE_LRU_HASH stabile
  • CONFIG_DEBUG_INFO_BTF=y richiesto (standard su tutte le distro moderne)

Probe attivi (v2)

bsc_ebpf.c aggancia tre punti distinti del kernel per massimizzare la coverage di connessioni rilevate:

Sezione SEC() Cosa cattura
tracepoint/sock/inet_sock_set_state transizioni TCP a ESTABLISHED (active+passive)
kprobe/tcp_v4_connect, kprobe/tcp_v6_connect ogni connect() TCP, anche falliti
kprobe/udp_sendmsg, kprobe/udpv6_sendmsg UDP sendto()/sendmsg() con destinazione esplicita

La deduplicazione avviene nel kernel tramite una BPF_MAP_TYPE_LRU_HASH con chiave <pid, dst_ip, dst_port> — senza dedup, un client QUIC riempirebbe la ring buffer in millisecondi.

Se il caricamento di un singolo kprobe fallisce (simbolo non presente su kernel custom o stripped), il loader userspace prosegue comunque con i probe che ha attaccato con successo — meglio coverage parziale che niente.

Verificare con:

zgrep CONFIG_DEBUG_INFO_BTF /proc/config.gz 2>/dev/null || \
  grep CONFIG_DEBUG_INFO_BTF /boot/config-$(uname -r)