Kalau kalian mengelola server yang public-facing, cepat atau lambat kalian akan berhadapan dengan satu musuh bebuyutan: serangan DDoS (Distributed Denial of Service). Serangan ini membanjiri server kalian dengan trafik sampah, menghabiskan resource (CPU, bandwidth, memory) hingga server kalian lumpuh dan tidak bisa melayani trafik yang sah.
Metode tradisional untuk mitigasi ini biasanya pakai iptables atau nftables. Masalahnya? iptables itu lambat dan bekerja di level yang “terlalu dalam”.
Bayangkan server kalian punya port 1Gbps. Kalau serangan DDoS datang dengan rate 1Gbps, pipe kalian sudah penuh. Selesai. Mau pakai iptables secanggih apapun, port-nya udah saturated duluan sama paket sampah. Trafik yang sah (legit) gak akan kebagian jalan.
Parahnya lagi, iptables bekerja di dalam network stack kernel. Artinya, setiap paket sampah itu sudah terlanjur masuk ke kernel, dialokasikan memorinya (SKB - Socket Buffer), baru kemudian di-filter. Ini boros CPU banget. Saat diserang jutaan paket per detik (Mpps), CPU kalian bakal stuck di 100% hanya untuk membuang sampah. Pipe penuh, CPU jebol. Lengkap sudah.
Di sinilah teknologi game-changer masuk: eBPF dan XDP.
Apa Itu eBPF dan XDP?
Mari kita bedah satu per satu dengan analogi sederhana.
eBPF (extended Berkeley Packet Filter)
Bayangkan Kernel Linux itu adalah sebuah sistem operasi super aman yang tidak bisa kalian modifikasi seenaknya. Nah, eBPF adalah “JavaScript-nya Kernel”.
Ini adalah teknologi yang memungkinkan kita menjalankan program kecil (sandboxed) di dalam kernel itu sendiri, tanpa harus mengubah kode kernel atau me-reboot server. Program eBPF ini di-JIT (Just-In-Time) compile ke native machine code, membuatnya berjalan dengan kecepatan native dan sangat aman.
XDP (Express Data Path)
Jika eBPF adalah programnya, XDP adalah hook atau “lokasi”-nya. Dan ini adalah lokasi paling strategis di seluruh network path.
XDP adalah hook yang berada langsung di dalam network driver, tepat setelah paket diterima oleh NIC (Network Interface Card), dan sebelum paket itu masuk ke network stack utama Linux (bahkan sebelum iptables).
Note (Seberapa Cepat 'Sebelum Kernel Stack'?)
Sangat cepat. Karena program XDP berjalan di level driver, ia bisa memproses paket sebelum kernel mengalokasikan memori (SKB) untuk paket tersebut. Jika kita memutuskan untuk membuang paket di level XDP, cost-nya hampir nol. Inilah kuncinya.
Cara Kerja Mitigasi DDoS dengan XDP
Saat program eBPF kita di-attach ke hook XDP, program itu akan dieksekusi untuk setiap paket yang masuk. Program ini kemudian harus mengambil keputusan cepat.
Program eBPF di XDP bisa mengembalikan beberapa verdict (keputusan):
Definition (XDP Verdicts (Keputusan XDP))
XDP_PASS: “Paket ini terlihat aman.” Izinkan paket melanjutkan perjalanannya masuk ke network stack kernel (untuk diprosesiptables, TCP/IP stack, dan aplikasi kalian).XDP_DROP: “Ini paket sampah.” Buang paket ini detik ini juga. Server (kernel) bahkan tidak akan pernah tahu paket ini ada. Ini adalah aksi utama kita untuk mitigasi DDoS.XDP_TX: “Balikin.” Kirim paket ini kembali ke NIC tempat ia datang. Berguna untuk load balancer.XDP_REDIRECT: “Oper ke sana.” Teruskan paket ini ke NIC lain atau userspace (via AF_XDP) tanpa menyentuh kernel stack.
Saat terjadi serangan DDoS (misalnya UDP flood), jutaan paket sampah akan datang. Program XDP kita akan mengeksekusi logika filtering kita dan mengembalikan XDP_DROP untuk 99% paket tersebut.
Hasilnya? Paket serangan dibuang dengan resource CPU yang minimal, dan server kita masih punya banyak resource untuk melayani trafik yang sah (yang kita beri XDP_PASS).
Seberapa Efektif XDP vs iptables?
Perbedaannya ada di performa.
- iptables/nftables: Berjalan di dalam kernel network stack. Perlu alokasi SKB. Saat aturan semakin banyak, performa menurun drastis. Rata-rata “hanya” sanggup memproses 1-5 Juta Paket Per Detik (Mpps) sebelum CPU choke (dan ini dengan asumsi pipe kalian belum penuh!).
- XDP: Berjalan di driver (pre-SKB). JIT-compiled. Sanggup memproses 10-40 Juta Paket Per Detik (Mpps) per core.
Performa XDP puluhan kali lipat lebih cepat dan efisien. Ini adalah teknologi yang dipakai oleh perusahaan raksasa seperti Cloudflare, Meta, dan Google untuk menangani trafik masif di edge mereka.
Important (Driver & Hardware Support)
Satu-satunya “kekurangan” XDP adalah ia bergantung pada support dari network driver kalian. NIC modern (Intel, Mellanox, Broadcom) biasanya sudah mendukung mode XDP native (tercepat). Jika tidak, kernel menyediakan mode generic (xdpgeneric) yang berjalan sedikit lebih lambat (setelah SKB dialokasikan, tapi masih sebelum iptables) yang tetap jauh lebih kencang daripada filtering murni iptables.
Ekosistem & Library (Go, Rust, dll)
Menulis program eBPF pakai Restricted C murni itu agak rumit. Untungnya, ekosistemnya sudah matang dan ada banyak library modern untuk bahasa favorit kita:
-
Go (Golang): Sangat populer di dunia cloud-native.
cilium/ebpf: Ini adalah library de-facto untuk eBPF di Go. Dikembangkan oleh tim di balik Cilium, library ini memungkinkan kalian untuk me-load dan berinteraksi dengan program eBPF dari aplikasi Go.dropbox/go-ebpf: Pilihan lain yang juga solid.
-
Rust: Dikenal karena keamanan dan performanya, Rust jadi pilihan alami untuk eBPF.
aya: Framework eBPF untuk Rust yang sedang naik daun. Memungkinkan kalian menulis program eBPF dan aplikasi userspace-nya murni di Rust.redbpf: Toolchain lain untuk membangun program eBPF dengan Rust.
-
C/C++:
libbpf: Library C modern dari kernel yang menjadi dasar bagi banyak tool lain.BCC (BPF Compiler Collection): Framework lama (Python/C++) yang bagus untuk tracing dan debugging, tapi kurang ideal untuk production networking dibandinglibbpf.
Use Case XDP & eBPF (Selain DDoS)
DDoS mitigation hanyalah salah satu use case. Kekuatan eBPF/XDP sebenarnya jauh lebih luas:
- High-Performance Load Balancing: Proyek seperti Cilium dan Katran (dari Meta/Facebook) menggunakan XDP untuk membuat L4 Load Balancer yang bisa memproses jutaan request per detik, menggantikan
IPVS. - Network Observability & Monitoring: Karena eBPF bisa “melihat” semua syscall dan paket, tools seperti Pixie dan Falco menggunakannya untuk memantau performa aplikasi dan mendeteksi anomali keamanan secara mendalam tanpa overhead.
- Network Security & Filtering: Cilium menggunakan eBPF untuk menerapkan network policy antar microservice di Kubernetes dengan sangat efisien.
- Tracing & Profiling: Tools seperti
bpftracememungkinkan sysadmin untuk men-debug masalah performa live di production kernel tanpa henti.
Contoh Repository Siap Pakai
Tidak semua orang harus menulis program XDP dari nol. Ada banyak proyek open-source yang bisa kalian gunakan langsung:
-
gamemann/XDP-Firewall Ini adalah firewall berbasis XDP yang simpel dan fungsional, seperti yang kalian sebutkan. Kalian bisa menggunakannya untuk memblokir IP, port, atau string/protocol tertentu dengan performa tinggi.
-
xdp-project/xdp-tutorial Bagi yang ingin belajar step-by-step cara membuat program XDP, ini adalah sumber terbaik. Isinya lengkap dari dasar parsing paket sampai membuat blacklist dinamis.
-
cilium/cilium Ini adalah proyek CNI (Container Network Interface) raksasa untuk Kubernetes yang core-nya dibangun di atas eBPF dan XDP.
Kesimpulan
XDP dan eBPF bukan lagi teknologi masa depan, tapi sudah jadi standar emas untuk high-performance networking di Linux. Untuk mitigasi DDoS, memindahkan logika DROP dari iptables ke XDP adalah perbedaan antara server yang offline dalam 30 detik serangan dan server yang tetap online seolah tidak terjadi apa-apa.