NetObserv
Observabilité réseau
et eBPF
∘
Joël Takvorian
Qui suis-je?
NetObserv en bref
NetObserv démo
si les dieux du Wifi le veulent
🪄
Mais encore ?
Une vue Topologie
Mais encore ?
Une vue détaillée
Mais encore ?
Plein
de
stats.
NetObserv & eBPF
Composants NetObserv
Architecture NetObserv
eBPF vous dîtes?
L’idée de base : injecter dans le kernel un programme depuis l’espace utilisateur*, au runtime, de façon sûre.
*sans devoir le recompiler à chaque màj du noyau
Comment ça marche?
Historique rapide
Cas d’usage: observation
Exemple de code
Exemple de code
Exemple de code
// Attributes that uniquely identify a flow
typedef struct flow_id_t {
u8 src_ip[IP_MAX_LEN];
u8 dst_ip[IP_MAX_LEN];
u16 src_port;
u16 dst_port;
u8 transport_protocol;
} flow_id;
// Key: the flow identifier. Value: the flow metrics.
struct {
__uint(type, BPF_MAP_TYPE_HASH);
__type(key, flow_id);
__type(value, flow_metrics);
__uint(max_entries, 1 << 24);
__uint(map_flags, BPF_F_NO_PREALLOC);
__uint(pinning, LIBBPF_PIN_BY_NAME);
} flows_map SEC(".maps");
//go:generate bpf2go -cc clang -cflags $BPF_CFLAGS -target amd64,arm64 -type flow_metrics_t -type flow_id_t Bpf ../bpf/flows.c -- -I../bpf/headers
Exemple de code
SEC("classifier/tcx_ingress")
int tcx_ingress_flow_parse(struct __sk_buff *skb) {
flow_id id;
__builtin_memset(&id, 0, sizeof(id));
if (fill_ethhdr(&id, skb->data, skb->data_end)) {
u64 time = bpf_ktime_get_ns();
flow_metrics *metrics = (flow_metrics*) bpf_map_lookup_elem(&flow_map, &id);
if (metrics == NULL) {
flow_metrics new_metrics = {
.packets = 1,
.bytes = skb->len,
.start_mono_time_ts = time,
.end_mono_time_ts = time,
};
bpf_map_update_elem(&flow_map, &id, &new_metrics, BPF_NOEXIST);
} else {
metrics->packets += 1;
metrics->bytes += skb->len;
metrics->end_mono_time_ts = time;
}
}
return TCX_NEXT;
}
Verifier & limitations
On ne fait pas tout ce qu’on veut! (mais c’est pour la bonne cause)
NetObserv & eBPF
Que fait NetObserv d’autre avec eBPF?
NetObserv & eBPF
Que fait NetObserv d’autre avec eBPF?
Futur-NetObserv & eBPF
Que pourrait-on faire d’autre avec eBPF?
Risques et sécurité
CAP_NET_ADMIN, CAP_SYS_RESOURCE
Risques et sécurité
Non, installer un programme eBPF n’est pas anodin
Risques et sécurité
Risques et sécurité
1 mois avant la fameuse panne Windows, une panne étonnamment similaire touchait… Red Hat
… via eBPF
https://www.theregister.com/2024/07/21/crowdstrike_linux_crashes_restoration_tools/
Risques et sécurité
bpfman
“An eBPF Manager”, sandbox CNCF (Tech preview dans OpenShift)
Q
A
&
&
MERCI!