1 puan yazan GN⁺ 2024-03-31 | 1 yorum | WhatsApp'ta paylaş

DDoS saldırısı alıyoruz ama hiçbir şey yapmıyoruz

  • Haftalardır biri DDoS saldırısı girişiminde bulunuyor.
  • Sunucuya milyonlarca istek yağdırarak yapılandırma dosyasını milyonlarca kez indirmeye çalışıyor.
  • Yalnızca son 5 günde 800 binden fazla indirme denemesi yapıldı ve yapılandırma dosyası indirme başına yaklaşık 200MB.
  • Trafiğin büyük kısmı AB'den, özellikle Almanya ve Birleşik Krallık'tan geliyor.
  • Saldırı, bu blog yazısı yazılırken de devam ediyor.

Bu acil durumda yaptığımız şey

  • Saldırganın IP adreslerini engellemiyoruz.
  • Cloudflare kullanıyoruz ama "Under Attack" modunu etkinleştirmiyoruz.
  • Sunucu CPU'su saldırı sırasında zamanın büyük bölümünde neredeyse boşta kalıyor.
  • Genel olarak neredeyse hiçbir şey yapmıyoruz.

Neden?

  • Hizmet, aylık milyarlarca isteği sorunsuz şekilde işleyebiliyor ve bu çok pahalıya mal olmuyor.
  • Yaklaşık 8 API servisi ve veritabanı var; önbellekleme olmadan bile ayda milyarlarca isteği işleyebiliyor.
  • Cloudflare ve sınırsız bant genişliğimiz var.

Bu nasıl mümkün oluyor?

  • TablePlus uygulamasının tasarımı basit ve bu felsefe, minimum düzeyde tutulan arka uç servislerine de uygulanıyor.
  • Vercel veya Netlify gibi üçüncü taraf servisleri kullanmıyoruz. Bunun yerine limitsiz web sunucuları kullanıyoruz.
  • Geçmişte zayıf VPS/işlemciler nedeniyle monolitik yapı darboğaz oluşturuyordu, ancak bugün güçlü VPS'ler tek bir instance üzerinde ayda milyarlarca isteği işleyebiliyor.
  • Bu yüzden her uygulama için monolitik servisler kuruyoruz. Dağıtımı ve bakımı kolay.

Monolitik yapı hakkında konuşalım

  • Her şeyi karmaşıklaştırma eğilimi var ama baskı veya kısıtla karşılaşana kadar bu sorun olmuyor.
  • Karmaşıklıktan hoşlanmadığımız için monolitik yapıyı seçiyoruz. Uygulamanın ihtiyaç duyduğu her şeyi tek bir serviste birleştiriyoruz.
  • Dağıtım basit. Sadece tek bir yapılandırma dosyası, build ve deploy gerekiyor.
  • Bağımlılık az olduğu için hata ayıklamak ve darboğazları tespit etmek kolay.

Go veya Rust'taki tek bir web framework'ü doğru uygulanırsa ayda milyarlarca isteği işleyebilir

  • Yüksek performanslı framework'leri seçiyoruz.
  • Veri kümesi büyüdükçe erişim süresini azaltmak için veritabanını indeksliyoruz.
  • Performans sorunlarının ana işi etkilememesi için ana veritabanını log/kullanım veritabanından ayırıyoruz.
  • İstekleri işlemek ve çekirdek API'ye dağıtmak için Nginx gibi güçlü bir reverse proxy kullanıyoruz.
  • Her şeyi Cloudflare arkasına alıyor ve doğru şekilde yapılandırıyoruz.
  • DDoS koruması olan bir CDN kullanıyoruz.
  • CDN veya önbellekleme olmadan büyük indirilebilir dosyaları VPS üzerinde tutmuyoruz.

Dağıtım hakkında konuşalım

  • TablePlus'ta dağıtım sürecini olabildiğince basitleştiriyoruz.
  • Docker, Kubernetes veya container kullanmıyoruz ve ortam yapılandırması gerekmiyor.
  • Binary kullanıyoruz. Binary dosyalar kopyalanıp Linux sunucusunda bir süreç olarak çalıştırılabiliyor.
  • Go ve Rust'ı seçiyoruz. Bunlar yüksek performanslı diller ve dağıtım için binary dosyaları üretebiliyor.

Güncelleme

  • Vercel bizimle iletişime geçti ve bu tür durumlarda siteyi koruyabilecek özellikleri olduğunu söyledi.
  • Harcama yönetimi ile harcama limiti belirlenebiliyor ve CF'nin "Under Attack" moduna benzer bir saldırı challenge modu var.

GN⁺ görüşü

  • Bu yazı, DDoS saldırılarına rağmen hizmeti kararlı şekilde çalıştırabilmek için güçlü altyapı ve basitleştirilmiş dağıtım stratejisinin önemini vurguluyor.
  • Monolitik mimari, karmaşıklığı azaltma, dağıtımı sadeleştirme ve performans optimizasyonunda avantaj sağlama açısından öne çıkıyor.
  • Bulut servisleri ve CDN'in etkili kullanımıyla DDoS saldırılarına karşı dayanıklılık kazanılması, diğer şirketler için de iyi bir örnek olabilir.
  • Bu yaklaşım, özellikle erken aşamadaki girişimler veya KOBİ'ler için maliyet etkin altyapı kurma konusunda içgörü sunuyor.
  • Ancak monolitik yaklaşım her sistem veya uygulama için uygun olmadığından, ihtiyaçlara ve koşullara göre mimari seçmek önemli.

1 yorum

 
GN⁺ 2024-03-31
Hacker News görüşleri
  • Birinci yorum özeti:

    • Yorum yazarı, web sitesinin performansıyla övünülmesinin abartılı olduğunu düşünüyor.
    • "Aylık 1 milyar istek" saniyede yalnızca birkaç yüz isteğe denk geliyor; bu önemsiz bir seviye ve DDoS saldırısı olarak görülemez.
    • Site bir CDN'in (Cloudflare) arkasında olduğu için, performans açısından özel bir şey yapılmış gibi görünmüyor.
    • 200MB'lık bir dosyanın CDN üzerinden önbelleğe alınıp sunulması zaten beklenen bir şey; bununla övünmek hatalı bir tasarım gibi görünüyor.
  • İkinci yorum özeti:

    • Aylık 4TB trafik DDoS saldırısı sayılacak bir düzey gibi görünmüyor.
    • Aylık 6 milyon istek saniyede yalnızca 2 isteğe denk geliyor ve bu ölçekte tek bir servis (monolith service) çalıştırmak sorun yaratmaz.
    • Çoğu isteğin Cloudflare tarafından CDN düzeyinde önbelleğe alınıp karşılandığı varsayılıyor.
  • Üçüncü yorum özeti:

    • Site, tartışma forumu olmayan basit ve statik bir pazarlama sitesi; geri bildirimler GitHub issue'ları üzerinden alınıyor.
    • Statik dosyaların her gün milyonlarca kez indirilmesini basit bir dağıtımla karşılayabildiğini övünerek anlatmak tuhaf geliyor.
    • Tüm hafifletme işlemlerini Cloudflare yapıyor ve aslında trafik o kadar düşük ki buna bile ihtiyaç olmayabilir.
  • Dördüncü yorum özeti:

    • Anlatılan ek trafik, gerçek bir DDoS saldırısından çok "hizmetin anlamsız biçimde kötüye kullanılması" gibi görünüyor.
    • Bu kötüye kullanım maliyet veya kaynak tükenmesi yaratmadığı sürece göz ardı edilebilir.
    • Otomatik ölçeklenen altyapının büyük kısmının faydalı iş yapmaması sık görülen bir durumdur; yine de trafiği izlemek iyi olur.
    • Loglama konusunda şikayet var; log depolama ucuz ve bol ise sorun olmayabilir, ancak kötüye kullanım trafiğini otomatik sınıflandırıp rutin işlemeyi bastırmak faydalı olur.
  • Beşinci yorum özeti:

    • Birleşik Krallık'tan gelen aylık 50 milyon istek, tek bir script'in çalışmasıyla oluşabilecek bir düzeydir.
    • Yazar, bir Go sunucusunun optimizasyon olmadan bile saniyede bunun 250 katı daha fazla isteği karşılayabilmesini bekliyor.
    • Verilen tavsiye kendi başına kötü değil, ancak paylaşılan sayılar bu tavsiyenin kanıtı sayılmaz.
  • Altıncı yorum özeti:

    • Binary dağıtmak Docker kullanmaya göre tercih edilebilir olabilir, ancak binary'nin çalıştığı host ile ilgili güvenlik endişeleri vardır.
    • Tek bir VPS üzerinde barındırılan tek bir servis (monolith service) ucuz ve iyidir, ancak donanımda sorun çıkarsa ciddi kesinti yaşanabilir.
    • Her şeyi tek bir serviste toplamak, katmanlı savunmayı (defence in depth) zayıflatabilir; bu da bir güvenlik sorunu yaşanırsa veri depolarına erişim sağlanmasına yol açabilir.
  • Yedinci yorum özeti:

    • "Aylık 1 milyar istek", tek bir sunucunun karşılayabileceği bir düzeydir ve tek bir hatalı script bile bu kadar trafik üretebilir.
  • Sekizinci yorum özeti:

    • Aylık milyarlarca isteğin gerçekten büyük bir DDoS saldırısı sayılıp sayılmayacağını sorguluyor.
  • Dokuzuncu yorum özeti:

    • Her uygulama için tek bir servis (monolith service) kurmak dağıtım ve bakım açısından kolaydır.
    • Docker, Kubernetes, bağımlılıklar veya çalışma zamanı ortamı olmadan yalnızca binary dosyası dağıtmak yeterlidir.
  • Onuncu yorum özeti:

    • Başlığı okuyunca daha büyük bir şey beklemiş, ancak Cloudflare arkasında olmak önemli bir etken.
    • Trafik dağılımına bağlı olarak Cloudflare olmadan da bir VPS üzerinde sorunsuz çalışabilir.
    • Rusya kaynaklı layer7 DDoS saldırıları, kapasite sorunları nedeniyle büyük sağlayıcıların bile başarısız olacağı kadar büyük ölçekte olabiliyor.