Milyonlarca paketlik volumetrik DDoS saldırılarında çekirdek bellek tahsisini (sk_buff) ve iptables softirq kilitlenmesini önleyin; ağ kartı sürücü katmanında çalışan eBPF XDP kurallarını oluşturun.
XDP çekirdek başına 20M+ PPS işleyebilirken, iptables çekirdek başına ~1.5M PPS seviyesinde çöker.
Geleneksel iptables / nftables, paketleri Linux ağ yığınının derinliklerinde filtreler. Her kötü niyetli paket için çekirdek önce bir 'sk_buff' bellek yapısı tahsis eder ve bağlantı takip (conntrack) tablosunu kilitler. Milyonlarca paket geldiğinde paketler 'DROP' edilse dahi bellek tahsisi ve softirq CPU'yu %100 kilitleyerek sunucuyu çökertir. eBPF XDP (eXpress Data Path) ise sürücü (NIC driver) katmanında henüz bellek tahsisi yapılmadan önce nanogecikmeyle paketi düşürür (XDP_DROP).
Sürücü katmanında (XDP_DROP) harcanan önemsiz CPU
sk_buff tahsisi ve conntrack kilitleri nedeniyle tüketilen CPU
Çekirdekte gereksiz soket tamponu (sk_buff) tahsisinden kurtarılan bellek
4 vCPU ile kaldırılabilen maksimum paket hızı
#!/usr/bin/env bash
set -e
echo ">>> 1. xdp-tools ve eBPF bağımlılıklarını kurun:"
if command -v apt-get &>/dev/null; then
sudo apt-get update && sudo apt-get install -y xdp-tools libbpf-dev bpftool
elif command -v dnf &>/dev/null; then
sudo dnf install -y xdp-tools libbpf-devel bpftool
fi
echo ">>> 2. XDP Filtresini ağ arayüzüne (eth0) yükleyin:"
sudo xdp-filter load eth0 --mode native
echo ">>> 3. Volumetrik saldırı koruma kurallarını ekleyin:"
# SYN Flood Hız Sınırlama ve Sahte Paket Engelleme:
sudo xdp-filter tcp-syn --rate-limit 5000
echo ">>> 4. Kalıcı systemd servisini oluşturun ve etkinleştirin:"
sudo tee /etc/systemd/system/xdp-firewall.service > /dev/null << 'EOF'
[Unit]
Description=eBPF XDP Line-Rate DDoS Mitigation Engine
After=network.target network-online.target
Wants=network-online.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/sbin/xdp-filter load eth0 --mode native -p all
ExecStop=/usr/sbin/xdp-filter unload eth0 --all
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable xdp-firewall.service
Geleneksel Linux güvenlik duvarları (iptables / nftables), paketleri çekirdek ağ yığınının (network stack) çok geç bir aşamasında inceler. Saniyede 2 milyon paketlik bir SYN flood veya UDP amplifikasyon saldırısı geldiğinde, Linux çekirdeği her bir sahte paket için önce fiziksel bellekten bir sk_buff (socket buffer) yapısı tahsis eder, bağlantı takip tablosunu (conntrack) günceller ve CPU'da donanım kesmesi (softirq) oluşturur. Kuralınız paketi DROP etse bile, bu işlemler CPU'yu %100 seviyesinde kilitler ve meşru ziyaretçiler sunucuya erişemez.
XDP, Linux çekirdeğinin doğrudan ağ kartı sürücüsü (NIC driver) katmanına güvenli eBPF baytkodları enjekte etmesini sağlar. Paket daha DMA tamponundayken ve işletim sistemi tek bir bayt dahi sk_buff belleği tahsis etmeden önce XDP kodu çalışır. İstenmeyen paket nanosaniyeler içinde XDP_DROP talimatıyla düşürülür. Bu sayede tek bir CPU çekirdeği standart iptables ile ~1.5 milyon PPS kaldırabilirken, XDP ile 20 ila 30 milyon PPS saldırıyı gözünü kırpmadan bertaraf edebilir.
Native (Driver) Modu: Ağ kartı sürücüsü (Intel, Mellanox, VirtIO modern sürücüleri) tarafından doğrudan desteklenir ve en yüksek verimi sunar.
Generic (SKB) Modu: Eski sanallaştırma katmanlarında sürücü desteği olmadığında çalışır; paket bellek tahsisinden sonra incelenir ancak yine de iptables filtreleme kurallarından çok daha hızlıdır.