Arsitektur Jaringan eBPF: XDP, Socket Bypass & Keamanan Cilium

cloudDiperbarui: 16 Oktober 2026Sumber Primer

Panduan rekayasa infrastruktur mengenai revolusi eBPF di dalam kernel Linux: membedah mesin virtual 64-bit, bukti keamanan statis Verifier, kompilasi JIT ke instruksi mesin asli, pemrosesan paket eXpress Data Path (XDP) sebelum alokasi sk_buff, pemintasan soket TCP/IP pada Cilium, hingga penegakan keamanan runtime sinkron berbasis LSM di Tetragon.

tv
Redaksi tveniu
Divisi Analisis & Riset
Arsitektur Jaringan eBPF: XDP, Socket Bypass & Keamanan Cilium

Selama puluhan tahun, arsitek sistem terdistribusi dan insinyur jaringan dihadapkan pada dilema struktural saat membutuhkan inovasi di tingkat sistem operasi: memodifikasi kode sumber kernel Linux secara langsung (yang membutuhkan waktu bertahun-tahun agar diterima di upstream atau berisiko memicu kernel panic jika menggunakan modul kernel pihak ketiga), atau memindahkan pemrosesan ke ruang pengguna (user space) yang harus membayar pajak perpindahan konteks (context switch) serta penyalinan memori yang mahal.

Extended Berkeley Packet Filter (eBPF) mengubah arsitektur sistem operasi modern secara fundamental dengan menyediakan mesin virtual berkinerja tinggi yang terisolasi (sandboxed) langsung di dalam kernel Linux. Dengan eBPF, program kustom dapat disuntikkan secara dinamis ke ribuan titik kait (hook points)—mulai dari driver kartu jaringan (NIC), tumpukan protokol TCP/IP, pemanggilan sistem (syscalls), hingga Linux Security Modules (LSM)—tanpa perlu melakukan kompilasi ulang kernel maupun me-reboot server. Panduan arsitektur evergreen ini membedah mekanika internal eBPF Verifier dan kompilator JIT, arsitektur eXpress Data Path (XDP) untuk mitigasi paket berkecepatan 100GbE+, akselerasi jaringan kontainer Cilium tanpa iptables, serta observabilitas keamanan zero-overhead dengan Tetragon.

1. Batas Fisik Tumpukan Jaringan Linux Tradisional pada Kecepatan 100GbE+

Untuk memahami mengapa tumpukan jaringan kernel Linux standar mengalami kemacetan pada klaster cloud-native modern, perhatikan anggaran waktu yang tersedia pada antarmuka jaringan berkecepatan tinggi. Pada kartu jaringan (NIC) 100 Gigabit Ethernet (100GbE) yang menerima paket berukuran minimum (64 byte), laju kedatangan paket maksimum mencapai sekitar 148,8 juta paket per detik (Mpps). Artinya, satu inti CPU hanya memiliki waktu sekitar 6,72 nanodetik untuk memproses satu paket jika ingin mempertahankan kecepatan kabel penuh (line rate).

Pada jalur jaringan Linux tradisional, setiap paket yang tiba melalui DMA (Direct Memory Access) ke Ring Buffer RX akan memicu NAPI softirq. Kernel kemudian mengalokasikan struktur metadata kompleks bernama sk_buff (socket buffer) yang membutuhkan ruang memori ratusan byte serta operasi manajemen memori per paket. Lebih buruk lagi, pada klaster Kubernetes yang menggunakan kube-proxy berbasis iptables, setiap paket harus melewati rantai aturan sekuensial dengan kompleksitas O(N). Ketika sebuah klaster memiliki 10.000 layanan (Services), evaluasi ribuan aturan iptables dan pelacakan status koneksi (conntrack) mengonsumsi puluhan mikrodetik per paket dan menghabiskan siklus CPU hanya untuk perutean internal.

2. Mesin Virtual eBPF: Arsitektur Register, Verifier Statis, dan Kompilasi JIT

Berbeda dari BPF klasik (cBPF) yang hanya memiliki dua register 32-bit untuk penyaringan paket tcpdump, eBPF modern merupakan arsitektur set instruksi RISC 64-bit yang dirancang agar dapat dipetakan satu-lawan-satu (one-to-one mapping) ke register perangkat keras prosesor modern seperti x86_64 dan ARM64. Mesin virtual eBPF memiliki 11 register 64-bit (R0 hingga R10), sebuah program counter, serta ruang tumpukan (stack) terisolasi berukuran 512 byte.

Poin Kunci & Temuan
  • Konvensi Register & Helper Functions: Register R0 menyimpan nilai kembalian fungsi dan kode keluar program; R1 hingga R5 digunakan sebagai argumen saat program eBPF memanggil fungsi pembantu kernel (BPF Helper Functions / kfuncs); R6 hingga R9 merupakan register callee-saved yang nilainya dipertahankan lintas pemanggilan fungsi; dan R10 adalah penunjuk frame tumpukan (stack pointer) yang bersifat baca-saja (read-only).
  • In-Kernel Static Verifier (Jaminan Keamanan Matematis): Sebelum bytecode eBPF diizinkan masuk ke ruang eksekusi kernel melalui syscall bpf(), In-Kernel Verifier melakukan analisis lintasan kode secara menyeluruh menggunakan struktur Directed Acyclic Graph (DAG). Verifier memastikan program bebas dari loop tak terbatas (hanya mengizinkan bounded loops dengan batas iterasi terbukti), melacak tipe dan batas setiap pointer memori agar tidak pernah melakukan dereferensi NULL atau membaca alamat memori kernel sembarangan, serta mencegah kebocoran kunci (lock leaks).
  • Just-In-Time (JIT) Native Compilation: Setelah lulus pemeriksaan Verifier, kompilator JIT di dalam kernel menerjemahkan bytecode eBPF langsung menjadi instruksi mesin asli (native machine opcodes) untuk x86_64 atau ARM64. Hasilnya, program eBPF berjalan dengan kecepatan yang setara dengan kode C kernel yang dikompilasi secara bawaan, tanpa overhead interpretasi mesin virtual.
  • Komunikasi State Melalui BPF Maps: Karena variabel lokal pada stack 512 byte bersifat sementara untuk satu eksekusi peristiwa, eBPF menggunakan struktur data persisten bernama BPF Maps (seperti Per-CPU Hash Table, Array, Longest-Prefix Match/LPM Trie untuk tabel routing IP, serta BPF Ring Buffer) untuk berbagi status antar panggilan paket maupun mengirim telemetri berkecepatan tinggi ke aplikasi ruang pengguna tanpa kunci (lockless).

3. eXpress Data Path (XDP): Pemrosesan Paket Sebelum Alokasi sk_buff

Inovasi paling radikal dari eBPF pada lapisan jaringan adalah eXpress Data Path (XDP). XDP memungkinkan program eBPF dieksekusi langsung di dalam fungsi NAPI poll milik driver kartu jaringan (NIC), tepat pada saat deskriptor paket baru saja diterima di Ring Buffer RX dan SEBELUM kernel Linux melakukan alokasi struktur sk_buff maupun memasukkan paket ke tumpukan jaringan OS.

c
// Contoh program eBPF/XDP di dalam driver NIC untuk memblokir banjir paket DDoS:
SEC("xdp")
int xdp_ddos_filter(struct xdp_md *ctx) {
    void *data_end = (void *)(long)ctx->data_end;
    void *data     = (void *)(long)ctx->data;

    struct ethhdr *eth = data;
    if ((void *)(eth + 1) > data_end)
        return XDP_PASS; // Pemeriksaan batas pointer wajib bagi eBPF Verifier

    if (eth->h_proto != bpf_htons(ETH_P_IP))
        return XDP_PASS;

    struct iphdr *iph = (void *)(eth + 1);
    if ((void *)(iph + 1) > data_end)
        return XDP_PASS;

    __u32 src_ip = iph->saddr;
    __u64 *drop_cnt = bpf_map_lookup_elem(&denylist_lpm_map, &src_ip);
    if (drop_cnt) {
        __sync_fetch_and_add(drop_cnt, 1);
        return XDP_DROP; // Paket langsung dibuang di tingkat DMA buffer (0 alokasi sk_buff)
    }
    return XDP_PASS;
}

Program XDP mengembalikan salah satu dari lima kode keputusan instan (verdicts): (1) XDP_DROP—membuang paket seketika di tingkat driver dan mendaur ulang halaman memori DMA, memungkinkan satu inti CPU menahan serangan DDoS lebih dari 20 juta paket per detik; (2) XDP_TX—memantulkan paket yang telah dimodifikasi (misalnya setelah penyeimbangan beban DSR/Direct Server Return atau enkapsulasi IPIP/Maglev) kembali keluar melalui antarmuka NIC yang sama; (3) XDP_REDIRECT—meneruskan paket langsung ke antarmuka NIC lain, ke CPU lain, atau langsung ke soket ruang pengguna melalui AF_XDP (zero-copy bypass); serta (4) XDP_PASS—menyerahkan paket ke tumpukan TCP/IP kernel Linux normal untuk alokasi sk_buff.

4. Cilium & Pemintasan Soket: Mengganti iptables dan Sidecar Proxy

Pada infrastruktur Kubernetes berskala produksi, proyek CNCF Cilium memanfaatkan eBPF pada lapisan Traffic Control (tc) dan Socket Layer (cgroup/sock_ops, sk_msg) untuk merombak total arsitektur jaringan kontainer dan Service Mesh:

Poin Kunci & Temuan
  • Penggantian kube-proxy O(1) Berbasis Tabel Hash eBPF: Alih-alih menyusun puluhan ribu aturan sekuensial iptables yang melambat secara linier O(N), Cilium menyimpan pemetaan ClusterIP ke Pod Endpoint di dalam BPF Hash Map. Bahkan ketika klaster tumbuh dari 100 menjadi 50.000 layanan Kubernetes, waktu pencarian perutean dan Network Address Translation (NAT) tetap konstan O(1) dalam hitungan nanodetik.
  • Socket-Level Load Balancing (Koneksi Langsung pada connect()): Pada arsitektur tradisional, paket dari Pod klien harus dibuat terlebih dahulu dengan alamat tujuan ClusterIP virtual, melewati antarmuka veth, lalu mengalami penulisan ulang header IP (DNAT) di tengah jalan. Cilium mencegat panggilan sistem connect() dan sendmsg() langsung di tingkat soket (cgroup/connect4) dan langsung mengganti alamat tujuan menjadi IP Pod backend aktual sebelum paket TCP SYN pertama dibuat.
  • Socket Map Short-Circuiting (sockmap / sk_msg): Ketika dua kontainer atau proses (misalnya aplikasi dan proxy envoy pada node yang sama) berkomunikasi melalui loopback lokal, program eBPF sk_msg memintas seluruh lapisan TCP/IP, pembentukan paket IP, dan antarmuka virtual dengan memindahkan payload langsung dari buffer kirim soket sumber ke antrean terima soket tujuan di dalam memori kernel.

5. Observabilitas Zero-Overhead & Keamanan Runtime Sinkron dengan Tetragon

Selain jaringan, eBPF telah menjadi standar emas untuk observabilitas performa (continuous profiling) dan keamanan runtime cloud-native. Alat keamanan generasi lama mengandalkan intersepsi ptrace, modul auditd, atau pemantauan daftar proses /proc secara berkala. Pendekatan ruang pengguna tersebut tidak hanya membebani CPU hingga 10–20% pada beban produksi tinggi, tetapi juga rentan terhadap serangan Time-of-Check to Time-of-Use (TOCTOU)—di mana proses berbahaya yang berumur beberapa milidetik berhasil mengeksekusi eksploitasi dan berhenti sebelum alat pemantau membaca perubahan statusnya.

Mesin keamanan runtime berbasis eBPF seperti Cilium Tetragon memasang sensor langsung pada fungsi internal kernel (kprobes, tracepoints) serta kait Linux Security Module (LSM BPF). Ketika sebuah kontainer mencoba melakukan eskalasi hak akses (privilege escalation), memodifikasi berkas sistem sensitif (/etc/shadow), atau membuka koneksi jaringan keluar yang melanggar kebijakan identitas, program eBPF LSM mengevaluasi konteks proses penuh (silah pohon proses/process ancestry, namespace Kubernetes, pod labels, serta kapabilitas Linux) secara sinkron di dalam konteks eksekusi kernel dan dapat langsung menggagalkan operasi maupun mengirimkan sinyal SIGKILL ke proses penyerang sebelum instruksi berbahaya tersebut sempat menyentuh perangkat keras.

6. Matriks Komparatif Arsitektur Datapath Jaringan Kernel

Tabel berikut membandingkan karakteristik arsitektur, kompleksitas algoritma, dan profil latensi antara empat generasi datapath jaringan Linux pada lingkungan produksi:

text
+--------------------------+--------------------+--------------------+---------------------+---------------------+
| Dimensi Arsitektur       | Linux iptables     | Linux IPVS         | Cilium eBPF (TC /   | eBPF XDP (Native    |
|                          | (Netfilter)        | (Netfilter Hash)   | Socket Layer)       | Driver Hook)        |
+--------------------------+--------------------+--------------------+---------------------+---------------------+
| Titik Eksekusi di Kernel | Lapisan Netfilter  | Lapisan Netfilter  | Socket (connect) &  | Driver RX Ring      |
|                          | (Setelah sk_buff)  | (Setelah sk_buff)  | Traffic Control (TC)| (Sebelum sk_buff)   |
| Kompleksitas Pencarian   | O(N) Rantai Linier | O(1) Tabel Hash    | O(1) BPF Map +      | O(1) BPF Map / LPM  |
| Aturan Layanan           |                    | (Masih via Hook)   | Socket Bypass       | Trie di Memori DMA  |
| Throughput Paket / Core  | ~0,5 - 1,2 Mpps    | ~1,5 - 2,5 Mpps    | ~5 - 10 Mpps        | ~18 - 24+ Mpps      |
| Overhead Memori per Pkt  | Alokasi sk_buff    | Alokasi sk_buff    | Nol pada Socket     | Nol (Zero-Copy      |
|                          | penuh + conntrack  | penuh + conntrack  | Short-Circuit       | DMA Frame)          |
| Pembaruan Kebijakan      | Tulis ulang tabel  | Inkremental tetapi | Inkremental atomik  | Inkremental atomik  |
| (10.000+ Services)       | penuh (Detik/Menit)| terbatas di L4     | via BPF Map (<1ms)  | via BPF Map (<1ms)  |
| Visibilitas Konteks      | Hanya IP & Port    | Hanya IP & Port    | Identitas Pod, L7,  | Paket L2/L3/L4      |
|                          |                    |                    | Proses & K8s Labels | Kecepatan Kabel     |
+--------------------------+--------------------+--------------------+---------------------+---------------------+

“Sebagaimana JavaScript mengubah peramban web dari pembaca dokumen statis menjadi platform aplikasi yang dapat diprogram secara aman, eBPF mengubah kernel Linux menjadi datapath jaringan, observabilitas, dan keamanan yang dapat diprogram pada kecepatan perangkat keras tanpa mengorbankan stabilitas sistem operasi.”

Rujukan & Sumber Primer

  1. ACM CoNEXT Primary Paper: The eXpress Data Path: Fast Programmable Packet Processing in the OS Kernel (Høiland-Jørgensen et al.)
  2. Linux Kernel Official Documentation: BPF Internals, Verifier & JIT Architecture
  3. Cilium Official Technical Reference: eBPF & XDP Kernel Datapath Architecture
  4. eBPF Foundation Official Technical Specification: Runtime, Maps & Hook Points
  5. Cilium Official CNCF Graduated Repository: eBPF-Based Networking, Observability & Security
  6. Cilium Tetragon Official Repository: eBPF-Based Security Observability & Runtime Enforcement

Cloudflare Gateway: Proxy Workers Inline & DLP Terprogram

cloud

Cloudflare mengintegrasikan penuh Cloudflare Gateway dan Data Loss Prevention (DLP) dengan runtime Cloudflare Workers di lebih dari 330 lokasi edge, memungkinkan tim keamanan menjalankan kode kustom inline tanpa latensi network hairpinning.

Baca analisis→

Cloudflare & OpenAI: Sinyal Jaringan untuk Penemuan Web Agen

cloud

Hasil uji coba riset gabungan Cloudflare dan OpenAI pada 1% jaringan global Cloudflare berhasil menemukan ratusan juta halaman web baru untuk ChatGPT Search dalam hitungan detik setelah publikasi, sekaligus memangkas beban kueri crawler yang terbuang.

Baca analisis→

Meta Muse Spark Open: Model 816B di Apple M5 Ultra

ai

Meta meluncurkan bobot model Muse Spark Open berkapasitas 816 miliar parameter dengan jendela konteks 1 juta token, menghadirkan eksekusi agen otonom dan multimodal langsung di desktop Mac Studio menggunakan framework Apple MLX.

Baca analisis→