SYN Flood, DNS Amplification ve UDP yansıtma saldırılarında Linux ağ yığınının paket işleme sınırlarını test edin. Geleneksel netfilter (iptables) kilitlenmelerini, eBPF/XDP sürücü seviyesi filtrelemeyi ve DPDK çekirdek baypas mimarisini karşılaştırın.
Saldırı hacmini, paket profilini ve sunucu güvenlik filtreleme donanımını yapılandırın.
eBPF/XDP Native Driver modu en ideal seçimdir. 4 çekirdek ile saniyede 86.96 Mpps paket işleyebilir ve geleneksel iptables'ın kilitlendiği saldırılarda dahi meşru trafiği %100 ayakta tutar.
Artı: Tüm Linux dağıtımlarında yerleşik. Durumsal güvenlik duvarı (conntrack) ve zengin kurallar.
Eksi: Her paket için sk_buff ve bellek tahsisi yapar. 1-2 Mpps üstü saldırılarda ksoftirqd sunucuyu kilitler.
Artı: Özel sürücü desteği gerektirmez, sanal makinelerde (virtio_net) ve her NIC'te çalışır.
Eksi: Paket yine de sk_buff aşamasına girer; yerel (native) XDP kadar yüksek PPS sunamaz.
Artı: sk_buff tahsis edilmeden NIC halka belleğinde (ring buffer) saniyede 20M+ paket elenir. tcpdump ve Linux IP yönlendirmesiyle tam uyumludur.
Eksi: Ağ kartı sürücüsünün XDP desteği (ixgbe, mlx5, i40e vb.) olması gerekir.
Artı: Filtreleme doğrudan SmartNIC kartı üzerinde çalışır. Ana sunucunun CPU kullanımı %0'dır.
Eksi: Netronome Agilio veya NVIDIA BlueField gibi pahalı SmartNIC donanımı gerektirir.
Artı: En mutlak yüksek PPS işleme gücü ve mikrosaniye altı gecikme.
Eksi: Tahsis edilen CPU çekirdekleri %100 yükte sürekli döner. tcpdump, iptables ve standart Linux ağ araçları çalışmaz.
// eBPF XDP Line-Rate DDoS Drop Program (C)
// Derleme: clang -O2 -target bpf -c xdp_ddos_filter.c -o xdp_ddos_filter.o
// Yükleme: ip link set dev eth0 xdpgeneric off xdpdrv obj xdp_ddos_filter.o sec xdp
#include <linux/bpf.h>
#include <linux/if_ether.h>
#include <linux/ip.h>
#include <linux/tcp.h>
#include <bpf/bpf_helpers.h>
SEC("xdp")
int xdp_ddos_mitigate(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;
if (eth->h_proto != __constant_htons(ETH_P_IP))
return XDP_PASS;
struct iphdr *ip = data + sizeof(*eth);
if ((void *)(ip + 1) > data_end)
return XDP_PASS;
// Hedef: Saldırgan SYN Flood veya UDP yansıtmalarını ring buffer'da at
if (ip->protocol == IPPROTO_TCP) {
struct tcphdr *tcp = (void *)ip + (ip->ihl * 4);
if ((void *)(tcp + 1) > data_end)
return XDP_PASS;
// SYN Flood tespiti ve erken elenmesi (46 ns)
if (tcp->syn && !tcp->ack) {
// Şüpheli blok listesi kontrolü yapılabilir
// return XDP_DROP;
}
}
return XDP_PASS;
}
char _license[] SEC("license") = "GPL";Geleneksel Linux ağ yığınında, ağ kartına (NIC) gelen her paket için çekirdek tarafından bir sk_buff (socket buffer) veri yapısı belleğe tahsis edilir. Paket, bağlantı takip modülü (conntrack) tablolarına işlenir ve kilit mekanizmalarıyla değerlendirilir. Bu işlem paket başına yaklaşık 1.200 nanosaniye sürer.
Saniyede 2-3 milyon paket (Mpps) gibi orta ölçekli bir SYN flood saldırısında dahi, işlemci çekirdekleri ksoftirqd iş parçacıkları tarafından %100 oranında kilitlenir. Çekirdek bellek ayıramadığı için meşru web ziyaretçilerinin paketlerini rastgele düşürür ve sunucu yanıt veremez hale gelir.
XDP (eXpress Data Path), Linux çekirdeğinin en devrimsel ağ teknolojisidir. eBPF bayt kodu doğrudan ağ kartı sürücüsünün (NIC driver) DMA halka belleğinde (ring buffer) çalışır. Paket için henüz hiçbir sk_buff tahsis edilmeden ve IP yığınına sokulmadan önce karar verilir.
Bir paketin XDP_DROP ile elenmesi yalnızca 46 nanosaniye sürer. Bu sayede 4 CPU çekirdeği ile saniyede 80+ Mpps paket hat hızında (line-rate) elenebilir. DPDK'nın aksine Linux ağ araçları (tcpdump, BGP FIB tabloları, bpftool) çalışmaya devam eder ve sıfır operasyonel külfetle Cloudflare seviyesinde sunucu içi DDoS kalkanı kurulabilir.