Yılın fırsatı 1 ay al, 1 ay bedava Tüm VPS ve adanmış sunucularda, her sürede geçerli — 12 ay ödeyin, 24 ay kullanın. Süremi ikiye katla
Ana Sayfa / Gizlilik Barındırma Rehberler / VPS DDoS Koruması: Sağlayıcı Nerede Biter, 7. Katman Nerede Başlar
Operasyonlar

VPS'inizde DDoS Saldırısını Atlatmak

Her barındırma planı "DDoS koruması dahildir" der ve hepsi aynı dar şeyi kastediyordur: ağ, gigabitlerle ölçülen akınları soğurur. Küçük siteleri gerçekten çökerten saldırılar ise saniyedeki istek sayısıyla ölçülür, saldırgana neredeyse hiçbir şeye mal olmaz ve tamamen meşru görünerek gelir. Bu rehber ikisi arasındaki çizgiyi çizer, bir dakika içinde hangisinde olduğunuzu nasıl anlayacağınızı gösterir ve çizginin size ait tarafında gerçekten neyin tuttuğunu ele alır.

KYC yok
Yalnızca Kripto
Log Yok
DMCA Göz Ardı Edilir
Tam Root
NVMe SSD

İnsanların DDoS önlemenin gerçekte nasıl işlediğini öğrendiği iki an vardır. İlki sakindir: satın alma sırasında, "DDoS koruması dahildir" yazan özellik listesini okur ve bu cümlenin her şeyi kapsadığını sessizce varsayarsınız. İkincisi sabahın üçüdür: site çökmüştür, grafikler hiçbir anlam ifade etmeyecek şekilde bozuktur ve o dahil koruma — doğru bir biçimde ve tasarım gereği — hiçbir şey yapmamaktadır.

Her iki an da aynı ürünü ve aynı gerçeği içerir: bir barındırma sağlayıcısı, ham hacim olarak gelen saldırıları filtreler, çünkü o paketlerin geçtiği hattın sahibi odur, siz değil. Sıradan görünen isteklerden oluşan saldırıları filtreleyemez, çünkü ağın bakış açısından bunlar zaten sıradan görünen isteklerdir. O çizgi — sağlayıcınızın soğurduğu akın ile kendinizin atlatmak zorunda olduğu akın arasındaki çizgi — bu rehberin tamamının konusudur. Aşağıdaki her şey, bu çizginin hangi tarafında olduğunuzu bulmak ve her durumda ne yapmanız gerektiğiyle ilgilidir.

Aynı adı taşıyan iki farklı saldırı

"DDoS" tek bir kelimedir ama sonuç dışında neredeyse hiçbir ortak yanı olmayan iki farklı sorunu kapsar. Farklı yerlerde, farklı kişiler tarafından, farklı araçlarla durdurulurlar ve bu ikisini birbirine karıştırmak, önleme çabasının bu kadar sık yanlış katmana harcanmasının nedenidir.

Hacimsel — 3. ve 4. katmanUygulama — 7. katman
Ne gelirSYN akınları, açık DNS, NTP veya memcached yansıtıcıları üzerinden UDP amplifikasyonu, ACK akınları, düz çöp paketlerSıradan HTTP istekleri: GET akınları, POST akınları, slow-loris, önbelleği atlatan sorgu dizeleri
Neyle ölçülürGigabit ve saniyede milyonlarca paketSaniyedeki istek sayısı — genellikle sadece birkaç bin
Size zarar vermek için gereken bant genişliğiMuazzam. Bu bir kapasite yarışıdırNeredeyse hiç. Uç nokta yeterince pahalıysa tek bir dizüstü bilgisayar bunu yapabilir
Nerede durdurulmalıAğ ucunda, sağlayıcınız tarafından. Paketler bağlantı noktanıza ulaştığında hasar çoktan verilmiştirKendi sunucunuzda, sizin tarafınızdan, ya da önünde kontrol ettiğiniz bir proxy üzerinde
Sunucuda nasıl görünürArayüz doymuş, paket sayaçları saçma, CPU boşta olabilirBant genişliği mütevazı, ama her işçi meşgul, yük tırmanıyor, veritabanı kuyruğu büyüyor
Kim düzeltirSağlayıcınızın temizleme sistemi, otomatik olarak, genellikle saniyeler içindeSizin yapılandırmanız — hız sınırları, önbellekleme, bağlantı tavanları

Son iki satırı tekrar okuyun, çünkü pratik noktayı onlar içerir. Arayüz doymuşsa, sunucuya yazacağınız hiçbir şey yardımcı olmaz: paketler bağlantı noktasını çoktan tüketmiştir ve onları düşürebilecek tek taraf, yukarı akıştaki yönlendiricinin sahibidir. Arayüz sakin ama site hâlâ çökükse, tam tersi doğrudur — sağlayıcınız yanlış bir şey görmez, çünkü kendi katmanında hiçbir şey yanlış değildir ve düzeltme tamamen size aittir.

VPS'inizde DDoS Saldırısını Atlatmak
Hacimsel akınlar, kapasitenin bulunduğu yerde, ağ ucunda filtrelenir. Bu filtreden sağ çıkan, sıradan görünen trafiktir — ve onu durdurmak sağlayıcınızın değil, sizin işinizdir.

"DDoS koruması dahildir" gerçekte ne satın alır

Ağ katmanı koruması gerçektir, değerlidir ve neredeyse her zaman yanlış anlaşılır. Bir sağlayıcı L3/L4 filtreleme reklamı yaptığında, kastettiği şey, ağının adresinize giden trafiği izlediği ve bir akın tespit edildiğinde trafiğin, kötü niyetli kısmı düşüren ve meşru görüneni ileten temizleme donanımı üzerinden yönlendirildiğidir. Bu, bir destek talebi olmadan ve genellikle kısa bir sarsıntıdan fazlasını fark etmeden gerçekleşir.

Bu tek cümle çok iş yapıyor, bu yüzden neyi kapsayıp neyi kapsamadığını açmakta fayda var:

  • Tek başınıza atlatamayacağınız saldırıları kapsar. 1 Gbps'lik bir bağlantı noktasına sahip bir sunucuya karşı 200 Gbps'lik bir amplifikasyon akını bir yapılandırma sorunu değildir. Bu bir aritmetik meselesidir. Ağ ucundaki temizleme, var olan tek yanıttır.
  • Uygulamanız hakkında durum bilgisi taşımaz (stateless). Filtre, URL'lerinizden hangilerinin pahalı olduğunu, hangi ziyaretçilerin oturum açmış olduğunu ya da arama uç noktanıza gelen bir isteğin logonuza gelen bir istekten dört yüz kat daha maliyetli olduğunu bilmez.
  • Bir eşiğe tepki verir, sizin çektiğinize değil. Tespit, trafik hacmine göre tetiklenir. Eşiği hiç aşmayan bir saldırı, sitenizi ne kadar kapsamlı şekilde çökertmiş olursa olsun onu hiç tetiklemez.
  • Aşırı durumlarda kısa süreliğine null-route'a alabilir. Her ağın bir tavanı vardır. Bir saldırı paylaşılan altyapıyı tehdit ediyorsa, adres bir süreliğine düşürülebilir — bu standarttır, evrenseldir ve olmadan önce bilinmesi, olurken öğrenilmesinden iyidir.

Tek cümlelik özeti: sağlayıcınız kendi ağını korur ve siz de bundan faydalanırsınız. Uygulamanızı korumaz ve bunu yapmanın bir yolu yoktur. 7. katman, sizden esirgenmiş bir ek satış değildir — sağlayıcınızın, TLS'inizi sonlandırmadan içine bakamayacağı bir katmandır ve bu, offshore barındırma kullanan herkes için kendine has ciddi bedelleri olan bir takastır.

Önce bunun gerçekten bir saldırı olup olmadığına karar verin

Şüphelenilen DDoS olaylarının şaşırtıcı bir bölümü, aslında onun kılığına girmiş başka bir şeydir ve çözümleri birbirinin yerine geçmez. Herhangi bir şeyi hız sınırlamaya başlamadan önce, sahtekârları elemek için iki dakika harcayın — buradaki bir yanlış teşhis size bir saat ve bazen gerçek kullanıcılarınızı kaybettirir.

  • Popüler oldunuz. Büyük bir toplayıcı sitedeki bir bağlantı, referrer'ları gerçek ve istekleri bir insanın istediği sayfalara yönelik olması dışında tam olarak bir L7 akını gibi görünen bir trafik şekli üretir. Bu, mutlu bir nedeni olan bir kapasite sorunudur; onu hız sınırlamak kendi kendine zarar vermektir.
  • Bir tarayıcı (crawler) terbiyesini kaybetti. Saldırgan kazıyıcılar (scraper) ve yapay zeka eğitim botları küçük bir sunucuyu kolaylıkla geride bırakabilir. User-agent genellikle kendini ele verir ve çözüm genel bir sınır değil, robots.txt artı hedefli bir sınırdır.
  • Bir şeyi bozdunuz. Önbelleklemeyi devre dışı bırakan bir dağıtım, kontrolden çıkmış bir cron görevi, indeksini kaybetmiş bir veritabanı — hepsi "ani yük, belirgin neden yok" olarak kendini gösterir. Zamanlama yaptığınız bir değişiklikle örtüşüyorsa, o değişikliğe inanın.
  • Akın, kendi izlemenizdir. Nadir, utandırıcı ve herkesin kabul ettiğinden çok daha yaygındır. Geri çekilme (backoff) olmadan yeniden deneyen bir sağlık kontrolü döngüsü, gerçekten etkileyici bir istek hızı üretebilir.

Ayırt edici soru basittir: trafik bir şey mi istiyor? Gerçek yük — düşmanca görünen gerçek yük bile — bir şekle sahiptir. Var olan sayfalara gelir, bağlantıları takip eder, varlıkları (asset) yükler ve makul bir ağ dağılımından gelir. Bir saldırı ise genellikle buna zahmet etmez.

Saldırıyı sunucunun kendisinden okumak

Neler olduğunu sınıflandırmak için bir gösterge paneline ihtiyacınız yok. Sırayla çalıştırılan dört komut, hangi katmanda savaştığınızı bir dakikadan kısa sürede söyler — ve bunu bilmek, bundan sonra yapacağınız her şeyi belirler.

Hat dolu mu? Arayüz sayaçlarını izleyin. Verim, bağlantı noktasının tavanına yakın bir yerde sabitlenmişse hacimsel bir saldırı içindesinizdir ve yapmanız gereken bir destek talebi açmaktır, bir yapılandırma değişikliği değil:

  • vnstat -tr 10 — on saniye üzerinden ortalama verim, doygunluk hakkında elde edebileceğiniz en hızlı dürüst okuma.
  • cat /proc/net/dev komutunu bir saniye arayla iki kez çalıştırmak — herhangi bir araç gerektirmeden arayüz başına paket ve bayt farkları.

Bu bir SYN akını mı? Yarı açık bağlantılar SYN-RECV durumunda birikir. Birkaç tanesi normaldir; binlercesi değil:

  • ss -s — özet satırı, duruma göre bağlantı sayılarını tek bakışta gösterir.
  • ss -tn state syn-recv | wc -l — önemli olan asıl sayı.

Bu 7. katman mı? Bant genişliği sıra dışı değilse ama her şey yavaşsa, erişim günlüğünüzde istemci başına istek sayısını sayın. On binlerce isteği olan tek bir adres amatör işidir; üçer istek gönderen yüz bin adres ise gerçek saldırıdır:

  • tail -n 100000 access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -30
  • İstenen yolları sıralamak için $1 yerine $7 kullanın. Pahalı bir uç nokta baskınsa, hedefi ve çözümün yarısını bulmuşsunuzdur.

Asıl tükenen ne? Yük ortalaması (load average) tek başına size pek bir şey söylemez. Çarptığınız belirli tavanı arayın: PHP-FPM alt süreçlerinin (children) tamamı meşgul, veritabanı bağlantıları sınırında, dosya tanımlayıcıları tükenmiş ya da işçiler diskte bekleyerek D durumunda takılı kalmış olabilir. Siteyi çökerten trafik değil o tavandır ve onu yükseltmek çoğu zaman herhangi bir şeyi filtrelemekten daha hızlıdır.

Bakarken bunu aklınızda tutun: gizlilik odaklı bir hizmet işletiyorsanız, bir saldırı tam da günlüklemeyi artırıp öyle bırakmaya en çok cezbolacağınız andır. Gerekiyorsa artırın, ardından tekrar azaltın ve sonrasında dosyaları agresif biçimde rotasyona sokun. Bir aylık tam ayrıntılı ziyaretçi günlüğünü diskte bırakan bir olay, bir sorunu daha kötü ve daha uzun ömürlü bir sorunla takas etmiş olur. Sunucu OpSec rehberimiz, bunun ait olduğu disiplini ele alır.

İlk on dakika

Baskı altındayken insanlar ellerindeki en büyük kolu çekmek ister ve en büyük kol genellikle yanlış olandır. Aşağıdaki sıralama hasarı sınırlayan sıralamadır, kabaca en hızlı ve en güvenli olandan başlayarak:

  1. Harekete geçmeden önce sınıflandırın. Doymuş arayüz hacimsel demektir; meşgul işçilerle sakin arayüz ise 7. katman demektir. Burada harcanan otuz saniye, sizi bir saat boyunca yanlış katmanı düzeltmekten kurtarır.
  2. Hacimselse hemen bir destek talebi açın ve hedef adresi, başlangıç saatini ve arayüz sayaçlarınızı ekleyin. Ardından sunucuya bir şeyler yazmayı bırakın — bunu sunucunun içinden düzeltemezsiniz.
  3. 7. katmansa önce önbellekleyin. Anonim ziyaretçiler için agresif tam sayfa önbelleklemeyi açmak, bir kesintiyi bir omuz silkmeye dönüştürmenin tek en hızlı yoludur ve gerçek trafiğe karşı da işe yarayan tek önlemdir.
  4. Sonra hız sınırlayın — önce hedef alınan uç nokta, sonra geri kalan her şey. Temkinli başlayın. Kendi kullanıcılarınızı da devre dışı bırakan bir sınır, saldırının kendinize verdiğiniz bir devamıdır.
  5. Yalnızca belirsizlik taşımayanı engelleyin. Her biri yüz bin istek gönderen bir düzine adres, açıkça sahte bir user-agent, kullanıcınızın olmadığı tek bir ülke. Ateş altındayken ayrıntılı kurallar yazma dürtüsüne direnin; önümüzdeki ay onları hatırlamayacaksınız.
  6. Gerekirse yükü kasıtlı olarak azaltın. Kimliği doğrulanmamış ziyaretçilere statik bir "bakımda" sayfası sunmak, kutuyu canlı tutar, API'nizi ayakta tutar ve düşünme zamanı kazandırır. Neyin feda edileceğine kendiniz karar vermek, bunun sizin adınıza karar verilmesinden iyidir.
  7. Ne yaptığınızı not edin. Eklediğiniz her geçici kural, gelecekteki sizin için bir mayındır. İşe yarayan kurallar kalıcı hale gelir; geri kalanı yarın çıkarılır.

Tutan hız sınırları ve herkesin yaptığı hata

Hız sınırlama, 7. katman için ana araçtır ve nginx bunu, gerçekten farklı iki sorunu çözen iki yönergeyle iyi yapar. limit_req istek hızını sınırlar — bir istemcinin ne sıklıkla isteyebileceğini. limit_conn ise eşzamanlılığı sınırlar — tek bir istemcinin aynı anda kaç bağlantıyı açık tutabileceğini. Akınlar birincisini gerektirir; işçi havuzunuzu tüketmek için binlerce neredeyse boşta bağlantıyı açık tutan slow-loris saldırıları ise ikincisini. Yalnızca birini devreye alırsanız sorunun yarısına karşı korunmuş olursunuz.

İşe yarayan bir sınırı süsten ibaret olandan ayıran üç ayrıntı vardır:

  • Bir patlama (burst) payı kullanın ve nodelay kullanın. Gerçek tarayıcılar patlamalı çalışır — tek bir sayfa görüntülemesi, neredeyse eşzamanlı bir düzine varlık isteği ateşler. Hareket alanı olmayan bir sınır gerçek ziyaretçileri kısarken, eşiğin hemen altında kendini ayarlayan bir saldırgan sorunsuzca geçer.
  • Pahalı uç noktaları ayrı sınırlayın. Arama sayfanız, giriş formunuz, parola sıfırlama işleviniz ve veritabanına yazan her uç nokta, statik varlıklarınızdan çok daha sıkı bir bütçeyi hak eder. Saldırganlar bunları hiç uğraşmadan bulur, çünkü acıtan uç noktalar bunlardır.
  • 503 değil, 429 döndürün. Bu durum kodu, iyi davranan istemcilere ve arama motorlarına bunun bir hata değil kısıtlama olduğunun sinyalini verir — ve kötü bir öğleden sonranın bir sıralama sorununa dönüşmesini engeller.

Her şeyi sessizce geçersiz kılan hata: sunucunuzun önünde herhangi bir şey varsa — bir CDN, bir yük dengeleyici, kendi ters proxy'niz — o zaman her istek ziyaretçinin adresinden değil, onun adresinden gelir. İstemci başına bir hız sınırı, o zaman tüm interneti tek bir istemci olarak sayar ve ya hiçbir şey yapmaz ya da tüm kitlenizi bir anda yasaklar. Sınırların bir anlam ifade etmesinden önce gerçek IP kaynağınızı yapılandırmalısınız (nginx'te, proxy'nin aralıkları için set_real_ip_from artı gönderdiği başlık için real_ip_header). Bunu da yalnızca proxy'nin kendi aralıklarıyla sınırlayın: açık internetten gelen istemci tarafından sağlanmış bir başlığa güvenmek, bir saldırganın her istekte yeni bir kimlik uydurup sahip olduğunuz her sınırdan doğrudan geçmesine izin verir.

Önbellekleme, dağıtacağınız en ucuz önlemdir

Bir hız sınırı işi reddeder. Bir önbellek ise işin var olmasını engeller. Anonim bir ziyaretçinin gördüğü her şey için tam sayfa önbellekleme, saldırının tamamının ekonomisini değiştirir: bir veritabanı gidiş-dönüşüne, bir şablon render'ına ve bir PHP işçisine mal olacak bir istek, mikrosaniyelerle ölçülen bir dosya okumasına dönüşür. Saniyede dört yüz dinamik istekte çöken aynı sunucu, on binlerce önbelleklenmiş isteği fark etmeden sunar.

Bunu öfkeyle devreye aldığınızda önemli olan şeyler:

  • Yalnızca anonim ziyaretçiler için önbellekleyin. Bir oturum çerezinde atlayın (bypass). Oturum açmış bir kullanıcının sayfasını bir başkasına sunmak, düzeltmekte olduğunuz kesintiden çok daha kötü bir olaydır.
  • Kasıtlı olarak bayat içerik sunun. nginx'in proxy_cache_use_stale yönergesi updating error timeout ile birlikte kullanıldığında, arka ucunuz zorlandığında ziyaretçilerin bir hata yerine biraz eski bir sayfa almasını sağlar. Bir saldırı sırasında bu, iyi görünen bir site ile ölü görünen bir site arasındaki farktır.
  • Yinelenen ıskalamaları birleştirin. proxy_cache_lock, önbelleklenmemiş aynı sayfa için gelen bin eşzamanlı isteğin, bin değil tek bir arka uç isteği üretmesini sağlar. Bu olmadan, önbelleği atlatan bir saldırı doğrudan önbellekten geçer ve veritabanınıza tam güçle iner.
  • Önbelleği atlatan sorgu dizelerini etkisiz hale getirin. Standart numara, her isteğin benzersiz bir anahtar olup sonsuza dek ıskalamasını sağlamak için bir ? ve rastgele bir değer eklemektir. Uygulamanızın gerçekte kullanmadığı sorgu parametrelerini yok sayacak şekilde önbellek anahtarınızı normalleştirin.

Burada içselleştirmeye değer keyifli bir asimetri vardır: önbellekleme için harcadığınız her saat, siteyi aynı zamanda en iyi gününde de daha hızlı, işletmesi daha ucuz ve başarıyı atlatmakta daha iyi hale getirir. Başka neredeyse hiçbir savunma hattı, hiçbir şey yanlış gitmezken temettü ödemez.

Sitenizin çökmesine karar veren tavanlar

Çoğu sunucu CPU'su tükendiği için ölmez. Kimsenin kasıtlı olarak belirlemediği görünmez bir tavana çarptıkları için ölürler — artık kimsenin kullanmadığı donanımda bir anlamı olan on yıl önceden kalma bir varsayılan değer. Saldırı altında asıl önce kırılanlar bunlardır:

  • Uygulama işçileri. PHP-FPM'nin pm.max_children değeri, Python işçi sayınız, Node küme boyutunuz. Bu, sitenizin gerçek eşzamanlılık sınırıdır. Hepsi meşgulken her ek ziyaretçi kuyruğa girer ve CPU ne kadar boşta görünürse görünsün site çökmüş demektir. Bunu yalnızca belleğin izin verdiği kadar yükseltin — takas alanına (swap) düşmek, kuyruğa girmekten daha kötüdür.
  • Kabul kuyruğu. net.core.somaxconn ve dinleme geri birikiminiz (backlog), kaç bağlantının kabul edilmeyi bekleyebileceğine karar verir. Küçük bir geri birikim, atlatılabilir bir patlamayı reddedilen bağlantılara dönüştürür.
  • SYN cookies. net.ipv4.tcp_syncookies, çekirdeğin, hiçbir zaman tamamlanmayacak bağlantılar için durum ayırmadan bir SYN akınına yanıt vermesini sağlar. Modern çekirdekler bunu varsayılan olarak etkinleştirir; varsaymak yerine doğrulayın, çünkü hiçbir maliyeti yoktur ve sizi en yaygın akından korur.
  • Dosya tanımlayıcıları. Her bağlantı bir tanımlayıcıdır. Varsayılan nofile sınırı, sunmaya çalıştığınız bağlantı sayısından sıklıkla düşüktür ve arıza biçimi — her şey sağlıklı görünürken kabullerin başarısız olması — sabahın üçünde gerçekten kafa karıştırıcıdır.
  • Veritabanı bağlantıları. Bağlantı havuzunu yükseltmeden işçi sayınızı yükseltmek, kuyruğu yalnızca görülmesi daha zor bir yere taşır. Bu iki sayı birlikte ayarlanmalıdır.

Bunları bir olay sırasında değil, sakin bir günde ayarlayın. Bunları bilmenin asıl anlamı, site çöktüğünde tahmin etmek yerine çarptığı tavanı adlandırabilmenizdir — ve adlandırılmış bir tavan, sabitlenmiş bir tavandır.

Kaynağın önüne bir şey koymak

Yukarıdaki her şey sunucuda gerçekleşir. Bir sonraki adım, trafiği alan şeyin gerçekten sunucu olup olmaması gerektiğine karar vermektir. Üç dürüst seçenek vardır ve doğru yanıt, ne karşılayabileceğinizden çok neyi barındırdığınıza bağlıdır.

YaklaşımSize ne kazandırırSize neye mal olur
Doğrudan açık, sıkılaştırılmış kaynakBasitlik, üçüncü taraf yok, kontrolünüzde olmayan bir TLS sonlandırması yokAdresiniz herkese açık ve kalıcıdır. 7. katman tamamen size aittir
Ticari bir CDN veya temizleme hizmetiMuazzam soğurma kapasitesi, bir tıkla açılan bir doğrulama sayfası, küresel önbelleklemeİçeriğiniz hakkında fikri olan bir şikayet masası ve trafiğinizi görebilen bir şirket. Offshore veya DMCA'ya duyarlı projeler için bu, aksi halde özenli bir kurulumun en zayıf halkası olabilir
Kendi ön yüz düğümünüz — nginx çalıştıran, güvenlik duvarıyla korunan bir kaynağa proxy'leyen küçük bir VPSTam kontrol, istek yolunda üçüncü taraf yok, yakıp yenisiyle değiştirebileceğiniz bir adres ve gizli kalan gerçek bir adresKendi kapasite sınırları ve çalıştırılacak bir makine daha. Farklı ağlarda iki veya üç ön yüz, çökertilmesini belirgin ölçüde zorlaştırır

Kendi barındırdığınız ön yüz düğümü, genellikle aldığından daha fazla ilgiyi hak eder, özellikle de offshore barındırmayı büyük bir CDN'in pek anlayış göstermeyebileceği nedenlerle seçmiş olan herkes için. Kalıp gösterişsizdir: önde ucuz proxy düğümleri, yalnızca bu düğümlerden gelen bağlantıları kabul edecek şekilde güvenlik duvarıyla korunan bir kaynak, ön yüzleri gösteren DNS. Bir ön yüz saldırıya uğrarsa, onu dakikalar içinde yeni bir adresle değiştirirsiniz ve kaynak bunun hiç farkına varmaz. Bu mimarinin tam sürümü — bir kaynak adresin yine de sızabileceği altı yol dahil — kaynak sunucu IP'nizi gizleme rehberimizin konusudur.

Gizli bir kaynak, her filtreden daha değerlidir

Bunu açıkça söylemekte fayda var, çünkü olağan önceliği tersine çevirir: size açık olan en ucuz DDoS önlemi, saldırganın sahip olmadığı bir adrestir. Filtreleme, bu zaten başarısız olduğunda yaptığınız şeydir.

Bu, kulağa geldiğinden daha önemlidir, çünkü kaynak adresleri sürekli ve sessizce sızar. Önüne bir proxy koymadan önceki geçmiş DNS kayıtları, değişiklikten yıllarca sonra bile varlığını sürdürür. Doğrudan uygulamadan gönderilen posta, adresi başlıklarında taşır. Ham adres üzerinden verilmiş bir TLS sertifikası, sertifika şeffaflığı günlüklerinde kalıcı olarak yayımlanır. Bir hata sayfası, bir yönlendirme ya da hiç proxy'lenmemiş belirsiz bir alt alan adı, hepsi bunu ele verir. Daha önce açık olan bir sunucunun önüne bir CDN koyduysanız, onu değiştirene kadar eski adresin bilindiğini varsayın.

Bunun doğal sonucu bir güvenlik duvarı kuralıdır ve bu rehberdeki tek başına en değerli satırdır: bir şey öne yerleştirildikten sonra, kaynak 80 ve 443'te o ön yüzün adresleri dışındaki her şeyden gelen bağlantıları reddetmelidir. Bu olmadan proxy yalnızca bir öneridir — gerçek adresi öğrenen herkes onun etrafından dolaşıp sizi doğrudan hedef alabilir ve önde yapılandırdığınız her şey süse dönüşür.

Saldırıları sıradan tutacak donanım ve konum seçmek

Bunun bir kısmına, bir saldırı hiç yaşanmadan önce, bir plan seçtiğiniz anda karar verilir. Üç özellik, teknik özellikler tablosunun ima ettiğinden çok daha fazla önem taşır:

  • Sınırsız bant genişliği. Ölçülü (metered) bir planda, bir saldırı yalnızca bir kesinti değildir — bir faturadır. Hiç talep etmediğiniz ve reddedemediğiniz trafik yine de kotanıza sayılır. Sınırsız transfer, finansal bir riski tamamen teknik bir riske dönüştürür ki bu çok daha iyi bir sorun sınıfıdır.
  • Bağlantı noktasının size ait olup olmadığı. Paylaşımlı sanallaştırılmış bir sunucuda, saldırı altındaki bir komşu sizi de kötü etkileyebilir ve kendi koruma tavanınız paylaşılır. Kendi bağlantı noktasına sahip özel donanım, her iki etkiyi de ortadan kaldırır. Düşmanca ilgi bekleyen bir proje için, bir VPS'ten yükselmenin en açık nedeni budur — çekirdek sayısından veya RAM'den bile daha çok.
  • Ağın nerede bulunduğu. Gerçek transit kapasitesine sahip, iyi bağlantılı bir Avrupa ağı, zayıf eşlenmiş (peered) bir ağın kaldıramayacağı bir akını soğurabilir ve hukuki nedenlerle seçtiğiniz yargı bölgesinin de kendi ağ özellikleri vardır. Mevcut konumlar arasından seçim yaparken ikisini de kontrol etmekte fayda var.

Sessizce basitlikten yana olan bir ölçek argümanı da vardır. Mütevazı bir sunucuda önbelleğin arkasındaki statik bir site, çökertilmesi olağanüstü zor bir sitedir; aynı içerik, önbelleklenmemiş bir arama uç noktasına sahip ağır bir CMS üzerinde, bir betikle donanmış tek bir kararlı kişi tarafından kırılabilir. Neyin dinamik olduğunu azaltmak bir önlemdir ve bedavadır. Projeniz gerçekten sürekli yük altında yaşıyorsa, yüksek trafikli barındırma notlarımız aynı sorunun boyutlandırma tarafını ele alır.

Yapılmaması gereken beş şey

Buradaki başarısızlık biçimleri listelenecek kadar tutarlıdır ve her biri birilerine bir hafta sonuna mal olmuştur:

  • Kendinizi null-route'a almayın. Kendi adresinizi blackhole'a almak, saldırıyı mümkün olan en gerçek anlamda sonlandırır — kullanıcılarınız da dahil olmak üzere kimse size ulaşamaz. Bu, sağlayıcınız için son çare aracıdır, sizin gönüllü olarak alacağınız bir eylem değil.
  • fail2ban'ı bir DDoS koruması olarak görmeyin. Birkaç adresten gelen kaba kuvvet (brute-force) girişimlerine karşı iyi bir araçtır. Dağıtık bir akına karşı ise saniyeler içinde gelen bir şeye dakikalar içinde tepki verir ve binlerce adresi yasaklayan bir kural, güvenlik duvarı işlemesinde saldırının size verdiğinden daha fazlasına mal olabilir.
  • Fidye ödemeyin. Yıkıcı bir saldırıyla tehdit eden şantaj e-postalarının ezici çoğunluğu, hiçbir yeteneği olmayan ve binlerce özdeş mesaj gönderen kişilerden gelir. İşi gerçekten sonuna kadar götürebilecek küçük azınlık ise geri gelir, çünkü ödediğinizi kanıtlamışsınızdır.
  • Misilleme yapmayın. Neredeyse her yerde yasa dışı olmasının ötesinde, kaynaklar ele geçirilmiş üçüncü taraflardır. Kurbanlara saldırmış olursunuz, hem de açıkça size ait bir adresten.
  • Panik hâlinde taşınmayın. Saldırı ortasında sağlayıcı değiştirmek, yeni adresin dakikalar içinde herkese açık hale gelmesi ve elinizde çalışan bir yapılandırmanın olmaması demektir. Önce durumu stabilize edin, taşınmayı sonra kasıtlı olarak yapın — ve taşınacaksanız, kesintisiz taşıma rehberimiz tam olarak bu taşınmanın ikinci bir olaya dönüşmemesi için var.

Kısa özet

Gerekçelerinden arındırılmış hâliyle, işleyen model sekiz satıra sığar:

  1. Önce sınıflandırın. Doymuş arayüz hacimsel demektir ve sağlayıcınıza aittir. Tükenmiş işçilerle sakin arayüz ise 7. katman demektir ve size aittir.
  2. Hacimselse, adres, zaman damgası ve sayaçlarınızla bir destek talebi açın — ardından sunucuya dokunmayı bırakın.
  3. Anonim ziyaretçiler için agresif biçimde önbellekleyin, baskı altında bayat içerik sunun ve yinelenen ıskalamaları birleştirin. Yapabileceğiniz en yüksek kaldıraçlı değişiklik budur.
  4. İstek hızına ve eşzamanlılığa göre hız sınırlayın, en sıkı sınırı en pahalıya mal olan uç noktalara koyun ve 429 döndürün.
  5. Bunların hepsinden önce gerçek IP yapılandırmanızı düzeltin, yoksa bir proxy'nin arkasındaki her istemci başına sınır ya işe yaramaz ya da felakete yol açar.
  6. Tavanlarınızı bilin — işçiler, geri birikim, tanımlayıcılar, veritabanı bağlantıları — ve bunları sakin bir günde kasıtlı olarak yükseltin.
  7. Kaynak adresini gizli tutun ve yalnızca ön yüz düğümlerinize güvenlik duvarıyla kilitleyin. Bu, tüm filtrelerin toplamından daha değerlidir.
  8. Sınırsız bant genişliği satın alın ki talep etmediğiniz trafik hiçbir zaman aynı zamanda bir faturaya dönüşmesin.

Bunların hiçbiri sizi bağışık kılmaz ve bağışıklık satan herkes başka bir şey satıyordur. Yaptığı şey, sizi canı sıkılmış bir gencin çevrimdışı bırakabileceği kitleden çıkarıp, rahatsız edilmek için gerçek kaynaklar ve gerçek niyet gerektiren kitleye taşımaktır — ki bu da, projelerin ezici çoğunluğu için güvenli olmaktan ayırt edilemez. Geri kalanı, bir sunucuyu her konuda iyi yapan aynı gösterişsiz iştir: ilk gün sıkılaştırılmış, en kötü günde geri yüklenebilir ve trafiğinizi sizin işiniz olarak gören bir yerde çalışan bir sunucu.

SSS

Küçük bir sunucuda DDoS — sık sorulan sorular

01 "DDoS koruması dahildir" her şeye karşı güvende olduğum anlamına mı gelir?

Hayır, ve buradaki boşluk belirsiz değil, tam olarak bellidir. Dahil olan koruma ağ katmanı filtrelemesidir: hacimsel akınları — SYN akınları, UDP amplifikasyonu, ham paket fırtınaları — bağlantı noktanıza ulaşmadan önce, ağ ucunda düşürür. Bu, gerçekten tek başınıza baş edemeyeceğiniz kategoridir, bu yüzden dahil edilmesi doğrudur. Uygulamanızı incelemez, bu yüzden pahalı bir uç noktaya yönelik saniyede birkaç bin isteklik bir HTTP akını ondan dokunulmadan geçer ve tüm ağ grafikleri normal görünürken sitenizi çökertir. 7. katman ise sahip olduğunuz yapılandırmadır: önbellekleme, hız sınırları ve bağlantı tavanları.

02 Bir DDoS saldırısını bir trafik artışından nasıl ayırt ederim?

Trafiğin bir şey isteyip istemediğini sorun. Gerçek ziyaretçiler — popüler bir bağlantıdan gelen ani bir akın olsalar bile — var olan sayfaları ister, o sayfalardaki varlıkları yükler, makul referrer'larla gelir ve birçok ağa doğal bir örüntüyle yayılır. Bir saldırı ise genellikle tek bir yolu döver, varlıkları yok sayar, mantıksız ya da eksik user-agent'lar gönderir ve yapay görünen bir dağılım sergiler. Erişim günlüğünüzde istemci adresi ve yol başına istek sayısını kontrol edin: bir uç nokta baskınsa ve başka hiçbir şey yüklenmiyorsa, bu bir saldırıdır. Bir insanın isteyeceği aynı sayfalar sunuluyorsa ve referrer'larınız gerçekse, mutlu bir nedeni olan bir kapasite sorununuz var demektir.

03 Saldırı altındayken yapabileceğim tek en etkili şey nedir?

Anonim ziyaretçiler için tam sayfa önbelleklemeyi açın ve arka ucunuz zorlandığında bayat içerik sunacak şekilde yapılandırın. Bir hız sınırı işi reddeder; bir önbellek ise işin var olmasını engeller. Bir veritabanı sorgusuna, bir şablon render'ına ve bir uygulama işçisine mal olan bir istek bir dosya okumasına dönüşür ve saniyede birkaç yüz dinamik istekte çöken aynı donanım, on binlerce önbelleklenmiş isteği sunabilir hale gelir. Bu aynı zamanda listedeki, gerçek trafiğe karşı da aynı ölçüde yardımcı olan tek önlemdir, bu yüzden bir hız sınırının aksine kendi kullanıcılarınıza karşı geri tepemez.

04 Önüne bir CDN koyduktan sonra nginx hız sınırım neden çalışmayı bıraktı?

Çünkü artık her istek ziyaretçinin adresi yerine CDN'in adresinden geliyor, bu yüzden istemci başına bir sınır tüm interneti tek bir istemci olarak sayıyor. Eşiğe bağlı olarak, ya hiç tetiklenmez ya da tüm trafiğinizi bir anda yasaklar. Sınırın yeniden gerçek ziyaretçiye göre anahtarlanması için gerçek IP kaynağınızı yapılandırın — nginx'te, güvenilen proxy aralıkları artı proxy'nin gönderdiği başlık. Bu güveni yalnızca proxy'nin kendi aralıklarıyla sınırlayın: açık internetten istemci tarafından sağlanan bir başlığı kabul ederseniz, bir saldırgan her istekte yeni bir kimlik uydurup sahip olduğunuz her sınırdan geçebilir.

05 fail2ban bir DDoS saldırısını durdurmaya yeter mi?

Hayır. fail2ban günlükleri belirli aralıklarla okur ve bir eşiğin ardından suçlu adresleri yasaklar; bu, az sayıda kaynaktan gelen kaba kuvvet girişimlerine uygundur. Dağıtık bir saldırı ise her biri yalnızca birkaç istek gönderen binlerce adresten saniyeler içinde gelir, bu yüzden eşiğe hiçbir zaman ulaşılmaz ve tepki süresi zaten çok yavaştır. Daha da kötüsü, on binlerce girdiye büyüyen bir kural kümesi, saldırının kendisinden daha fazla kaynak tüketebilir. Onu SSH ve giriş uç noktaları için saklayın, akınları ise önbellekleme, hız sınırlama ve ağ ucunda bir filtreyle ele alın.

06 Bir CDN mi kullanmalıyım, yoksa önde kendi ters proxy'mi mi çalıştırmalıyım?

Bu, bütçenizden çok neyi barındırdığınıza bağlıdır. Ticari bir CDN, sizin denk gelemeyeceğiniz bir soğurma kapasitesi ve bir tık uzağınızda bir doğrulama sayfası getirir, ama onun şikayet masasını da devralırsınız ve trafiğinizi görebilir — bu da offshore veya DMCA'ya duyarlı projeler için aksi halde özenli bir kurulumun genellikle en zayıf halkasıdır. Kendi ön yüz düğümleriniz daha fazla iş gerektirir ve gerçek kapasite sınırlarına sahiptir, ama istek yolunda üçüncü taraf yoktur ve saldırıya uğrayan bir ön yüz dakikalar içinde yeni bir adresle değiştirilebilir. Her iki durumda da, kaynağın yalnızca ön yüzden gelen web trafiğini kabul edecek şekilde güvenlik duvarıyla korunması gerekir, yoksa tüm düzenleme süse döner.

07 Bir saldırı, kesinti süresinin yanında bana para kaybettirir mi?

Ölçülü bir planda evet — hiç talep etmediğiniz ve reddedemediğiniz trafik yine de transfer kotanıza sayılır ve sürekli bir akın, bir yıllık barındırma bedelinden daha büyük bir aşım faturası çıkarabilir. Sınırsız bant genişliğinin, teknik özellikler tablosunda göründüğünden çok daha önemli olmasının pratik nedeni budur: finansal bir riski tamamen teknik bir riske dönüştürür. Bir saldırı paylaşılan altyapıyı tehdit ederse sağlayıcıların adresi geçici olarak null-route'a alabileceğini önceden bilmekte de fayda var; bu her yerde standart bir uygulamadır, özellikle sizin sağlayıcınıza özgü bir arıza değildir.

08 Offshore veya no-KYC bir sağlayıcıya geçmek saldırı olasılığını artırır mı?

Barındırma tercihinin kendisi nötrdür; dikkat çeken şey, çalıştırdığınız şeydir. Oyun sunucuları, forumlar, yayın hizmetleri, pazar yerleri ve bir rakibi ya da husumeti olan her şey, yargı bölgesinden bağımsız olarak saldırı çeker. Offshore'da değişen şey başvuru hakkınızdır: can sıkıcı olduğunuz için müşterilikten çıkarılma olasılığınız daha düşüktür, bu da iki ucu keskin bir bıçaktır — koruma, sözleşmesel değil tekniktir. Gerçek transit kapasitesine sahip bir konum seçin, sınırsız bant genişliği alın, kaynak adresini gizli tutun ve 7. katmanı ilk olaydan değil ilk günden itibaren kendi sorumluluğunuz olarak görün.

Akınları filtreleyen bir yere koyun

Yedi yargı bölgesinde, L3/L4 DDoS filtrelemeli, sınırsız bant genişlikli, tam root erişimli ve NVMe depolamalı offshore KVM sunucular. No-KYC, kripto ödeme, işlem onaylandıktan dakikalar sonra devreye alınır.

VPS Paketlerini Gör Dedicated Sunucular Offshore Barındırma