XDP Nedir ve Anti-DDoS Koruması Oluşturmaya Nasıl Yardımcı Olabilir?
XDP’ye Giriş ve Anti-DDoS Koruması Oluşturmaya Nasıl Yardımcı Olabilir?

Halka açık bir API, ters proxy, oyun servisi veya internete açık başka bir iş yükü çalıştırıyorsanız, sunucunun baştan hiçbir işe yaramayan trafikle meşgul olduğu can sıkıcı bir noktaya ulaşabilirsiniz. Uygulama, gerçek kullanıcıları kaldıramadığı için başarısız olmak zorunda değildir. Başarısız olmasının nedeni, ana makinenin herhangi bir şey “hayır” demeden önce gereksiz paketleri alıp ayrıştırmak, sınıflandırmak ve Linux’un derinliklerine taşımak için CPU zamanı harcamasıdır. Pek çok anti-DDoS sorunu buradan başlar: bir bant genişliği hikayesi olarak değil, paket işleme maliyeti hikayesi olarak.
Bu durum yalnızca çekirdek uzmanlarını değil, daha geniş bir kitleyi ilgilendiriyor. Geliştiriciler, kendi sunucusunu yönetenler, VPS ve dedicated sunucu operatörleri ve hatta dayanıklılık seçeneklerini karşılaştıran iş okuyucuları hepsi aynı temel soruyla karşılaşıyor: gerçek işe ait olması gereken zaman ve kaynakları tüketmeden önce kötü trafik ne kadar erken reddedilebilir? Bazı saldırılar uplink’in kendisini ezer, ancak pek çok zararlı durum, hat tamamen dolmadan çok önce saniyedeki paket baskısı olarak ana makinede kendini gösterir.
XDP’nin anlaşılmaya değer olduğu yer burasıdır. Upstream azaltmayı, güvenlik duvarını veya uygulamaya duyarlı kontrolleri değiştirmez. Sunduğu şey, Linux paket yolunda çok daha erken bir kontrol noktasıdır. Bu makale XDP’nin ne olduğunu, bu “erken” konumun anti-DDoS çalışmaları için neden önemli olduğunu ve gerçekçi bir yığında nereye uyduğunu açıklıyor. Geri kalanı takip edebilmek için önce yalnızca çok küçük bir kelime dağarcığına ihtiyacınız var.
2 Dakikada İhtiyacınız Olan XDP Anahtar Kelimeleri
XDP çevresindeki terimlerden bazıları örtüşüyor ve ilk bakışta gerçekte olduklarından daha ürkütücü görünüyorlar. Bu normaldir. Bu sözlüğün amacı makaleyi bir Linux dahili dersi haline getirmek değildir. Sadece açıklamanın geri kalanının net bir şekilde anlaşılmasına yardımcı olacak kadar dil sunmaktır.
| Terim | Sade dil anlamı |
|---|---|
| 📦 XDP | Normal ağ yığını daha fazla iş yapmadan önce gelen bir paket hakkında erken karar verebilen bir Linux paket işleme kancası. |
| 🧩 eBPF | Linux çekirdeği içinde, küçük programların belirli kanca noktalarında çalışmasına izin veren güvenli programlanabilir bir mekanizma. |
| 🔌 NIC sürücüsü | Linux’un bir ağ kartıyla iletişim kurmasını ve ondan paket almasını sağlayan yazılım katmanı. |
| 🛠️ çekirdek ağ yığını | Linux’un paketler geldikten sonra işlemek için kullandığı normal yol; yönlendirme, güvenlik duvarı, soketler ve uygulamalara teslim dahil. |
| 🐧 native mod | Programın, donanım ve sürücünün izin verdiği kadar erken, sürücü alma yolunda çalıştığı daha hızlı XDP yolu. |
| 📥 skb / generic mod | XDP’nin kavramsal olarak hâlâ çalıştığı ancak yolda daha geç ve native moddan daha az performans avantajıyla çalıştığı bir uyumluluk modu. |
| 🔑 BPF maps | Çalışan bir XDP programının ve kullanıcı alanı araçlarının kurallar veya sayaçlar gibi verileri paylaşmasına olanak tanıyan paylaşımlı anahtar-değer tabloları. |
| 🚦 xdp-loader | Arayüzlerdeki XDP programlarını eklemek, incelemek ve yönetmek için kullanılan bir kullanıcı alanı aracı. |
| 🧹 xdp-filter | Özel eBPF kodu yazmadan XDP davranışını göstermeyi kolaylaştıran basit bir XDP tabanlı filtreleme yardımcı programı. |
Bu tablodan yalnızca bir zihinsel kısayol alacaksanız şunu seçin: eBPF programlanabilir mekanizmadır, XDP ise bu mekanizmanın çalışabileceği belirli bir yerdir. Bunu aklınızda tutarak bir sonraki adım daha basit ve daha kullanışlı bir sorudur: XDP aslında ne yapıyor?
XDP Aslında Nedir

XDP, Linux’ta erken bir paket işleme kancasıdır. Sistemin, bir paket bir ağ arayüzüne ulaşır ulaşmaz o paket üzerinde küçük bir eBPF programı çalıştırmasına olanak tanır. O anda Linux hızlı bir karar verebilir: paketin devam etmesine izin ver (XDP_PASS), hemen bırak (XDP_DROP) veya başka tanımlanmış bir şekilde işle. Bu makale için önemli olan kısım basittir: XDP çok erken “geçmesine izin ver” veya “burada durdur” diyebilir.
Linux, eBPF’yi yalnızca ağ iletişimi için değil, birçok bağlamda kullanır. XDP, gelen paketlerin çok erken işlenmesi için oluşturulmuş ağ odaklı sürümdür. Dolayısıyla XDP, eBPF’nin başka bir adı değildir. Çok özel bir rolü olan eBPF tabanlı bir araçtır.
Bu rol, XDP’yi anti-DDoS çalışmaları için kullanışlı kılan şeydir. XDP, paketler Linux ağ yolunun normal, daha ağır bölümlerinden geçmeden önce çalışır. Böylece Linux, güvenlik duvarı, bağlantı takibi, soketler ve nihayetinde uygulamanın kendisi için daha fazla çaba harcamadan önce bazı trafik hakkında karar verebilir. XDP’nin gerçek avantajının yalnızca filtreleme değil, daha erken filtreleme olmasının nedeni budur.
Ayrıca XDP, anti-DDoS’tan daha fazlası için kullanışlıdır. Trafik yönlendirme ve diğer paket işleme görevlerini de destekleyebilir. Ancak anti-DDoS, değerini görmenin en kolay yeridir; çünkü fayda tek bir pratik fikre dayanır: kötü trafik ne kadar erken reddedilirse, sunucunun o kadar az gereksiz iş yapması gerekir. Bunun neden bu kadar önemli olduğunu anlamak için bir sonraki adım, XDP’nin paket alma yolunda tam olarak nerede durduğuna bakmaktır.
Zihinsel Model: XDP Resepsiyon Masası Değil, Kapıdaki Güvenlik Görevlisidir

XDP’yi hayal etmenin en kolay yolu, binanın içindeki bir resepsiyonist değil, kapıdaki bir güvenlik görevlisi olarak düşünmektir. Açıkça istenmeyen bir ziyaretçi kapıda geri çevrilirse, bina uzun bir anlamsız iş zincirinden kurtulur. Kimse iç kapıyı açmaz, onları sisteme kaydetmez veya koridorda yürütmez. Reddetmek için resepsiyon masasına kadar beklersek, bina zaten yanlış kişiye zaman ve dikkat harcamış olur.
Linux paket işleme de aynı şekilde çalışır. Basitleştirilmiş bir alma yolunda, paket NIC ve sürücüden gelir, XDP’ye ulaşır ve ancak o zaman conntrack, güvenlik duvarı, soketler ve nihayetinde uygulamayı besleyen daha zengin çekirdek ağ yığınına devam eder. Görsel olarak yol şöyle görünür:
NIC / driver
↓
XDP ← earliest checkpoint
↓
kernel networking stack
↓
conntrack / firewall
↓
socket
↓
applicationNative modda XDP, Linux’un normal sk_buff yapısını — yığının geri kalanının beklediği daha zengin çekirdek paket nesnesini — tahsis edip doldurmadan önce hareket edebilir. Bu ayrıntı küçük görünür, ancak performans hikayesinin özüdür. Paket açıkça istenmeyen bir şeyse, Linux bu normal yapıyı oluşturmadan önce düşürmek, daha az CPU çalışması, daha az bellek karmaşası ve daha az aşağı yönlü baskı anlamına gelir. XDP_PASS, her paketin kötü olmadığı için mevcuttur; meşru trafiğin hareket etmeye devam etmesini sağlayan “devam et” eylemidir. XDP_DROP, pahalı kısım başlamadan yolculuğu sona erdirdiği için anti-DDoS yıldızıdır. REDIRECT gibi diğer eylemler de mevcuttur, ancak bu açıklama için taşıyıcı değillerdir.
Yerleşim netleştiğinde, anti-DDoS değeri — ve sınırlamalar — gerçekçi bir şekilde değerlendirmek çok daha kolay hale gelir.
XDP Anti-DDoS’a Nasıl Yardımcı Olur — ve Sınırları Nerede Başlar

XDP’nin anti-DDoS gerekçesi açıktır: Linux conntrack, soket işleme ve kullanıcı alanı teslimatı için kaynak harcamadan önce açık çöpleri reddetmenin ucuz bir yoludur. Bir ana makine, uygulamaya hiçbir zaman ulaşmaması gereken yüksek hızlı trafikle bombardımana tutuluyorsa, erken düşürülen her paket sunucunun daha sonra yapmak zorunda olmadığı bir iştir. Bu nedenle XDP, sorunun L3/L4 kenarında en güçlüdür: zaten güvenmediğiniz kaynak adresleri, istemediğiniz protokoller veya iş yükü için açıkça meşru olmayan trafik kalıpları.
Bu durum en çok, acı verici kısmın ham veri hacmi değil, tekrarlanan paket işleme olduğu çöp taşkınlarında önem taşır. Bir ters proxy, UDP ağırlıklı servis veya halka açık API, ana makine saçmalıkları sınıflandırmakla meşgulse, uplink tamamen dolmadan çok önce yavaşlayabilir. XDP, bu israfın bir kısmını kapıya yakın kesmek için bir yol sunar.
📝 Not: XDP, doymuş bir upstream bağlantısını korumaktan çok ana makine kaynaklarını korur. Sağlayıcıya bakan bağlantı zaten doluysa, ana makine düzeyinde erken düşürme ağ yolunu tek başına düzeltemez.
Bu ayrım, XDP’nin bir kaide üzerinde değil, katmanlı bir tasarımda yer almasının temel nedenidir. Aşağıdaki tablo, XDP ile nftables ile upstream/sağlayıcı azaltmanın pratik sürümüdür:
| Katman | Nerede etki eder | En iyi neyi korur | Tek başına neyi çözemez | Yığındaki en iyi rol |
|---|---|---|---|---|
| XDP | En erken ana makine alma kontrol noktasında | Açık istenmeyen trafikten kaynaklanan CPU ve paket yolu maliyeti | Doymuş bir uplink, durum bilgili politika veya uygulamaya duyarlı filtreleme | İlk geçiş erken düşürme katmanı |
| nftables | Ana makine ağ yığınının derinlerinde | Durum bilgili güvenlik duvarı, daha zengin politika, servise duyarlı ana makine kontrolleri | Paketlerin o kadar ilerlemesi için zaten harcanan ekstra ana makine çalışması | Ana güvenlik duvarı ve politika katmanı |
| Upstream / sağlayıcı azaltma | Trafik sunucunuza tam olarak ulaşmadan önce | Bağlantı doygunluğu, daha büyük hacimsel taşkınlar, daha geniş kenar filtrelemesi | Ayrıntılı ana makine bağlamı veya uygulamaya özgü yerel politika | Sunucu öncesi dış azaltma katmanı |
Başka bir deyişle, XDP ve nftables düşman değildir. Yolun farklı bölümlerini çözerler. nftables daha zengin ve durum bilgilidir. Bu makalede kullanılan demo aracı olan xdp-filter, tam bir güvenlik duvarının yerini aldığını iddia etmeden XDP modelini göstermek için neden kullanışlı olduğunu açıklayan kasıtlı olarak basit ve durumsuz bir araçtır. Bağlantı takibine, katmanlı izin listelerine, yanıt durumu işlemeye veya uygulamaya duyarlı kurallara ihtiyaç duyuyorsanız, bu demo yardımcı programının derinliğinin ötesinde sorunları zaten tanımlıyorsunuzdur.
Üretim operatörleri XDP tarzı düşürme kullanır çünkü erken atma aşağı yönlü çalışmayı azaltır. Cloudflare’in L4Drop hikayesi, bu modelin gerçek operasyonlarda neden cazip hale geldiğinin iyi bilinen bir örneğidir. Ancak önemli ders yalnızca manşet saniyedeki paket sayısı değildir. Tasarım mantığıdır: kötü trafiği daha erken reddedin, böylece makinenin geri kalanı gerçek trafiği daha uzun süre sunmaya devam edebilsin.
Gerçek dünya sonuçları büyük ölçüde ortama bağlıdır. NIC ve sürücü desteği, XDP’nin native mi yoksa skb modunda mı çalıştığı ve gelen trafiğin şekli, gerçekte ne kadar fayda elde ettiğinizi etkiler. Bu nedenle satıcılardan veya hiper ölçekleyicilerden gelen manşet saniyedeki paket rakamları, erken düşürme modelinin işe yaradığının kanıtı olarak değerlendirilmeli, her VPS’nin beklediği sayılar olarak değil. Bunu akılda tutarak, bir sonraki bölüm XDP’nin gerçek bir Ubuntu ana makinesinde birkaç güvenli operatör anlık görüntüsü aracılığıyla nasıl göründüğünü gösteriyor.
XDP Pratikte Nasıl Görünür — Komut Anlık Görüntüleri

Bu bölüm bir kavram kanıtı anlık görüntüsüdür. Amaç, Ubuntu 24.04’te XDP’yi ilgili komut seti ile gerçek hissettirmektir: bir filtre yüklemek, neyin eklendiğini incelemek, düşük riskli bir kural eklemek ve önemli sayaçları okumak için yeterli.
XDP kurulumuna geçmeden önce, önce arayüz adını keşfetmeniz ve seçmeniz gerekir.
ip -br link
Ön koşulları yükleyin.
sudo apt update
sudo apt install -y xdp-tools
Aşağıdaki komutta, <ifname> kısmını eth0 veya ens3 gibi gerçek ağ arayüzü adınızla değiştirin.
sudo xdp-filter load -m skb <ifname>İlk iki komut, gerekli araçları yüklemekten ve ortamın demoyu çalıştırmak için gereken her şeye sahip olmasını sağlamaktan sorumludur.
Üçüncü komut ise xdp-filter‘ı varsayılan allow politikasıyla skb modunda yükler. Bu makale için kullanılan Ubuntu ana makinesinde, bu tam tcp,udp,ipv6,ipv4,ethernet,allow özellik setiyle xdpfilt_alw_all varyantını üretti. -m skb seçeneğini tercih etmek, NIC veya sürücünüzde native XDP desteği olduğunu varsaymaktan kaçınır ve ilk kavram kanıtı için daha güvenli bir yol haline getirir.
Programın gerçekten eklendiğini doğrulamak için şunu çalıştırın:
sudo xdp-filter status
ip -details link show dev <ifname>xdp-filter status çıktısında, arayüzünüzün skb mode ile listelendiğini görmek istersiniz; buradaki test ana makinesinde, yüklenen özellik seti tcp,udp,ipv6,ipv4,ethernet,allow gösterdi. ip -details link show çıktısında, bir xdpgeneric eki ve xdp_dispatcher programı, o arayüzde generic XDP’nin etkin olduğunu doğrular.

⚠️ Uyarı: Konsol kurtarmanız olmadıkça, SSH oturumunuzu taşıyan canlı bir uzak arayüzde deny-default politikalarını veya geniş düşürme kurallarını test etmeyin. Bu makale tam da bu nedenle bir allow politikası ve bir belgeleme adresi kuralıyla sınırlı kalıyor.
Ardından, yetenek keşfini inceleyin. Bu size NIC ve sürücünün XDP yüzeyinde ne ortaya koyduğunu söyler, nihai performansınızın ne olacağını değil.
sudo xdp-loader features <ifname>Tam çıktı donanıma göre değişir, ancak temsili bir sonuç genellikle şunlar gibi satırlar içerir:

Burada en önemli olan NETDEV_XDP_ACT_BASIC‘tir; çünkü bu, yolun temel XDP eylem modelini ortaya koyduğunu söyler. Yeniden yönlendirme desteği gibi ekstra bayraklar kullanışlıdır, ancak basit bir anti-DDoS kavram kanıtı için gerekli değildir.
Ardından, XDP yükleyicisinin programı nasıl yönettiğini ve hangi modda çalıştığını doğrulayın.
sudo xdp-loader statusÇalışan bir sistemde, durum görünümü şöyle görünebilir:

Bu küçük ama önemli bir operatör kontrolüdür. XDP’nin yalnızca kullanıcı alanında yaşayan bir kural kavramı olmadığını doğrular — arayüzde yüklü bir program vardır ve mod sütunu native mi yoksa skb mi baktığınızı söyler.
Şimdi bir belgeleme IP adresi kullanarak güvenli bir örnek kural ekleyin. -s bayrağı, sizi sessiz bir başarıyla bırakmak yerine sonuçtaki kural durumunu hemen yazdırdığı için kullanışlıdır.
sudo xdp-filter ip -s -m src 192.0.2.1Temsili bir yanıt şöyle görünebilir:

📝 Not: xdp-filter varsayılan olarak allow politikasına sahiptir. Başka bir deyişle, kuralla eşleşen paketler düşürülür ve kuralla eşleşmeyen paketler normal yoldan geçmeye devam eder.
Bu örnek kasıtlı olarak sıkıcıdır. Anti-DDoS açısından, aynı zamanda erken düşürme kuralının mümkün olan en basit sürümünü gösterir: istemediğiniz bir kaynaktan gelen trafik, ana makinenin geri kalanı üzerinde çok fazla çalışmaya yatırım yapmadan önce reddedilebilir.
Son olarak, genel durumu tek bir yerde inceleyin.
sudo xdp-filter statusTipik bir sistemde, çıktı kalıbı en bilgilendirici olanıdır.

Bu durum görünümü, kavram kanıtının operasyonel olarak kullanışlı hale geldiği yerdir. Yüklenen arayüzü, etkin modu, etkin xdp-filter varyantını, etkin özellik setini ve kural başına sayaç durumunu tek bir komutta görebilirsiniz. Görünürse XDP_ABORTED, ağırlıklı olarak bir hata/hata ayıklama kovası olup etrafında plan yaptığınız eylem değildir. Daha da önemlisi, düşürme sayacı 0‘da kalırsa, bu filtrenin başarısız olduğu anlamına gelmez. Yalnızca yakalama penceresi sırasında kuralla eşleşen hiçbir paketin kurala çarpmadığı anlamına gelir.
💡 Çıkarım: xdp-filter’ı basit, durumsuz bir kavram kanıtı aracı olarak değerlendirin, nftables’ın yerini alan bir araç olarak değil. Ayrıca XDP katmanında düşürülen paketlerin normal tcpdump yolunda hiç görünmeyebileceğini unutmayın; bu da XDP’ye özgü durum çıktısını ve sayaçları daha güvenilir bir doğrulama yöntemi haline getirir. Daha sonra canlı bir görünüm istiyorsanız, sudo xdp-filter poll -i 2000 makul bir isteğe bağlı sonraki adımdır — ancak yalnızca arayüzde bu çıktıyı yararlı kılacak kadar ilginç trafik olduğunda.
Güvenli bir demoyu görmek fikri somutlaştırır. Ancak gerçek karar, komutların çalışıp çalışmadığı değildir. Gerçekte yönettiğiniz altyapı türünde bu ekstra katmanın operasyonel karmaşıklığa değip değmediğidir.
VPS ve Dedicated Sunucular için XDP’nin Ne Zaman Değerlendirilmeye Değer Olduğu

XDP, halka açık bir iş yükü, uygulama normal şekilde yanıt vermeden önce istenmeyen paketlere anlamlı CPU zamanı kaybettiğinde ilgi çekici hale gelir. İyi adaylar arasında halka açık API’ler, ters proxy’ler, ağ geçitleri, internete açık UDP ağırlıklı servisler ve uygulama kendisi darboğaz olmasa bile ağ yolunu zorlamaya yetecek kadar düzenli olarak çöp trafik gören ana makineler yer alır. Bu ortamlarda, daha erken reddetme gerçek sunucu kapasitesini geri kazandırabilir.
Daha basit filtrelemenin yeterli olduğu pek çok durum da vardır. Düşük trafikli bir web sitesi, dahili bir araç, bir hazırlık kutusu veya gerçek gereksinimi paket hızı rahatlaması yerine durum bilgili ana makine güvenlik duvarı olan bir servis genellikle önce XDP’ye ihtiyaç duymaz. nftables fark edilir paket yolu baskısı olmadan riski zaten karşılıyorsa, başka bir katman eklemek değerden çok daha fazla hareketli parça oluşturabilir.
Hızlı bir karar çerçevesi olarak:
- Güvenlik duvarı genellikle yeterlidir; trafik hafif olduğunda, politikanın duruma veya daha zengin servis mantığına ihtiyacı olduğunda ve ana makine çöp paketlerde görünür şekilde CPU yakmıyorken.
- XDP değerlendirilmeye değer hale gelir; istenmeyen trafik ana makineye yeterince sık ulaştığında ve erken düşürme CPU, conntrack ve soket kapasitesini koruyabildiğinde.
- Upstream azaltma zorunlu olmaya devam eder; gerçek başarısızlık modunun sağlayıcı bağlantısı doygunluğu veya paketler sunucunuza ulaşmadan önce daha büyük hacimsel taşkınlar olduğu durumlarda.
VPS kullanıcıları bir uyarıyı akılda tutmalıdır: sanal NIC yolları ve sağlayıcı soyutlaması, skb modu bir demo için iyi çalışsa bile native mod beklentilerini sınırlayabilir. Dedicated sunucular genellikle sürücüler, donanım ve gözlemlenebilirlik üzerinde daha fazla kontrol sağlar, bu nedenle anlamlı native mod desteği olasılığı orada daha iyidir — ancak bare metal üzerinde bile XDP hâlâ tek bir katmandır, tüm cevap değil. AlexHost’u veya başka bir sağlayıcıyı değerlendiriyorsanız, bunları bir araya getirmek yerine üç ayrı soru sorun: ne tür upstream DDoS işleme mevcuttur, plan size ne kadar ana makine kapasitesi sağlar ve o platformda hangi ana makine düzeyindeki kontroller gerçekçidir?
Sonuç: XDP Erken Düşürme Katmanıdır, Tüm Kalkan Değil

XDP hakkında düşünmenin en temiz yolu şudur: Linux’a açık kötü trafik ve paket taşkınları için hızlı bir ilk kontrol noktası sağlar; bu da doymuş bir upstream bağlantısını korumaktan çok sunucu kaynaklarını koruduğu anlamına gelir. XDP’nin anti-DDoS konuşmalarında önem taşımasının nedeni budur. Upstream azaltmanın, durum bilgili güvenlik duvarının veya uygulamaya duyarlı kontrollerin yerini almaz. Ana makinenin daha az anlamsız iş yapmasına yardımcı olur.
Dolayısıyla pratik kural basittir. İstenmeyen trafik, gerçek iş yükleri yanıt veremeden önce ana makine CPU’sunu boşa harcıyorsa, XDP erken düşürme katmanı olarak değerlendirilmeye değer. Asıl sorun dolu bir uplink veya duruma ve uygulama mantığına bağlı politikaysa, XDP upstream azaltmanın ve daha derin filtrelemenin önünde tam bir cevap olarak değil, arkasında yer alır. Buradan doğal bir sonraki adım, özel XDP programları yazmak veya aynı erken düşürme fikri etrafında daha zengin katmanlı bir savunma oluşturmak üzerine bir takip yazısı olabilir.
